Mari bercakap tentang kemahiran JavaScript threads_javascript
Kod Penghakiman 1:
<div id="div"> click me </div> <script> var div=document.getElementById("div"); div.addEventListener('click',function(){ alert('You have clicked me!'); }); for(var i =0; i<999999999;i++){ console.log(i); } </script>
Apabila dilaksanakan, semua penyemak imbas akan membeku jika tiada apa-apa lagi yang berlaku, kerana terdapat terlalu banyak untuk gelung di atas, yang menggunakan banyak sumber CPU Berdasarkan fakta bahawa JavaScript adalah satu thread, pemaparan UI penyemak imbas digantung dan menyebabkan animasi digantung.
Kini persoalannya datang, saya hanya mahu melaksanakan kod di atas, apa yang perlu saya lakukan?
Concurrent.Thread.js
Pustaka kelas ini pada asasnya menggunakan setTimeout untuk melaksanakan "pelbagai benang palsu". Merupakan pilihan yang baik sebelum HTML5 WebWorker keluar. Sebagai contoh, jika kita ingin melaksanakan "coretan kod 1" di atas, kita boleh menulisnya seperti ini (klik saya untuk memuat turun perpustakaan kelas):
Coretan kod 2:
<div id="div"> click me </div> <script src="Concurrent.Thread.js"></script> <script> Concurrent.Thread.create(function(){ var div=document.getElementById("div"); div.addEventListener('click',function(){ alert('You have clicked me!'); }); for(var i =0; i<9999999;i++){ console.log(i); } }); </script>
"Benang baharu" boleh dibuat melalui kaedah cipta yang disediakan oleh perpustakaan kelas ini. Selain itu, menetapkan atribut jenis teg skrip kepada text/x-script.multithreaded-js juga boleh mencapai kesan yang sama:
Kod pecahan tiga:
<div id="div"> click me </div> <script src="Concurrent.Thread.js"></script> <script type="text/x-script.multithreaded-js"> var div=document.getElementById("div"); div.addEventListener('click',function(){ alert('You have clicked me!'); }); for(var i =0; i<9999999;i++){ console.log(i); } </script>
WebWorker
Bagaimanakah HTML5 boleh menutup mata terhadap pengalaman pengguna yang buruk bagi penyemak imbas di atas yang tersekat?
Seterusnya kami menggunakan jujukan Fibonacci klasik untuk menguji:
Kod serpihan empat:
Halaman utama:
<div id="div"></div> <script> window.onload=function(){ var div=document.getElementById("div"); if(typeof(Worker)!=="undefined"){//在创建WebWorker之前,先判断浏览器是否支持 console.log("Start calculating...."); var time1= new Date()*1;//获得当前时间戳 var worker=new Worker("fibonacci.js");//创建WebWorker对象,并传递在新线程中将要执行的脚本的路径 worker.onmessage=function(e){ //监听从新线程发送过来的数据 div.innerHTML=e.data; var time2=new Date()*1; console.log("time spend:"+(time2-time1)+"ms"); } worker.postMessage(36);//向新线程发送数据 }else{ alert("Your browser do not support WebWoker"); } } </script> fibonacci.js: var fibonacci=function (n){ return n<3?n:(arguments.callee(n-1)+arguments.callee(n-2)); } onmessage=function(e){ var num=parseInt(e.data,10); postMessage(fibonacci(num));//向主页面发送数据 }
Penggunaan asas telah diulas dalam kod Melihat pada konsol, anda dapat melihat bahawa masa pelaksanaan akan dicetak tidak lama lagi. Jadi kami sampai pada kesimpulan bahawa WebWorker sesuai untuk melakukan pengiraan yang kompleks dan berskala besar pada bahagian hadapan. Perlu diingat bahawa WebWorker tidak menyokong ujian rentas domain masih harus menggunakan protokol http. Jika tidak, objek Worker tidak boleh dibuat dan ralat skrip akan dilaporkan.
Jika kita perlu melakukan beberapa operasi postMessage secara berterusan, sebaiknya jangan menulis work.postMessage sepanjang masa, seperti ini:
worker.postMessage(36); worker.postMessage(36); worker.postMessage(36);
Oleh kerana hanya terdapat satu tika WebWorker pada masa ini, postMessage akan dilaksanakan secara berurutan dan bukannya secara tak segerak, jadi prestasinya tidak dapat digunakan sepenuhnya. Data boleh dihantar dengan mencipta berbilang contoh WebWorker.
Beberapa perkara yang perlu diambil perhatian ialah:
1. Kami mendapati bahawa WebWorker mencipta pekerja dengan menerima url, dan prinsip pelaksanaan jsonp adalah untuk memuatkan data dengan memasukkan teg skrip secara dinamik, bukankah lebih baik jika kami cuba menggunakan WebWorker untuk mencapai perkara yang sama ? Kerana WebWorker berbilang benang dan tidak mempunyai sekatan, bukankah ia cantik? Tetapi sebenarnya, selepas eksperimen, kami mendapati bahawa prestasi WebWorker tidak memuaskan. Jadi ini bukan perkara yang bagus, kita tidak sepatutnya membiarkannya mengambil alih.
2. Apabila WebWorker menerima maklumat daripada sumber lain, ia sebenarnya membawa bahaya tersembunyi kepada keselamatan tapak Jika ia menerima maklumat skrip daripada sumber yang tidak diketahui, ia mungkin membawa kepada serangan suntikan XSS. Oleh itu, perkara ini perlu diwaspadai, sebenarnya, adalah tidak selamat untuk menggunakan innerHTML dalam contoh kami di atas. Anda boleh menggunakan innerText atau textContent yang disediakan oleh pelayar moden untuk menapis teg html.
Saya agak letih hari ini dan mahu tidur, jadi saya akan menulis sebanyak ini buat masa ini.

JavaScript berjalan dalam penyemak imbas dan persekitaran Node.js dan bergantung pada enjin JavaScript untuk menghuraikan dan melaksanakan kod. 1) menjana pokok sintaks abstrak (AST) di peringkat parsing; 2) menukar AST ke bytecode atau kod mesin dalam peringkat penyusunan; 3) Laksanakan kod yang disusun dalam peringkat pelaksanaan.

Trend masa depan Python dan JavaScript termasuk: 1. Kedua -duanya akan terus mengembangkan senario aplikasi dalam bidang masing -masing dan membuat lebih banyak penemuan dalam prestasi.

Kedua -dua pilihan Python dan JavaScript dalam persekitaran pembangunan adalah penting. 1) Persekitaran pembangunan Python termasuk Pycharm, Jupyternotebook dan Anaconda, yang sesuai untuk sains data dan prototaip cepat. 2) Persekitaran pembangunan JavaScript termasuk node.js, vscode dan webpack, yang sesuai untuk pembangunan front-end dan back-end. Memilih alat yang betul mengikut keperluan projek dapat meningkatkan kecekapan pembangunan dan kadar kejayaan projek.

Ya, teras enjin JavaScript ditulis dalam C. 1) Bahasa C menyediakan prestasi yang efisien dan kawalan asas, yang sesuai untuk pembangunan enjin JavaScript. 2) Mengambil enjin V8 sebagai contoh, terasnya ditulis dalam C, menggabungkan kecekapan dan ciri-ciri berorientasikan objek C. 3) Prinsip kerja enjin JavaScript termasuk parsing, penyusun dan pelaksanaan, dan bahasa C memainkan peranan penting dalam proses ini.

JavaScript adalah di tengah -tengah laman web moden kerana ia meningkatkan interaktiviti dan dinamik laman web. 1) Ia membolehkan untuk menukar kandungan tanpa menyegarkan halaman, 2) memanipulasi laman web melalui Domapi, 3) menyokong kesan interaktif kompleks seperti animasi dan drag-and-drop, 4) mengoptimumkan prestasi dan amalan terbaik untuk meningkatkan pengalaman pengguna.

C dan JavaScript mencapai interoperabilitas melalui webassembly. 1) Kod C disusun ke dalam modul WebAssembly dan diperkenalkan ke dalam persekitaran JavaScript untuk meningkatkan kuasa pengkomputeran. 2) Dalam pembangunan permainan, C mengendalikan enjin fizik dan rendering grafik, dan JavaScript bertanggungjawab untuk logik permainan dan antara muka pengguna.

JavaScript digunakan secara meluas di laman web, aplikasi mudah alih, aplikasi desktop dan pengaturcaraan sisi pelayan. 1) Dalam pembangunan laman web, JavaScript mengendalikan DOM bersama -sama dengan HTML dan CSS untuk mencapai kesan dinamik dan menyokong rangka kerja seperti JQuery dan React. 2) Melalui reaktnatif dan ionik, JavaScript digunakan untuk membangunkan aplikasi mudah alih rentas platform. 3) Rangka kerja elektron membolehkan JavaScript membina aplikasi desktop. 4) Node.js membolehkan JavaScript berjalan di sisi pelayan dan menyokong permintaan serentak yang tinggi.

Python lebih sesuai untuk sains data dan automasi, manakala JavaScript lebih sesuai untuk pembangunan front-end dan penuh. 1. Python berfungsi dengan baik dalam sains data dan pembelajaran mesin, menggunakan perpustakaan seperti numpy dan panda untuk pemprosesan data dan pemodelan. 2. Python adalah ringkas dan cekap dalam automasi dan skrip. 3. JavaScript sangat diperlukan dalam pembangunan front-end dan digunakan untuk membina laman web dinamik dan aplikasi satu halaman. 4. JavaScript memainkan peranan dalam pembangunan back-end melalui Node.js dan menyokong pembangunan stack penuh.


Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

MantisBT
Mantis ialah alat pengesan kecacatan berasaskan web yang mudah digunakan yang direka untuk membantu dalam pengesanan kecacatan produk. Ia memerlukan PHP, MySQL dan pelayan web. Lihat perkhidmatan demo dan pengehosan kami.

Muat turun versi mac editor Atom
Editor sumber terbuka yang paling popular

VSCode Windows 64-bit Muat Turun
Editor IDE percuma dan berkuasa yang dilancarkan oleh Microsoft

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

EditPlus versi Cina retak
Saiz kecil, penyerlahan sintaks, tidak menyokong fungsi gesaan kod
