node.js ialah platform yang dibina pada masa jalan JavaScript Chrome Senario yang berkenaan termasuk aplikasi muzik dalam talian setempat, aplikasi carian dalam talian setempat, APP dalam talian setempat, dsb.
Persekitaran pengendalian artikel ini: sistem Windows 7, nodejs versi 10.16.2, komputer Dell G3.
Apakah itu node.js?
Ringkasnya, Node.js ialah JavaScript yang dijalankan di bahagian pelayan.
Node.js ialah platform yang dibina pada masa jalan JavaScript Chrome.
Node.js ialah persekitaran JavaScript bahagian pelayan I/O dipacu peristiwa berdasarkan enjin V8 Google Enjin V8 melaksanakan Javascript dengan sangat pantas dan mempunyai prestasi yang sangat baik.
Fahami senario NodeJS yang berkenaan pada dasarnya
NodeJS ialah platform JS bahagian pelayan yang popular dalam beberapa tahun kebelakangan ini pemprosesan. Prestasi cemerlang concurrency, sebaliknya, peningkatan kod berkuasa dan aplikasi pengurusan projek seperti npm, grunt, express pada platform nodeJS, telah hampir mentakrifkan semula kaedah dan proses kerja bahagian hadapan.
Kejayaan NodeJS menandakan kuasanya, tetapi bukankah semua situasi sesuai untuk menggunakan NodeJS sebagai platform bahagian pelayan?
Jawapannya sudah tentu tidak, dan terdapat pendapat yang berbeza di Internet. Kemudian mari kita fahami penggunaan NodeJS daripada prinsipnya.
Sebelum bercakap tentang NodeJS, mari kita lihat dahulu tradisional (diwakili oleh Apache) platform pemprosesan bahagian pelayan untuk mengendalikan konkurensi.
1. Mod konkurensi tinggi berbilang benang Apache
Apache kini merupakan perisian pelayan web nombor satu dunia kerana ia menyokong serentak berbilang benang, ia dialu-alukan oleh majoriti pemilih teknologi pelayan. Tetapi kemudiannya, Apache secara beransur-ansur mendedahkan kelemahannya dalam beberapa aplikasi WEB berskala besar: menyekat.
Sesetengah pelajar mungkin tertanya-tanya, bukankah Apache berbilang benang untuk pemprosesan serentak Mengapa masih ada penyekatan?
Untuk memahami perkara ini, pertama sekali kita perlu memahami konsep benang
1.1 Apakah itu benang?
Kami memetik penjelasan rasmi: unit CPU terkecil yang benang boleh dijalankan secara bebas, boleh berjalan serentak dalam proses yang sama dan berkongsi ruang alamat memori proses(perhatikan ciri ini).
Kita dapat melihat bahawa utas di bawah proses yang sama akan berkongsi fail dan memori yang sama (ruang alamat memori), jadi anda boleh bayangkan bahawa apabila utas yang berbeza perlu menduduki pembolehubah yang sama, mereka akan ditentukan berdasarkan ketibaan pertama. Berdasarkan prinsip siapa cepat dia dapat, apabila utas yang tiba dahulu sedang berjalan, utas berikutnya hanya boleh menunggu di tepi, iaitu, mereka menyertai urutan baris gilir menyekat. Jadi inilah yang menyebabkan benang tersekat. Oleh itu, walaupun sesuatu proses boleh menyokong berbilang rangkaian,ia kelihatan dilaksanakan serentak tetapi tidak disegerakkan antara satu sama lain. Berbilang benang dalam proses berkongsi ruang alamat memori yang sama, yang bermaksud mereka boleh mengakses pembolehubah dan objek yang sama, dan mereka memperuntukkan objek dari timbunan yang sama. Walaupun ini memudahkan untuk berkongsi maklumat antara utas, pengaturcara mesti berhati-hati untuk memastikan bahawa mereka tidak mengganggu utas lain dalam proses yang sama.
Setelah memahami kelemahan selari berbilang benang, kami dapat memahami dengan lebih baik kuasa NodeJS. Kerana NodeJS adalah asynchronous dan single-threaded!2. Prinsip I/O Asynchronous NodeJS
Mari kita lihat sekeping kod untuk Apache meminta pangkalan data:Apabila kod dilaksanakan ke baris pertama, benang akan menyekat, menunggu pertanyaan untuk mengembalikan hasil, dan kemudian meneruskan pemprosesan. Disebabkan oleh sebab seperti pertanyaan pangkalan data, pembacaan dan penulisan cakera, komunikasi rangkaian (yang dipanggil I/O), masa penyekatan akan menjadi sangat besar (berbanding dengan jumlah frekuensi CPU). Untuk akses konkurensi tinggi, dalam satu pihak, utas disekat dan menunggu untuk masa yang lama, sebaliknya, utas baharu terus ditambah untuk menampung permintaan baharu, yang akan membazirkan banyak sumber sistem pada masa yang sama , peningkatan benang juga akan mengambil banyak masa CPU untuk memproses suis memori. Mari lihat cara node.js mengendalikannya. Lihat,
hanya empat perkataan: panggil balik tak segerak . Parameter pertanyaan kedua ialah fungsi panggil balik Apabila proses melaksanakan db.query, ia tidak akan menunggu keputusan dikembalikan, tetapi akan terus melaksanakan penyataan berikut sehingga ia memasuki gelung peristiwa. Apabila hasil pelaksanaan pangkalan data kembali, acara akan dihantar ke baris gilir acara, dan fungsi panggil balik sebelumnya akan dipanggil hanya selepas utas memasuki gelung acara. Istilah yang lebih teknikal ialah I/O tak segerak. Sehelai benang pun boleh.
Jadi mengapa NodeJS satu-benang tetapi dapat mencapai pelaksanaan tak segerak? Di sini kita pergi ke gambar sebelumnya dan klik pada baris gilir AcaraLihat, prinsip kerja NodeJS sebenarnya ialah gelung peristiwa. Boleh dikatakan bahawa setiap bahagian logik NodeJS ditulis dalam fungsi panggil balik, dan fungsi panggil balik dilaksanakan secara tidak segerak selepas kembali!
Melihat ini, anda pasti tertanya-tanya, jika semua pemprosesan NodeJS tidak segerak, bukankah ia akan berjaya? Salah, salah, salah! Sudah tentu tidak, jangan lupa, asas untuk NodeJS melaksanakan ini ialah benang tunggal. Betul, single threaded! Satu benang mengendalikan semua operasi!
Anda boleh bayangkan bahawa NodeJS berhadapan dengan 100,000 pengguna serentak dalam angin sejuk OK, tiada masalah datang dan dilemparkan ke dalam bandar, dan yang lain muncul tercampak ke dalam bandar semula. Semua orang di bandar adalah tentera dan boleh mencerna musuh-musuh ini dengan baik. Tetapi jika watak seperti Zhang Fei dan Zhao Yun muncul, Node lama akan berasa sengsara dia melawan Zhang Fei selama 300 pusingan, melumpuhkannya, dan kemudian melemparkannya ke dalam bandar. Kemudian 100,000 tentera di belakang perlu menunggu 300 pusingan ini. . .
Jadi apakah maksudnya? Ini bermakna NodeJS tidak menyekat, tetapi menyekat tidak berlaku dalam proses panggil balik berikutnya, tetapi berlaku dalam pengiraan dan pemprosesan logik oleh NodeJS sendiri. Kita sedia maklum bahawa NodeJS mempunyai keupayaan pengedaran yang sangat berkuasa dan boleh menggelungkan peristiwa untuk panggilan balik tak segerak. Tetapi jika anda menghadapi operasi logik yang kompleks semasa menggelungkan peristiwa, bagaimanakah satu utas nipis boleh menyokong berjuta-juta konkurensi logik? Semua operasi NodeJS yang memakan masa seperti I/O dan komunikasi rangkaian boleh diserahkan kepada rangkaian pekerja untuk pelaksanaan dan panggilan balik, jadi ia sangat pantas. Tetapi untuk operasi biasa CPU, ia hanya boleh menahan sendiri.
Setelah berkata demikian, anda mungkin mempunyai gambaran kasar tentang ciri-ciri NodeJS. Jadi senario yang berkenaan pada dasarnya sedia untuk datang~!
3. Senario aplikasi NodeJS
Memandangkan NodeJS mempunyai keupayaan yang kuat untuk mengendalikan konkurensi, tetapi keupayaan lemah untuk mengendalikan pengiraan dan logik, oleh itu, jika kita meletakkan operasi Logik yang kompleks dipindahkan ke bahagian hadapan (klien) untuk dilengkapkan, dan NodeJS hanya perlu menyediakan I/O tak segerak, supaya pemprosesan berkonkurensi tinggi dan berprestasi tinggi boleh dicapai. Terdapat banyak situasi, seperti: RESTFUL API, sembang masa nyata, APP halaman tunggal dengan logik pelanggan yang kukuh termasuk: aplikasi muzik dalam talian setempat, aplikasi carian dalam talian setempat, APP dalam talian setempat, dsb.
Omong-omong, Apache telah banyak ditindas, jadi berikan saya tarikh manis. Apache mempunyai ciri-ciri ruang alamat memori bersama konkurensi tinggi berbilang benang, yang bermaksud bahawa jika pelayan cukup berkuasa dan pemproses mempunyai teras yang cukup tinggi, Apache akan beroperasi dengan baik, jadi ia sesuai untuk pemprosesan tak segerak (serentak) dengan relatif beberapa latar belakang Aplikasi yang memerlukan pengiraan berat dan logik perniagaan bahagian belakang yang kompleks.
Pembelajaran yang disyorkan: "tutorial video node.js"
Atas ialah kandungan terperinci Apakah itu node.js? Apakah senario yang berkenaan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!