JavaScript Yürütmesini Anlamak: Eşzamanlı ve Eşzamansız Davranışı Belirlemek için setTimeout ve Promises'ı Kullanma

JavaScript Yürütmesini Anlamak: Eşzamanlı ve Eşzamansız Davranışı Belirlemek için setTimeout ve Promises'ı Kullanma
JavaScript Yürütmesini Anlamak: Eşzamanlı ve Eşzamansız Davranışı Belirlemek için setTimeout ve Promises'ı Kullanma

JavaScript'in Kodu Nasıl Yürüttüğünü Anlamak: Eşzamanlı ve Eşzamansız Modeller

JavaScript tek iş parçacıklı bir dildir, yani her seferinde bir satır kod çalıştırır. Hem senkron hem de asenkron görevleri nasıl ele aldığını anlamak geliştiriciler için çok önemlidir. Bu konuyla ilgili soruların çoğu zaman teknik görüşmelerde ortaya çıkması, bu kavramları iyice kavramayı önemli kılmaktadır.

Geliştiriciler aşağıdaki gibi işlevleri kullandığında setTimeout veya Vaatleryürütme akışı ilk başta biraz tahmin edilemez görünebilir. Ancak net bir yapıyı takip ederek kodunuzun farklı bölümlerinin tam olarak yürütüleceği sırayı belirleyebilirsiniz. Bu, özellikle aşağıdakilerle uğraşırken önemlidir: geri aramalar Ve olay kuyrukları.

Bu örnekte, JavaScript'in aşağıdaki gibi eşzamanlı görevleri nasıl ele aldığını açıklayacağız: konsol.log ve asenkron işlemler gibi setTimeout Ve Vaatler. Bu açıklamanın sonunda, JavaScript'in olay döngüsünün görevleri nasıl önceliklendirdiğini ve işlediğini daha net anlayacaksınız.

Bu makale, röportaj sorularıyla uğraşırken veya eşzamansız kodda hata ayıklarken yararlı bir beceri olan JavaScript'teki yürütme sırasını belirlemenize yardımcı olmak için tasarlanmıştır. Kavramları net bir şekilde göstermek için pratik bir örneğe dalalım.

Emretmek Kullanım örneği
setTimeout() Bu işlev, belirli bir gecikmeden sonra kodun yürütülmesini zamanlar. Eylemleri geciktirmek veya işlemleri olay döngüsüne ertelemek gibi eşzamansız görevleri simüle etmek için kullanılır. Örnekte, "B" ve "E" günlük kaydının yürütülmesini geciktirmek için kullanılır.
Promise.resolve() Hemen çözülecek bir söz yaratır. Bu, eşzamansız kod yürütmeniz gerektiğinde ancak harici bir koşulu beklemeniz gerekmediğinde kullanışlıdır. Örnekte, "B"den sonra "D"yi eşzamansız olarak günlüğe kaydetmek için kullanıldı.
then() Bu yöntem, söz çözümlendiğinde yürütülecek söze bir geri çağrı ekler. Eşzamansız bir görev tamamlandıktan sonra belirli kodun çalışmasını sağlar. Burada çözülen sözden sonra “D”nin loglanmasını sağlar.
Event Loop Olay döngüsü, JavaScript'te eşzamansız görevlerin yürütülmesini sağlayan bir mekanizmadır. Doğrudan bir komut olmasa da işlevini anlamak, koddaki işlemlerin sırasını açıklamak açısından kritik öneme sahiptir. Geçerli yığın temizlendikten sonra geri arama kuyruğundaki görevleri işler.
Microtask Queue Bu, çözülmüş vaatler gibi görevler için bir öncelik sırasıdır. Mikro görevler (çözümlenmiş sözler gibi), olay döngüsünün görev kuyruğundaki görevlerden (setTimeout geri aramaları gibi) önce yürütülür. Bu nedenle "D", "E"den önce günlüğe kaydedilir.
Console.log() Hata ayıklama amacıyla mesajları konsola yazdırmak için kullanılır. Bu bağlamda, senkron ve asenkron kodun yürütüldüğü sıranın izlenmesi açısından faydalıdır.
Callback Queue Geri arama kuyruğu, setTimeout'a iletilen işlevler gibi geçerli kod yürütmesi tamamlandıktan sonra yürütülmeye hazır olan görevleri saklar. Olay döngüsü bu görevleri çağrı yığınına taşır.
Zero Delay setTimeout() gecikmesi 0'a ayarlandığında, tüm eşzamanlı görevler ve mikro görevler tamamlandıktan sonra geri arama yürütülür. Örnekte "E" içeren geri arama, gecikmesi 0 olmasına rağmen "D"den sonra çalışır.
Asynchronous Execution Bu, belirli işlemlerin ana kod akışından ayrı olarak çalıştığı ve JavaScript'in ana iş parçacığını engellemeden ağ istekleri veya zamanlayıcılar gibi görevleri yerine getirmesine olanak tanıyan bir programlama paradigmasıdır.

JavaScript Yürütme Akışını Keşfetmek: Eşzamanlı ve Eşzamansız Kod

JavaScript'te, eşzamanlı ve eşzamansız kodun yürütme sırasını anlamak, özellikle kodlarla uğraşırken çok önemlidir. setTimeout Ve Vaatler. Anlaşılması gereken temel kavram, olay döngüsünün ilk olarak eşzamanlı görevleri nasıl işlediği ve daha sonra sıradaki eşzamansız görevleri nasıl ele aldığıdır. Sağlanan örnek kodda, ilk iki günlük ("A" ve "F") eşzamanlıdır, yani tam olarak kodda göründükleri sırayla yürütülürler. Çalıştırıldıkları anda, komut dosyası setTimeout gibi eşzamansız görevleri daha sonraki işlemler için hemen planlar.

setTimeout işlevi, yürütme akışında bir gecikme hissi yaratarak işlemleri ertelemenin yaygın bir yoludur. Bu durumda her ikisi de setTimeout işlevler, olay kuyruğuna "B" ve "E" konsol günlüklerini eklemek için kullanılır. "E"nin 0 milisaniyelik bir gecikmeye sahip olmasına rağmen, mevcut senkronize işlemler ve mikro görevler tamamlandıktan sonra hala sıraya alındığını unutmamak önemlidir. Bu ince ayrımı anlamak, daha karmaşık JavaScript görevlerinin yürütme sırasını belirlemede çok önemlidir.

İlkinin içindeki setTimeout geri aramada, öncelikli olan eşzamanlı görev kuyruğunun bir parçası olduğundan ilk önce "B" günlüğü yazdırılır. Daha sonra, bu geri aramanın içinde çözümlenmiş bir söz oluşturulur. Promise.resolve. Bu, "D" günlüğünün "B"den sonra ancak ana olay kuyruğundaki diğer görevlerden önce oluşmasını sağlayan bir mikro görevi tetikler. Mikro görev kuyruğuna yerleştirilen Promises'ın bu davranışı, ikinci setTimeout geri çağırma "E"yi kaydetmeden önce "D"nin günlüğe kaydedilmesine izin veren şeydir. Bu nedenle, mikro görevler standart eşzamansız görevlere göre önceliklidir.

Son yürütme sırasını özetlemek gerekirse: "A" ve "F" eşzamanlı olarak günlüğe kaydedilir, ardından ilk setTimeout tarafından sıraya alınan "B" gelir. Çözümlenen söz, bir sonraki adımda "D"nin bir mikro görev olarak günlüğe kaydedilmesine neden olur. Son olarak, "E" ikincinin bir parçası olduğu için en son günlüğe kaydedilir. setTimeout geri çağırmak. Eşzamanlı görevleri, olay döngüsünü ve mikro görevleri birleştiren JavaScript yürütme akışının bu şekilde anlaşılması, röportaj sorularını yanıtlarken veya gerçek hayattaki projelerde eşzamansız kodda hata ayıklarken çok değerlidir.

Farklı Senaryolarda JavaScript'in Eşzamanlı ve Eşzamansız Yürütülmesini Anlamak

Bu komut dosyası, eşzamanlı ve eşzamansız işlemlerin bir karışımını kullanan JavaScript'in olay döngüsü mekanizmasını gösterir.

console.log("A");
setTimeout(() => {
    console.log("B");
    Promise.resolve("C").then(() => console.log("D"));
}, 1000);
setTimeout(() => console.log("E"), 0);
console.log("F");

JavaScript Yürütülmesini Analiz Etme: Olay Döngüsüne Odaklanma

Bu örnek, olay döngüsünün farklı zamanlama senaryolarında sıralanmış görevleri nasıl işlediğini gösteren önceki örnek üzerine inşa edilmiştir.

console.log("Start");
setTimeout(() => {
    console.log("Middle");
}, 500);
Promise.resolve().then(() => {
    console.log("Promise 1");
});
console.log("End");

JavaScript'in Olay Döngüsüne ve Görev Önceliklendirmesine Derin Bakış

JavaScript'in eşzamansız davranışının önemli bir yönü, olay döngüsü, geri aramaların, vaatlerin ve diğer eşzamansız kodların yürütülmesinden sorumludur. Bu olay döngüsü sürekli olarak çağrı yığınının boş olup olmadığını kontrol eder ve boşsa geri arama kuyruğundan ve mikro görev kuyruğundan gelen görevleri işler. Bu kuyruklarda görevlerin nasıl önceliklendirildiğini anlamak, özellikle kodların işlenmesi sırasında kodun beklendiği gibi davranmasını sağlamak açısından kritik öneme sahiptir. setTimeout ve aynı anda söz veriyor.

Mikro görev kuyruğu, geri arama kuyruğuna göre önceliklidir. Gibi görevler vaat kararları mikro görev kuyruğuna yerleştirilir, yani setTimeout sıfır gecikmeye sahip olsa bile geri arama kuyruğundaki herhangi bir gecikmeli görevden önce yürütülürler. Bu nedenle kod örneğinde, sözdeki "D" günlüğü, ikinci setTimeout'taki "E" günlüğünden önce yürütülür. Beklenmedik davranışlardan kaçınmak için eşzamansız işlemleri karıştıran kod yazarken geliştiricilerin bunu anlaması hayati önem taşır.

Gerçek dünya uygulamalarında, API çağrıları veya zamanlayıcılar gibi eşzamansız işlemler sıklıkla eşzamanlı kodla etkileşime girer. Geliştiriciler, olay döngüsünün, geri arama kuyruğunun ve mikro görev kuyruğunun nasıl çalıştığını bilerek kodlarının sonucunu daha iyi tahmin edebilirler. Bu, özellikle performansı optimize ederken veya karmaşık komut dosyalarında hata ayıklarken önemlidir; eşzamansız işlemler ve senkronize kod sıklıkla etkileşime girer.

JavaScript Yürütme Sırasıyla İlgili Sıkça Sorulan Sorular

  1. JavaScript'teki olay döngüsü nedir?
  2. Olay döngüsü, JavaScript'in, tetiklenenler gibi eşzamansız işlemlerin yürütülmesini yönetmek ve önceliklendirmek için kullandığı mekanizmadır. setTimeout veya Promises.
  3. Nasıl setTimeout iş?
  4. setTimeout Bir geri aramayı belirli bir gecikmeden sonra yürütülecek şekilde planlar, ancak geri arama kuyruğuna yerleştirilir ve yalnızca tüm senkronize kod ve mikro görevler işlendikten sonra yürütülür.
  5. Neden bir Promise önce çöz setTimeout 0 gecikmeyle mi?
  6. Sözler, geri arama kuyruğuna göre daha yüksek önceliğe sahip olan mikro görev kuyruğuna yerleştirilir. setTimeout geri aramalar yapılır.
  7. Geri arama kuyruğu ile mikro görev kuyruğu arasındaki fark nedir?
  8. Geri arama kuyruğu şunun için kullanılır: setTimeout ve diğer eşzamansız işlemler, mikro görev kuyruğu ise aşağıdaki gibi görevleri yerine getirir: Promise geri aramalardan önce bunları çözer ve işler.
  9. İnfaz emri nedir console.log verilen örnekteki ifadeler?
  10. Senkron ve asenkron görevlerin olay döngüsü tarafından işlenme şekli nedeniyle sıra "A", "F", "B", "D", "E" şeklindedir.

JavaScript'in Yürütme Modelini Tamamlama

JavaScript'in olay döngüsünü anlamak, nasıl yapılacağını öğrenmek için kritik öneme sahiptir. asenkron gibi işlemler setTimeout Ve Vaatler idam edilir. Geliştiricilerin kodlarının beklendiği gibi davranmasını sağlamalarına ve birden fazla görevi yerine getirirken sık karşılaşılan tuzaklardan kaçınmalarına yardımcı olur.

Bu örnekte, "A", "F", "B", "D" ve "E"nin son yürütme sırası, mikro görevlerin (Vaatlerin) setTimeout'tan gelen geri aramalara göre nasıl öncelikli olduğunu göstermektedir. Bu bilgi, röportaj soruları ve gerçek hayattaki kodlama zorlukları için çok değerlidir.

JavaScript Yürütme Emri için Referanslar ve Kaynaklar
  1. JavaScript'te olay döngüsü ve görev önceliklendirme kavramlarını detaylandırır. MDN Web Belgeleri - Olay Döngüsü
  2. Davranışlarını tartışır Vaatler Ve setTimeout eşzamansız JavaScript kod yürütmede. JavaScript Bilgisi - Mikro Görev Sırası
  3. JavaScript örneklerini kullanarak eşzamanlı ve eşzamansız görevlerin yürütme sırasını açıklar. freeCodeCamp - JavaScript Vaatlerini Anlamak