Rumah  >  Artikel  >  hujung hadapan web  >  Apakah perbezaan antara baris gilir microtask dan baris gilir panggil balik dalam JavaScript tak segerak?

Apakah perbezaan antara baris gilir microtask dan baris gilir panggil balik dalam JavaScript tak segerak?

PHPz
PHPzke hadapan
2023-08-24 09:33:02586semak imbas

异步 JavaScript 中微任务队列和回调队列有什么区别?

Dalam JavaScript tak segerak, terdapat dua cara untuk menjadualkan tugas - Microtask Queue dan Callback Queue. Enjin JavaScript mengendalikan kedua-dua baris gilir ini secara berbeza.

Microtask Queue

Microtask Queue ialah baris gilir tugas yang dilaksanakan selepas tugasan semasa. Barisan gilir microtask diproses oleh enjin JavaScript sebelum beralih ke tugasan seterusnya dalam baris gilir panggil balik.

Contoh

Berikut ialah contoh cara baris gilir microtask berfungsi -

<!doctype html>
<html>
<head>
   <title>Examples</title>
</head>
<body>
   <div id="result"></div>
   <script>
      console.log(&#39;start&#39;);
 
      setTimeout(function() {
         console.log(&#39;setTimeout&#39;);
      }, 0);
 
      Promise.resolve().then(function() {
         console.log(&#39;promise resolve&#39;);
      });
 
      console.log(&#39;end&#39;);
   </script>
</body>
</html>

Dalam contoh di atas, panggilan balik "setTimeout" ditambahkan pada baris gilir panggil balik. "Promise.resolve" ditambahkan pada baris gilir microtask. Enjin JavaScript terlebih dahulu akan melaksanakan semua tugas dalam baris gilir microtask sebelum memasuki baris gilir panggil balik.

Jadi keluaran kod di atas ialah (dalam konsol) -

start
end
promise resolve
setTimeout

Barisan Panggilan Balik

Barisan Panggilan Balik ialah baris gilir tugasan yang dilaksanakan selepas tugasan semasa. Baris gilir panggil balikdiproses oleh enjin JavaScript selepas semua tugasan dalam baris gilir microtask telah dilaksanakan.

Contoh

Berikut ialah contoh cara baris gilir panggil balik berfungsi -

<!doctype html>
<html>
<head>
   <title>Examples</title>
</head>
<body>
   <div id="result"></div>
   <script>
      console.log(&#39;start&#39;);
 
      setTimeout(function() {
         console.log(&#39;setTimeout&#39;);
      }, 0);
 
      console.log(&#39;end&#39;);
   </script>
</body>
</html>

Dalam contoh di atas, panggilan balik ‘setTimeout’ ditambahkan pada baris gilir panggil balik. Enjin JavaScript akan melaksanakan panggilan balik "setTimeout" selepas melaksanakan semua kod dalam tugas semasa.

Jadi output kod di atas adalah (dalam konsol) -

start
end
setTimeout

Perbezaan antara gilir microtask dan gilir panggil balik

Microtask gilir dan panggilan balikMicro

gilir
  • ialah- Yang baris gilir diproses oleh enjin JavaScript sebelum beralih ke tugas seterusnya dalam baris gilir panggil balik. Panggil balikBaris gilir diproses oleh enjin JavaScript selepas semua tugasan dalam baris gilir microtask telah dilaksanakan.

  • MicrotaskPemprosesan baris gilir selepas tugas semasa selesai. Panggil balikBaris gilir diproses selepas baris gilir microtask kosong.

  • Microtasksbarisan diproses dalam gelung acara yang berasingan. Panggil balikBaris gilir diproses dalam gelung acara yang sama.

  • Kelebihan Microtask Queue

    Sesetengah kelebihan Microtask Queue berbanding baris gilir panggil balik ialah-

    • Microtask Queue dikendalikan dalam gelung acara yang berasingan, yang bermaksud jika utas utama disekat, mikrotask akan tetap

    • Baris gilir microtask diproses selepas tugasan semasa selesai, bermakna sebarang kod yang bergantung pada tugasan semasa boleh ditambahkan pada baris gilir microtask dan ia akan diproses. Dilaksanakan serta-merta selepas tugasan semasa selesai.
    • Baris gilir microtask mempunyai keutamaan yang lebih tinggi daripada baris gilir panggil balik, yang bermaksud jika kedua-dua baris gilir dijadualkan untuk dilaksanakan pada masa yang sama, baris gilir microtask akan dilaksanakan terlebih dahulu.
    • Kelebihan baris gilir panggil balik

    Salah satu kelebihan baris gilir panggil balik berbanding baris gilir microtask ialah baris gilir panggil balik diproses dalam gelung acara yang sama dengan utas utama. Ini bermakna jika utas utama disekat, baris gilir panggil balik tidak akan diproses.

    Kesimpulan

    Dalam tutorial ini, kami melihat perbezaan antara baris gilir microtask dan baris gilir panggil balik dalam JavaScript tak segerak. Kami juga melihat merit setiap kohort.

    Atas ialah kandungan terperinci Apakah perbezaan antara baris gilir microtask dan baris gilir panggil balik dalam JavaScript tak segerak?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

    Kenyataan:
    Artikel ini dikembalikan pada:tutorialspoint.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam