


Penjelasan terperinci tentang pengaturcaraan dipacu peristiwa dalam Node.js_node.js
Dalam model pengaturcaraan tradisional, operasi I/O adalah seperti panggilan fungsi tempatan biasa: atur cara disekat sebelum fungsi tersebut dilaksanakan dan tidak boleh terus dijalankan. Penyekatan I/O berasal dari model hirisan masa yang lebih awal Di bawah model ini, setiap proses adalah seperti orang bebas Tujuannya adalah untuk membezakan setiap orang, dan setiap orang biasanya hanya boleh melakukan satu perkara pada masa yang sama dan mesti menunggu sahaja apabila anda selesai perkara sebelumnya anda boleh memutuskan apa yang perlu dilakukan seterusnya. Tetapi model "satu pengguna, satu proses" ini yang digunakan secara meluas dalam rangkaian komputer dan Internet mempunyai skalabilitas yang lemah. Apabila menguruskan pelbagai proses, banyak memori akan digunakan, dan penukaran konteks juga akan menduduki banyak sumber Ini adalah beban yang besar pada sistem pengendalian, dan apabila bilangan proses meningkat, prestasi sistem akan menurun dengan mendadak.
Benang berbilang adalah alternatif ialah proses ringan yang berkongsi memori dengan utas lain dalam proses yang sama menunggu operasi I/O, utas lain boleh mengambil alih CPU Apabila operasi I/O selesai, utas yang menunggu sebelum ini akan dibangkitkan. Iaitu, benang yang sedang berjalan boleh diganggu dan kemudian disambung semula kemudian. Di samping itu, di bawah beberapa sistem benang boleh berjalan selari pada teras berlainan CPU berbilang teras.
Pengaturcara tidak tahu bila urutan akan dijalankan pada masa tertentu Mereka mesti berhati-hati untuk mengendalikan akses serentak kepada memori yang dikongsi Oleh itu, mereka mesti menggunakan beberapa primitif penyegerakan untuk menyegerakkan akses kepada struktur data tertentu, seperti menggunakan. kunci atau semaphore Gunakan ini untuk memaksa utas untuk dilaksanakan dalam tingkah laku dan rancangan tertentu. Aplikasi yang sangat bergantung pada keadaan dikongsi antara benang terdedah kepada masalah aneh yang sangat rawak dan sukar dicari.
Cara lain ialah menggunakan kolaborasi berbilang utas Anda bertanggungjawab untuk mengeluarkan CPU secara eksplisit dan memberi masa CPU kepada utas lain Kerana anda sendiri mengawal pelan pelaksanaan utas, anda mengurangkan keperluan untuk penyegerakan. tetapi ia juga meningkatkan kerumitan program dan kemungkinan ralat, dan tidak mengelakkan masalah multi-threading.
Apakah itu pengaturcaraan dipacu acara
Pengaturcaraan dipacu peristiwa (pengaturcaraan dipacu Evnet) ialah gaya pengaturcaraan di mana peristiwa menentukan aliran pelaksanaan program diproses oleh pengendali acara atau panggilan balik acara ialah fungsi A semasa yang dipanggil apabila a peristiwa tertentu berlaku, seperti pangkalan data mengembalikan hasil pertanyaan atau pengguna mengklik butang.
Ingat bahawa dalam model pengaturcaraan I/O penyekat tradisional, pertanyaan pangkalan data mungkin kelihatan seperti ini:
result = query('SELECT * FROM posts WHERE id = 1');
buat_sesuatu_dengan(hasil);
Fungsi pertanyaan di atas akan memastikan urutan atau proses semasa dalam keadaan menunggu sehingga pangkalan data asas melengkapkan operasi pertanyaan dan kembali.
Dalam model dipacu peristiwa, pertanyaan ini akan kelihatan seperti ini:
query_finished = fungsi(hasil) {
buat_sesuatu_dengan(hasil);
}
query('SELECT * FROM posts WHERE id = 1', query_finished);
Mula-mula anda mentakrifkan fungsi yang dipanggil query_finished, yang mengandungi perkara yang perlu dilakukan selepas pertanyaan selesai. Kemudian hantar fungsi ini sebagai parameter kepada fungsi pertanyaan Apabila pertanyaan dilaksanakan, query_finished akan dipanggil dan bukannya hanya mengembalikan hasil pertanyaan.
Apabila acara yang anda minati berlaku, fungsi yang anda tentukan akan dipanggil dan bukannya hanya mengembalikan nilai hasil Model pengaturcaraan ini dipanggil pengaturcaraan dipacu peristiwa atau pengaturcaraan tak segerak. Ini adalah salah satu ciri Node yang paling jelas fungsi panggil balik yang sepadan akan dipanggil.
Lapisan bawah pengaturcaraan dipacu peristiwa bergantung pada gelung peristiwa Gelung peristiwa pada asasnya ialah struktur yang secara berterusan memanggil dua fungsi: pengesanan peristiwa dan pencetus pemproses. Dalam setiap gelung, mekanisme gelung peristiwa perlu mengesan peristiwa yang telah berlaku Apabila peristiwa itu berlaku, ia mencari fungsi panggil balik yang sepadan dan memanggilnya.
Gelung peristiwa hanyalah rangkaian yang berjalan dalam proses Apabila peristiwa berlaku, pengendali acara boleh berjalan sendiri dan tidak akan diganggu, iaitu:
1. Paling banyak satu fungsi panggil balik acara boleh dijalankan pada masa tertentu
2. Mana-mana pengendali acara tidak akan terganggu semasa berlari
Dengan ini, pembangun tidak boleh bimbang lagi tentang penyegerakan benang dan pengubahsuaian serentak memori kongsi.
Rahsia yang terkenal:
Orang dalam komuniti pengaturcaraan sistem telah lama mengetahui bahawa pengaturcaraan dipacu peristiwa ialah cara terbaik untuk mencipta perkhidmatan konkurensi tinggi kerana ia tidak perlu menyimpan banyak konteks, jadi ia menjimatkan banyak memori , ia tidak mempunyai banyak suis konteks, dan ia menjimatkan banyak masa pelaksanaan.
Perlahan-lahan, konsep ini telah menembusi platform dan komuniti lain, dan beberapa pelaksanaan gelung acara terkenal telah muncul, seperti mesin Acara Ruby, AnyEvnet Perl dan Python's Twisted Selain daripada ini, terdapat banyak pelaksanaan dan bahasa lain.
Untuk membangun dengan rangka kerja ini, anda perlu mempelajari pengetahuan khusus yang berkaitan dengan rangka kerja dan perpustakaan kelas khusus rangka kerja Contohnya, apabila menggunakan Mesin Acara, untuk menikmati faedah tanpa sekatan, anda perlu mengelak daripada menggunakan perpustakaan kelas penyegerakan dan hanya boleh menggunakan perpustakaan kelas Asynchronous untuk Mesin Acara. Jika anda menggunakan mana-mana perpustakaan yang menyekat (seperti kebanyakan perpustakaan standard Ruby), pelayan anda kehilangan kebolehskalaan optimum kerana gelung acara akan sentiasa disekat, kadangkala menghalang pemprosesan acara I/O.
Node pada asalnya direka bentuk sebagai platform pelayan I/O yang tidak menyekat, jadi secara amnya, anda harus menjangkakan semua kod yang berjalan padanya tidak menyekat. Oleh kerana JavaScript sangat kecil dan ia tidak menguatkuasakan sebarang model I/O (kerana ia tidak mempunyai perpustakaan I/O standard), Node dibina dalam persekitaran yang sangat tulen tanpa sebarang isu warisan.
Bagaimana Node dan JavaScript memudahkan aplikasi tak segerak
Ryan Dahl, pengarang Node, pada mulanya menggunakan C untuk membangunkan projek ini, tetapi mendapati bahawa mengekalkan konteks panggilan fungsi adalah terlalu rumit, mengakibatkan kerumitan kod yang tinggi. Kemudian dia beralih kepada Lua, tetapi Lua sudah mempunyai beberapa perpustakaan I/O yang menyekat Mencampurkan menyekat dan tidak menyekat mungkin mengelirukan pembangun dan menghalang ramai orang daripada membina aplikasi berskala, jadi Lua juga telah ditinggalkan. Akhirnya, dia beralih kepada JavaScript dan fungsi objek peringkat pertama dalam JavaScript menjadikan JavaScript sangat sesuai untuk pengaturcaraan dipacu peristiwa. Keajaiban JavaScript adalah salah satu sebab utama mengapa Node begitu popular.
Apakah itu penutupan
Penutupan boleh difahami sebagai fungsi khas, tetapi ia boleh mewarisi dan mengakses pembolehubah dalam skop di mana ia ditakrifkan. Apabila anda menghantar fungsi panggil balik sebagai parameter kepada fungsi lain, ia akan dipanggil kemudian. dan mereka boleh diakses seperti biasa. Ciri berkuasa ini adalah teras kejayaan Node.
Contoh berikut menunjukkan cara penutupan JavaScript berfungsi dalam penyemak imbas web. Jika anda ingin mendengar acara kendiri butang, anda boleh melakukan ini:
var clickCount = 0;
document.getElementById('myButton').onclick = function() {
clickCount = 1;
makluman("klik " clickCount " kali.");
};
Beginilah ia berfungsi apabila menggunakan jQuery:
var clickCount = 0;
$('button#button saya').klik(fungsi() {
diklikCount ;
makluman('Klik 'Kirairaan ' kali.');
});
Dalam JavaScript, fungsi ialah objek kelas pertama, yang bermaksud anda boleh menghantar fungsi sebagai parameter kepada fungsi lain. Dalam dua contoh di atas, yang pertama memberikan fungsi kepada fungsi lain, dan yang terakhir menghantar fungsi sebagai parameter kepada fungsi lain Fungsi pengendali (fungsi panggil balik) peristiwa klik boleh mengakses setiap pembolehubah di bawah blok kod tempat fungsi ditakrifkan , dalam kes ini, ia mempunyai akses kepada pembolehubah clickCount yang ditakrifkan dalam penutupan induknya.
Pembolehubah clickCount berada dalam skop global (skop paling luar dalam JavaScript Ia menjimatkan bilangan kali pengguna mengklik butang Ia biasanya merupakan tabiat buruk untuk menyimpan pembolehubah dalam skop global kerana ia boleh bercanggah dengan mudah kod lain , anda harus meletakkan pembolehubah dalam skop tempatan di mana ia digunakan. Selalunya, hanya membalut kod dalam fungsi adalah sama dengan membuat penutupan tambahan, supaya anda boleh mengelak daripada mencemarkan persekitaran global dengan mudah, seperti ini:
(fungsi() {
var clickCount = 0;
$('button#button saya').klik(fungsi() {
kiraan klik ;
makluman('Klik 'Kirairaan ' kali.');
});
}());
Nota: Baris ketujuh kod di atas mentakrifkan fungsi dan memanggilnya dengan segera Ini ialah corak reka bentuk biasa dalam JavaScript: mencipta skop baharu dengan mencipta fungsi.
Bagaimana penutupan membantu pengaturcaraan tak segerak
Dalam model pengaturcaraan dipacu peristiwa, mula-mula tulis kod yang akan dijalankan selepas peristiwa berlaku, kemudian masukkan kod ke dalam fungsi, dan akhirnya lulus fungsi sebagai parameter kepada pemanggil, yang kemudiannya akan dipanggil oleh fungsi pemanggil.Dalam JavaScript, fungsi bukan takrifan terpencil Ia juga akan mengingati konteks skop di mana ia diisytiharkan Mekanisme ini membenarkan fungsi JavaScript untuk mengakses konteks di mana fungsi ditakrifkan dan konteks induk .
Apabila anda menghantar fungsi panggil balik sebagai parameter kepada pemanggil, fungsi ini akan dipanggil kemudian. Walaupun skop di mana fungsi panggil balik ditakrifkan telah tamat, apabila fungsi panggil balik dipanggil, ia masih boleh mengakses semua pembolehubah dalam skop tamat dan skop induknya. Seperti contoh terakhir, fungsi panggil balik dipanggil dalam jQuery's click(), tetapi ia masih boleh mengakses pembolehubah clickCount.
Keajaiban penutupan telah ditunjukkan lebih awal dengan menghantar pembolehubah keadaan ke fungsi membolehkan anda melakukan pengaturcaraan dipacu peristiwa tanpa mengekalkan mekanisme penutupan JavaScript akan membantu anda mengekalkannya.
Ringkasan
Pengaturcaraan dipacu peristiwa ialah model pengaturcaraan yang menentukan aliran pelaksanaan program melalui pencetusan peristiwa. Pengaturcara mendaftarkan fungsi panggil balik (sering dipanggil pengendali acara) untuk acara yang mereka minati, dan sistem kemudian memanggil pengendali acara berdaftar apabila acara itu berlaku. Model pengaturcaraan ini mempunyai banyak kelebihan yang tidak dimiliki oleh model pengaturcaraan penyekat tradisional Pada masa lalu, untuk mencapai ciri yang serupa, anda perlu menggunakan pelbagai proses/pelbagai benang.JavaScript ialah bahasa yang berkuasa kerana fungsi dan sifat penutupan objek jenis pertama menjadikannya sangat sesuai untuk pengaturcaraan dipacu peristiwa.

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.

C dan C memainkan peranan penting dalam enjin JavaScript, terutamanya digunakan untuk melaksanakan jurubahasa dan penyusun JIT. 1) C digunakan untuk menghuraikan kod sumber JavaScript dan menghasilkan pokok sintaks abstrak. 2) C bertanggungjawab untuk menjana dan melaksanakan bytecode. 3) C melaksanakan pengkompil JIT, mengoptimumkan dan menyusun kod hot-spot semasa runtime, dan dengan ketara meningkatkan kecekapan pelaksanaan JavaScript.

Aplikasi JavaScript di dunia nyata termasuk pembangunan depan dan back-end. 1) Memaparkan aplikasi front-end dengan membina aplikasi senarai TODO, yang melibatkan operasi DOM dan pemprosesan acara. 2) Membina Restfulapi melalui Node.js dan menyatakan untuk menunjukkan aplikasi back-end.

Penggunaan utama JavaScript dalam pembangunan web termasuk interaksi klien, pengesahan bentuk dan komunikasi tak segerak. 1) kemas kini kandungan dinamik dan interaksi pengguna melalui operasi DOM; 2) pengesahan pelanggan dijalankan sebelum pengguna mengemukakan data untuk meningkatkan pengalaman pengguna; 3) Komunikasi yang tidak bersesuaian dengan pelayan dicapai melalui teknologi Ajax.

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.


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.

SecLists
SecLists ialah rakan penguji keselamatan muktamad. Ia ialah koleksi pelbagai jenis senarai yang kerap digunakan semasa penilaian keselamatan, semuanya di satu tempat. SecLists membantu menjadikan ujian keselamatan lebih cekap dan produktif dengan menyediakan semua senarai yang mungkin diperlukan oleh penguji keselamatan dengan mudah. Jenis senarai termasuk nama pengguna, kata laluan, URL, muatan kabur, corak data sensitif, cangkerang web dan banyak lagi. Penguji hanya boleh menarik repositori ini ke mesin ujian baharu dan dia akan mempunyai akses kepada setiap jenis senarai yang dia perlukan.

mPDF
mPDF ialah perpustakaan PHP yang boleh menjana fail PDF daripada HTML yang dikodkan UTF-8. Pengarang asal, Ian Back, menulis mPDF untuk mengeluarkan fail PDF "dengan cepat" dari tapak webnya dan mengendalikan bahasa yang berbeza. Ia lebih perlahan dan menghasilkan fail yang lebih besar apabila menggunakan fon Unicode daripada skrip asal seperti HTML2FPDF, tetapi menyokong gaya CSS dsb. dan mempunyai banyak peningkatan. Menyokong hampir semua bahasa, termasuk RTL (Arab dan Ibrani) dan CJK (Cina, Jepun dan Korea). Menyokong elemen peringkat blok bersarang (seperti P, DIV),

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

MinGW - GNU Minimalis untuk Windows
Projek ini dalam proses untuk dipindahkan ke osdn.net/projects/mingw, anda boleh terus mengikuti kami di sana. MinGW: Port Windows asli bagi GNU Compiler Collection (GCC), perpustakaan import yang boleh diedarkan secara bebas dan fail pengepala untuk membina aplikasi Windows asli termasuk sambungan kepada masa jalan MSVC untuk menyokong fungsi C99. Semua perisian MinGW boleh dijalankan pada platform Windows 64-bit.