


Penjelasan terperinci tentang menggunakan pemasa untuk melaksanakan fungsi secara kerap dalam Node.js_node.js
Jika anda biasa dengan pengaturcaraan JavaScript sisi klien, anda mungkin telah menggunakan fungsi setTimeout dan setInterval, yang membenarkan kelewatan dalam menjalankan fungsi untuk satu tempoh masa. Contohnya, kod berikut, setelah dimuatkan ke dalam halaman web, akan menambahkan "Hello there" pada dokumen halaman selepas 1 saat:
var oneSecond = 1000 * 1; // satu saat = 1000 x 1 ms
setTimeout(function() {
document.write('
Hello.
');}, satuKedua);
Dan setInterval membenarkan fungsi dilaksanakan berulang kali pada selang waktu tertentu. Jika kod berikut disuntik ke dalam halaman Web, ia akan menyebabkan "Hello there" dilampirkan pada dokumen halaman setiap saat:
var oneSecond = 1000 * 1; // satu saat = 1000 x 1 ms
setInterval(function() {
document.write('
Hello.
'); }, satu Saat);
Oleh kerana Web telah lama menjadi platform untuk membina aplikasi, dan bukannya halaman statik yang mudah, keperluan sedemikian semakin muncul. Fungsi penjadualan tugas ini membantu pembangun melaksanakan pengesahan borang berkala, penyegerakan data jauh tertunda atau interaksi UI yang memerlukan respons tertunda. Node juga melaksanakan sepenuhnya kaedah ini. Di bahagian pelayan, anda boleh menggunakannya untuk mengulangi atau menangguhkan banyak tugas, seperti tamat tempoh cache, pembersihan kolam sambungan, tamat sesi, tinjauan pendapat, dsb.
Gunakan fungsi kelewatan setTimeout untuk melaksanakan
setTimeout boleh merumuskan pelan pelaksanaan untuk menjalankan fungsi yang ditentukan sekali pada masa hadapan, seperti:
var timeout_ms = 2000; var tamat masa = setTimeout(fungsi() {
console.log("tamat masa!");
}, tamat masa_ms);
setTimeout mengembalikan pemegang tamat masa, yang merupakan objek dalaman Anda boleh menggunakannya sebagai parameter untuk memanggil clearTimeout untuk membatalkan pemasa.
Gunakan clearTimeout untuk membatalkan rancangan pelaksanaan
Setelah anda memperoleh pemegang tamat masa, anda boleh menggunakan clearTimeout untuk membatalkan rancangan pelaksanaan fungsi, seperti ini:
var tamat masa = setTimeout(fungsi() {
console.log("tamat masa!");
}, tamat masa);
clearTimeout(timeout);
Dalam contoh ini, pemasa tidak akan dicetuskan, begitu juga perkataan "masa tamat!" Anda juga boleh membatalkan pelan pelaksanaan pada bila-bila masa pada masa hadapan, seperti dalam contoh berikut:
var tamat masa = setMasa tamat(fungsi A() {
console.log("tamat masa!");
}, 2000);
setTimeout(fungsi B() {
}, 1000);
Buat dan batalkan rancangan pelaksanaan berulang untuk fungsi
setInterval adalah serupa dengan setTimeout, tetapi ia akan melaksanakan fungsi berulang kali pada selang waktu tertentu. Anda boleh menggunakannya untuk mencetuskan program secara berkala untuk menyelesaikan tugas seperti pembersihan, pengumpulan, pengelogan, pemerolehan data, pengundian, dsb. yang perlu dilakukan berulang kali.Kod berikut akan mengeluarkan "tanda" pada konsol setiap saat:
setInterval(function() {
console.log("tandakan");
}, titik);
setInterval mengembalikan pemegang pelan pelaksanaan, yang boleh digunakan sebagai parameter clearInterval untuk membatalkan rancangan pelaksanaan:
console.log("tandakan");
}, 1000);
> // … clearInterval(selang);
Gunakan process.nextTick untuk menangguhkan pelaksanaan fungsi sehingga pusingan seterusnya bagi gelung acara
Kadangkala pengaturcara JavaScript pihak pelanggan menggunakan setTimeout(panggilan balik,0) untuk melengahkan tugasan untuk tempoh masa yang singkat Parameter kedua ialah 0 milisaat, yang memberitahu masa jalan JavaScript untuk menunggu serta-merta selepas semua acara yang belum selesai diproses. Jalankan fungsi panggil balik ini. Kadangkala teknik ini digunakan untuk melambatkan pelaksanaan operasi yang tidak perlu dilakukan segera. Sebagai contoh, kadangkala anda perlu mula bermain animasi atau melakukan beberapa pengiraan lain selepas acara pengguna diproses.
Dalam Node, sama seperti makna literal "gelung peristiwa", gelung peristiwa berjalan dalam gelung yang memproses baris gilir peristiwa Setiap pusingan proses kerja gelung peristiwa dipanggil tanda.
Anda boleh memanggil fungsi panggil balik sekali setiap kali gelung acara memulakan pusingan seterusnya (tanda seterusnya) pelaksanaan Ini betul-betul prinsip process.nextTick, dan setTimeout dan setTimeout menggunakan baris gilir pelaksanaan dalam masa jalan JavaScript, dan. Tidak menggunakan gelung acara.
Dengan menggunakan process.nextTick(panggilan balik) dan bukannya setTimeout(panggilan balik, 0), fungsi panggil balik anda akan dilaksanakan serta-merta selepas acara dalam baris gilir diproses, yang jauh lebih cepat daripada baris gilir tamat masa JavaScript (dalam masa CPU untuk mengukur ).
Anda boleh menangguhkan fungsi sehingga pusingan seterusnya gelung acara seperti berikut:
process.nextTick(function() {
my_expensive_computation_function();
});
Nota: Objek proses ialah salah satu daripada beberapa objek global dalam Node.
Menyekat gelung acara
Waktu jalan Node dan JavaScript menggunakan gelung acara berbenang tunggal Setiap kali gelung, masa jalan memproses acara seterusnya dalam baris gilir dengan memanggil fungsi panggil balik yang berkaitan. Apabila acara dilaksanakan, gelung acara memperoleh hasil pelaksanaan dan memproses acara seterusnya, dan seterusnya sehingga baris gilir acara kosong. Jika salah satu fungsi panggil balik mengambil masa yang lama untuk dijalankan, gelung acara tidak akan dapat mengendalikan acara lain yang belum selesai pada masa itu, yang boleh menjadikan aplikasi atau perkhidmatan sangat perlahan.
Apabila memproses acara, jika fungsi sensitif memori atau sensitif pemproses digunakan, gelung acara akan menjadi perlahan dan sejumlah besar acara akan terkumpul, yang tidak dapat diproses dalam masa atau menyekat baris gilir.
Lihat contoh berikut menyekat gelung acara:
process.nextTick(fungsi nextTick1() {
var a = 0;
manakala(benar) {
a ;
}
});process.nextTick(fungsi nextTick2() {
console.log("tanda seterusnya");
});
tetapkanMasa(fungsi tamat() {
console.log("masa tamat");
}, 1000);
Apabila menggunakan setTimeout, fungsi panggil balik akan ditambahkan pada baris gilir pelan pelaksanaan, dan dalam contoh ini fungsi tersebut tidak akan ditambahkan pada baris gilir. Ini adalah contoh yang melampau, tetapi anda dapat melihat bahawa menjalankan tugas intensif pemproses boleh menyekat atau memperlahankan gelung acara.
Keluar dari gelung acara
Menggunakan process.nextTick, anda boleh menangguhkan pelaksanaan tugas tidak kritikal ke tanda seterusnya bagi gelung acara, yang melepaskan gelung acara supaya ia boleh terus melaksanakan acara lain yang belum selesai.Lihat contoh di bawah Jika anda bercadang untuk memadamkan fail sementara, tetapi tidak mahu fungsi panggil balik peristiwa data menunggu operasi IO ini, anda boleh menangguhkannya seperti ini:
stream.end("respons saya");
process.nextTick(function() {
fs.unlink("/path/to/file");
});
});
Andaikan anda bercadang untuk mereka bentuk fungsi yang dipanggil my_async_function, yang boleh melaksanakan operasi I/O tertentu (seperti menghurai fail log), dan berhasrat untuk membiarkannya dilaksanakan secara berkala Anda boleh menggunakan setInterval untuk melaksanakannya seperti ini:
selang var = 1000;
setInterval(function() {
my_async_function(function() {
console.log('fungsi_async_saya selesai!');
});
}, selang);//Nota Penterjemah: “,selang” sebelumnya telah saya tambahkan, pengarang mungkin telah meninggalkannya kerana ralat tipografi
Nota Penterjemah: (Bahagian tebal di bawah ditambah oleh penterjemah dan bukan kandungan buku asal)
Untuk memudahkan pemahaman bahagian kandungan ini, anda boleh mengubah suai kod pengarang supaya ia sebenarnya boleh dijalankan:
setInterval(function(){
(fungsi my_async_function(){
setTimeout(function(){
console.log("1");
},5000);
}, selang);
Jalankan kod ini dan lihat Anda akan mendapati bahawa selepas menunggu selama 5 saat, "hello" dikeluarkan setiap 1 saat. Jangkaan kami ialah selepas my_async_function semasa dilaksanakan (ia mengambil masa 5 saat), tunggu selama 1 saat sebelum melaksanakan my_async_function yang seterusnya harus ada selang 6 saat antara setiap output. Keputusan ini disebabkan oleh fakta bahawa my_async_function tidak dilaksanakan secara bersiri, tetapi berbilang yang dijalankan pada masa yang sama.

Memahami bagaimana enjin JavaScript berfungsi secara dalaman adalah penting kepada pemaju kerana ia membantu menulis kod yang lebih cekap dan memahami kesesakan prestasi dan strategi pengoptimuman. 1) aliran kerja enjin termasuk tiga peringkat: parsing, penyusun dan pelaksanaan; 2) Semasa proses pelaksanaan, enjin akan melakukan pengoptimuman dinamik, seperti cache dalam talian dan kelas tersembunyi; 3) Amalan terbaik termasuk mengelakkan pembolehubah global, mengoptimumkan gelung, menggunakan const dan membiarkan, dan mengelakkan penggunaan penutupan yang berlebihan.

Python lebih sesuai untuk pemula, dengan lengkung pembelajaran yang lancar dan sintaks ringkas; JavaScript sesuai untuk pembangunan front-end, dengan lengkung pembelajaran yang curam dan sintaks yang fleksibel. 1. Sintaks Python adalah intuitif dan sesuai untuk sains data dan pembangunan back-end. 2. JavaScript adalah fleksibel dan digunakan secara meluas dalam pengaturcaraan depan dan pelayan.

Python dan JavaScript mempunyai kelebihan dan kekurangan mereka sendiri dari segi komuniti, perpustakaan dan sumber. 1) Komuniti Python mesra dan sesuai untuk pemula, tetapi sumber pembangunan depan tidak kaya dengan JavaScript. 2) Python berkuasa dalam bidang sains data dan perpustakaan pembelajaran mesin, sementara JavaScript lebih baik dalam perpustakaan pembangunan dan kerangka pembangunan depan. 3) Kedua -duanya mempunyai sumber pembelajaran yang kaya, tetapi Python sesuai untuk memulakan dengan dokumen rasmi, sementara JavaScript lebih baik dengan MDNWebDocs. Pilihan harus berdasarkan keperluan projek dan kepentingan peribadi.

Peralihan dari C/C ke JavaScript memerlukan menyesuaikan diri dengan menaip dinamik, pengumpulan sampah dan pengaturcaraan asynchronous. 1) C/C adalah bahasa yang ditaip secara statik yang memerlukan pengurusan memori manual, manakala JavaScript ditaip secara dinamik dan pengumpulan sampah diproses secara automatik. 2) C/C perlu dikumpulkan ke dalam kod mesin, manakala JavaScript adalah bahasa yang ditafsirkan. 3) JavaScript memperkenalkan konsep seperti penutupan, rantaian prototaip dan janji, yang meningkatkan keupayaan pengaturcaraan fleksibiliti dan asynchronous.

Enjin JavaScript yang berbeza mempunyai kesan yang berbeza apabila menguraikan dan melaksanakan kod JavaScript, kerana prinsip pelaksanaan dan strategi pengoptimuman setiap enjin berbeza. 1. Analisis leksikal: Menukar kod sumber ke dalam unit leksikal. 2. Analisis Tatabahasa: Menjana pokok sintaks abstrak. 3. Pengoptimuman dan Penyusunan: Menjana kod mesin melalui pengkompil JIT. 4. Jalankan: Jalankan kod mesin. Enjin V8 mengoptimumkan melalui kompilasi segera dan kelas tersembunyi, Spidermonkey menggunakan sistem kesimpulan jenis, menghasilkan prestasi prestasi yang berbeza pada kod yang sama.

Aplikasi JavaScript di dunia nyata termasuk pengaturcaraan sisi pelayan, pembangunan aplikasi mudah alih dan Internet of Things Control: 1. Pengaturcaraan sisi pelayan direalisasikan melalui node.js, sesuai untuk pemprosesan permintaan serentak yang tinggi. 2. Pembangunan aplikasi mudah alih dijalankan melalui reaktnatif dan menyokong penggunaan silang platform. 3. Digunakan untuk kawalan peranti IoT melalui Perpustakaan Johnny-Five, sesuai untuk interaksi perkakasan.

Saya membina aplikasi SaaS multi-penyewa berfungsi (aplikasi edTech) dengan alat teknologi harian anda dan anda boleh melakukan perkara yang sama. Pertama, apakah aplikasi SaaS multi-penyewa? Aplikasi SaaS Multi-penyewa membolehkan anda melayani beberapa pelanggan dari Sing

Artikel ini menunjukkan integrasi frontend dengan backend yang dijamin oleh permit, membina aplikasi edtech SaaS yang berfungsi menggunakan Next.Js. Frontend mengambil kebenaran pengguna untuk mengawal penglihatan UI dan memastikan permintaan API mematuhi dasar peranan


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

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

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

PhpStorm versi Mac
Alat pembangunan bersepadu PHP profesional terkini (2018.2.1).

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Versi Mac WebStorm
Alat pembangunan JavaScript yang berguna

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)