JavaScript adalah segerak; JavaScript sentiasa segerak dan berutas tunggal, dan hanya tidak segerak dalam erti kata bahawa ia boleh membuat panggilan ajax bermakna bahawa jika blok kod JavaScript sedang dilaksanakan pada halaman, maka pada halaman tersebut Tiada JavaScript lain akan dilaksanakan pada masa ini.
Persekitaran pengendalian tutorial ini: sistem Windows 10, versi JavaScript 1.8.5, komputer Dell G3.
JavaScript sentiasa segerak dan satu benang.
Jika anda melaksanakan blok kod JavaScript pada halaman, tiada JavaScript lain akan dilaksanakan pada halaman itu pada masa ini.
JavaScript adalah tak segerak hanya dalam erti kata ia boleh membuat panggilan Ajax.
Panggilan Ajax akan berhenti melaksanakan dan kod lain akan dapat dilaksanakan sehingga panggilan kembali (berjaya atau sebaliknya), pada ketika itu panggilan balik akan berjalan serentak. Tiada kod lain akan dijalankan pada masa ini. Ia tidak mengganggu mana-mana kod lain yang sedang berjalan.
Pemasa JavaScript berjalan dengan jenis panggilan balik yang sama ini.
Memerihalkan JavaScript sebagai tak segerak boleh mengelirukan. Lebih tepatnya, JavaScript adalah segerak dan satu thread dengan pelbagai mekanisme panggil balik.
jQuery mempunyai pilihan pada panggilan Ajax untuk menjadikannya disegerakkan (dengan async: pilihan palsu). Pemula mungkin menggunakannya secara tidak betul kerana ia membenarkan penggunaan model pengaturcaraan yang lebih tradisional yang mungkin mereka lebih biasa. Sebab ini bermasalah ialah pilihan ini akan menyekat semua
JavaScript pada halaman sehingga selesai, termasuk semua pengendali acara dan pemasa.
Perluaskan pengetahuan
Bahasa Javascript ialah bahasa satu utas
Benang tunggal dan tak segerak tidak boleh menjadi ciri bahasa pada masa yang sama. js telah memilih untuk menjadi bahasa satu-utas, jadi ia tidak boleh menjadi tak segerak sendiri. Oleh kerana penyemak imbas hanya memberikan satu utas utama kepada js untuk melaksanakan fungsi tersebut, hanya satu tugasan yang boleh dilaksanakan pada satu masa, membentuk baris gilir tugasan yang menunggu untuk dilaksanakan, tetapi beberapa tugasan di bahagian hadapan sangat memakan masa, seperti. permintaan rangkaian dan pemasaan Jika pemproses dan pendengar acara beratur untuk menunggu pelaksanaan seperti tugas lain, kecekapan pelaksanaan akan menjadi sangat rendah, malah menyebabkan halaman menjadi beku.
Cara mencapai kesan tak segerak dalam satu thread JavaScript
Jadi, penyemak imbas membuka satu lagi urutan untuk tugasan yang memakan masa ini , terutamanya Termasuk urutan permintaan http, pencetus pemasaan penyemak imbas, utas pencetus peristiwa penyemak imbas. Persekitaran hos (pelayar) membolehkan js mempunyai atribut tak segerak melalui kaedah dipacu peristiwa.
Semua tugas boleh dibahagikan kepada dua jenis, satu tugas segerak (synchronous) dan satu lagi tugas tak segerak (asynchronous). Tugasan segerak merujuk kepada tugas yang beratur untuk pelaksanaan pada utas utama Tugas seterusnya hanya boleh dilaksanakan selepas tugasan sebelumnya telah dilaksanakan merujuk kepada tugas yang tidak memasuki utas utama tetapi memasuki "tugasan tugasan". hanya apabila tugas utas utama selesai dan "baris gilir tugas" mula memberitahu utas utama dan meminta pelaksanaan tugas, tugas itu akan memasuki utas utama untuk pelaksanaan.
Jika CPU terlalu sibuk, lupakan, tetapi banyak kali CPU melahu kerana peranti IO (peranti input dan output) sangat perlahan (seperti operasi Ajax membaca data dari rangkaian) dan terpaksa tunggu. Selepas keputusan keluar, teruskan pelaksanaan.
Secara khusus, mekanisme berjalan tak segerak adalah seperti berikut:
Semua tugas segerak dilaksanakan pada urutan utama, membentuk tindanan konteks pelaksanaan.
Selain utas utama, terdapat juga "gilir tugas". Selagi tugas asynchronous mempunyai hasil yang sedang berjalan, acara diletakkan dalam "baris gilir tugas".
Setelah semua tugasan segerak dalam "tindanan pelaksanaan" selesai, sistem akan membaca "gilir tugasan", dan tugasan tak segerak tersebut akan memasuki tindanan pelaksanaan dan memulakan pelaksanaan.
Urut utama terus mengulangi langkah ketiga di atas.
[Cadangan berkaitan: tutorial video javascript, bahagian hadapan web]
Atas ialah kandungan terperinci Adakah javascript segerak?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!