Rumah >hujung hadapan web >tutorial js >JavaScript berasaskan pseudo-threading

JavaScript berasaskan pseudo-threading

William Shakespeare
William Shakespeareasal
2025-03-06 01:26:09170semak imbas

JavaScript Timer-Based Pseudo-Threading

artikel terdahulu saya, "Pelaksanaan JavaScript dan had pelayar," membincangkan bagaimana pelayar terkemuka mengendalikan kod JavaScript yang lama dan mencetuskan kesilapan "tidak responsif". Oleh kerana mengubah tingkah laku penyemak imbas tidak boleh dilaksanakan, dan pemprosesan sisi pelayan tidak selalu menjadi pilihan, pemasa menawarkan penyelesaian praktikal untuk melaksanakan tugas yang panjang tanpa membekukan penyemak imbas.

Apakah pemasa javascript?

pemasa JavaScript membolehkan anda menjadualkan pelaksanaan kod selepas kelewatan yang ditentukan. Mereka menyediakan dua fungsi utama:

  • : Melaksanakan fungsi yang disediakan sekali selepas setTimeout(function, msec[, arg1 … argN]) milisaat. Argumen pilihan boleh diserahkan kepada fungsi. msec
  • : Sama seperti setInterval(function, msec[, arg1 … argN]), tetapi berulang kali melaksanakan fungsi setiap setTimeout milisaat sehingga dibatalkan. msec

dan clearTimeout() digunakan untuk membatalkan clearInterval() dan setTimeout operasi masing -masing. Contohnya: setInterval

var timerID = setTimeout(myfunction, 500);
clearTimeout(timerID); // myfunction() will never be called
Nota penting:

    dan
  1. menerima fungsi setTimeout rujukan setInterval (tiada kurungan). akan melaksanakan segera. setTimeout(myfunction(), 500); myfunction() masa milisaat adalah anggaran. Fungsi melaksanakan apabila penyemak imbas terbiar selepas kelewatan yang ditentukan.
  2. Perintah pelaksanaan fungsi tidak dijamin.
  3. mungkin melaksanakan
  4. pertama. setTimeout(f1, 50); setTimeout(f2, 50); f2()
pseudo-threading berasaskan pemasa

Oleh kerana kod masa tidak dilaksanakan dengan segera, benang utama penyemak imbas dibebaskan untuk tugas lain. Ini membolehkan kita memecahkan proses yang panjang ke dalam ketulan yang lebih kecil. Contohnya, untuk melaksanakan fungsi

,

, dan f1() secara berurutan: f2() f3()

function ProcessThread(func) {
    var ms = 20;
    setTimeout(function() {
        func.shift()();
        if (func.length > 0) { //Improved condition check
            setTimeout(arguments.callee, ms);
        }
    }, ms);
}

ProcessThread([f1, f2, f3]);
membuang dan mengembalikan elemen pertama (fungsi) dari array, yang kemudian dilaksanakan.

Melaksanakan semua fungsi dalam array dengan kelewatan 20ms antara masing -masing. Pendekatan ini berfungsi untuk beberapa fungsi, dengan syarat tiada fungsi tunggal melebihi ambang tamat penyemak imbas. Walau bagaimanapun, memproses dataset besar akan memerlukan teknik yang lebih mantap, yang akan diliputi dalam jawatan masa depan. func.shift() ProcessThread

Soalan Lazim (Soalan Lazim)

Bahagian berikut menjawab soalan umum mengenai pemasa JavaScript dan pseudo-threading. Bahagian FAQ asal telah disusun semula dan ditulis semula untuk kejelasan dan kesimpulan. Contoh khusus telah dipermudahkan.

Apakah pseudo-threading dalam JavaScript? Alam Single-threaded JavaScript bermakna ia mengendalikan satu tugas pada satu masa. Pseudo-Threading mensimulasikan pelbagai threading dengan memecahkan tugas panjang ke bahagian yang lebih kecil, menjadualkan pelaksanaan mereka dengan pemasa, yang membolehkan penyemak imbas mengendalikan tugas lain di antara.

Bagaimanakah pemasa JavaScript berfungsi? setTimeout() Bagaimana untuk melaksanakan pseudo-threading menggunakan pemasa JavaScript? setInterval() Gunakan

untuk melaksanakan ketulan fungsi pada selang waktu. Berhenti dengan

. setInterval() Keterbatasan pseudo-threading? clearInterval() Ia tidak membolehkan pelaksanaan selari yang benar; Tugas dijalankan secara berurutan, walaupun dengan tugas penyemak imbas interleaved. Penangguhan yang perlahan.

pseudo-threading vs threading sebenar (mis., Python)? multi-threading Python membolehkan paralelisme yang benar, tetapi memperkenalkan kerumitan seperti keadaan kaum. Pseudo-threading JavaScript lebih mudah tetapi kurang berprestasi untuk tugas-tugas CPU.

Alternatif untuk Pseudo-Threading (janji, async/menunggu)?

Menghentikan pseudo-thread? Gunakan

.

Pseudo-Threading dan Web Web? Pekerja berjalan di latar belakang. async/await

Aplikasi praktikal pseudo-threading? pemprosesan imej, pengiraan kompleks, manipulasi data, dan lain-lain. clearInterval() Perpustakaan/rangka kerja untuk pseudo-threading?

Walaupun tidak secara langsung memberi tumpuan kepada pseudo-threading, perpustakaan seperti

boleh membantu menguruskan operasi asynchronous. Pemasa terbina dalam JavaScript biasanya mencukupi.

Atas ialah kandungan terperinci JavaScript berasaskan pseudo-threading. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel sebelumnya:Pop timbul yang sempurnaArtikel seterusnya:tiada