Walaupun semakin banyak tapak web dibangunkan menggunakan teknologi AJAX, membina aplikasi AJAX yang kompleks masih menjadi masalah.
Apakah sebab utama kesukaran ini? Adakah ia isu komunikasi tak segerak dengan pelayan? Atau adakah ia isu pengaturcaraan GUI? Biasanya kedua-dua tugas ini diselesaikan oleh program desktop, jadi mengapa begitu sukar untuk membangunkan aplikasi AJAX yang boleh mencapai fungsi yang sama?
Semua orang tahu bahawa JavaScript dilaksanakan dalam satu urutan, tetapi ia juga boleh melaksanakan kaedah secara kerap melalui setTimeout atau setInterval Melalui Ajax, anda boleh terus melaksanakan logik utama selepas menghantar permintaan kepada pelayan tetapi tidak menerima respons. . Bagaimana ini dilakukan dibincangkan di bawah.
Pertama lihat sekeping kod berikut:
<html> <body> <script type="text/javascript"> function printHello() { console.time("hello"); } function printHello1() { console.timeEnd("hello"); } setTimeout(printHello,1000); setTimeout(printHello1,5000); function wait(time) { var now = Date.now(); while(Date.now() - now < time) { } } wait(5000); </script> </body> </html>
Hasil pelaksanaan kod di atas ialah
hello: 0.124ms
Seperti yang dapat dilihat daripada kod, printHello dan printHello1 dilaksanakan hampir serentak. Untuk model berbilang benang, selang pelaksanaan hendaklah 4000ms.
Sebab di atas ialah setTimeout hanya menolak acara ke dalam baris gilir pada titik masa, dan bukannya melaksanakannya serta-merta. Masa pelaksanaan tertentu bergantung pada kemalasan penyemak imbas.
Malah, walaupun javascript adalah satu-utas, penyemak imbas adalah berbilang-utas Penyemak imbas biasa mempunyai urutan berikut:
benang enjin javascript
Benang pemaparan antara muka
Urutan pencetus peristiwa penyemak imbas
Utas permintaan Http
Jalur tunggal JavaScript merujuk kepada urutan enjin JavaScript yang memproses baris gilir acaranya dalam satu urutan, dan penyemak imbas adalah didorong oleh peristiwa tidak segerak, seperti peristiwa klik tetikus, setTimeout dan peristiwa panggil balik Ajax berlaku , penyemak imbas akan meletakkan acara ini ke dalam baris gilir pelaksanaan dan menunggunya untuk dilaksanakan apabila penyemak imbas melahu.
Selain itu, perlu dinyatakan bahawa panggilan ajax sememangnya tidak segerak Penyemak imbas akan memulakan urutan baharu untuk menghantar permintaan kepada pelayan Jika acara panggil balik ditetapkan, acara panggilan balik akan diletakkan dalam acara pada status pemulangan pelayan.
Di atas adalah pemahaman saya tentang JavaScript multi-threading Pemahaman peribadi saya adalah terhad. Saya juga berharap semua wira dapat memberikan pendapat yang berharga dan belajar bersama. Saya harap pengenalan di atas akan membantu semua orang.