Pertama -tama mari kita lihat pengantar di situs web resmi Nodejs:
Karakteristiknya adalah:
1. Ini adalah lingkungan lari JavaScript
2. Mengandalkan mesin Chrome V8 untuk penjelasan kode
3. Berdorong acara
4. Non-blocking I/O.
5. Ringan, dapat diskalakan, cocok untuk aplikasi interaksi data real-time
6. Proses tunggal, utas tunggal
(1), mengapa nodej memilih JavaScript sebagai bahasa operator
Bahkan, pada awal menerapkan Node.js, penulis Ryan Dahl tidak memilih JavaScript. Dia mencoba C dan Lua, karena tidak memiliki beberapa fitur bahasa tingkat tinggi, seperti penutupan dan pemrograman fungsional, yang membuat program ini rumit dan sulit dipertahankan.
JavaScript adalah bahasa yang mendukung paradigma pemrograman fungsional, yang cocok dengan model pemrograman berbasis acara Node.js. Selain itu, mesin V8 yang disediakan oleh Google telah sangat meningkatkan kecepatan eksekusi bahasa JavaScript.
Apa yang akhirnya disajikan kepada kami adalah node.js, bukan node.c, node.lua atau implementasi bahasa lainnya.
(2) Node.js bukan aplikasi JS, tetapi platform operasi JS
Ketika Anda melihat nama Node.js, pemula mungkin secara keliru berpikir bahwa ini adalah aplikasi JavaScript. Faktanya, Node.js ditulis dalam C ++ dan merupakan lingkungan berjalan JavaScript.
Node.js menggunakan mesin V8 Google Chrome, yang memiliki kinerja yang baik dan juga menyediakan banyak API tingkat sistem, seperti operasi file, pemrograman jaringan, dll.
Berikut semua modul yang terlibat dalam nodeJs:
Kode JavaScript di sisi browser akan tunduk pada berbagai pembatasan keamanan saat berjalan, dan pengoperasian sistem pelanggan terbatas.
Sebaliknya, Node.js adalah runtime latar belakang yang komprehensif, memberikan JavaScript dengan banyak fungsi yang dapat dicapai oleh bahasa lain.
(3), fitur Node.js
Node.js juga relatif inovatif dalam desain. Ini berjalan dalam mode proses tunggal dan satu threaded (ini konsisten dengan cara JavaScript berjalan),
Mekanisme yang digerakkan oleh peristiwa diimplementasikan oleh Node.js melalui pemeliharaan antrian loop peristiwa tunggal yang efisien. Tidak ada pekerjaan sumber daya dan pengalihan konteks multi-thread. Ini berarti bahwa dalam menghadapi permintaan HTTP skala besar, Node.js menangani semuanya dengan acara yang digerakkan.
Pengembang layanan web yang terbiasa dengan bahasa tradisional mungkin sangat akrab dengan konkurensi dan kolaborasi multi-threaded, tetapi dalam menghadapi Node.js, kita perlu menerima dan memahami karakteristiknya.
Dua, konsep penting
1. Apa itu Loop Acara? (Konsep yang sangat penting)
Loop acara adalah konsep yang sangat penting, mengacu pada mekanisme operasi sistem komputer.
Jika Anda ingin memahami loop acara, Anda harus mulai dengan mode berjalan program. Program setelah berjalan disebut proses. Secara umum, suatu proses hanya dapat melakukan satu tugas sekaligus.
Jika ada banyak tugas yang akan dieksekusi, hanya ada tiga solusi.
(1), berbaris. Karena suatu proses hanya dapat menjalankan satu tugas sekaligus, ia harus menunggu sampai tugas sebelumnya selesai sebelum menjalankan tugas berikutnya.
(2), buat proses baru. Gunakan perintah fork untuk membuat proses baru untuk setiap tugas.
(3), buat utas baru. Karena proses mengonsumsi terlalu banyak sumber daya, program saat ini sering memungkinkan proses untuk mengandung banyak utas, dan utas menyelesaikan tugas.
Ambil bahasa JavaScript sebagai contoh. Ini adalah bahasa utuh tunggal. Semua tugas diselesaikan pada satu utas, yaitu, metode pertama di atas diadopsi. Setelah Anda menemukan sejumlah besar tugas atau tugas yang memakan waktu, halaman web akan mengalami "kematian palsu" karena JavaScript tidak dapat berhenti dan tidak dapat menanggapi perilaku pengguna.
Anda mungkin bertanya, mengapa javascript tunggal berulir? Tidak bisakah itu diimplementasikan sebagai multi-utas?
Ini ada hubungannya dengan sejarah:
Fitur utama dari bahasa JavaScript adalah threading tunggal, yang berarti Anda hanya dapat melakukan satu hal secara bersamaan. Jadi, mengapa JavaScript tidak dapat memiliki banyak utas? Ini akan meningkatkan efisiensi.
Threading tunggal Javascript terkait dengan tujuannya. Sebagai bahasa skrip browser, tujuan utama JavaScript adalah untuk berinteraksi dengan pengguna dan mengoperasikan DOM. Ini menentukan bahwa itu hanya dapat berulir tunggal, jika tidak, ia akan menyebabkan masalah sinkronisasi yang sangat kompleks.
Misalnya, misalkan JavaScript memiliki dua utas secara bersamaan, satu utas menambahkan konten pada simpul DOM tertentu, dan utas lainnya menghapus node ini, utas mana yang harus diambil browser saat ini?
Oleh karena itu, untuk menghindari kompleksitas, JavaScript adalah satu utas dari kelahirannya, yang telah menjadi fitur inti dari bahasa ini dan tidak akan berubah di masa depan.
Untuk memanfaatkan kekuatan komputasi CPU multi-core, HTML5 mengusulkan standar pekerja web, memungkinkan skrip JavaScript untuk membuat banyak utas, tetapi utas anak sepenuhnya dikendalikan oleh utas utama dan tidak dapat mengoperasikan DOM.
Oleh karena itu, standar baru ini tidak mengubah sifat threading tunggal JavaScript.
Kembali ke Eventloop:
Single Threading berarti bahwa semua tugas perlu antri, dan tugas sebelumnya akan dieksekusi sebelum tugas berikutnya akan dieksekusi. Jika tugas sebelumnya membutuhkan waktu lama, tugas selanjutnya harus menunggu.
Jika antriannya karena sejumlah besar komputasi dan CPU terlalu sibuk, itu akan baik -baik saja, tetapi berkali -kali CPU menganggur karena perangkat IO (perangkat input dan output) sangat lambat (seperti operasi Ajax membaca data dari jaringan), dan Anda harus menunggu hasilnya keluar sebelum melaksanakannya.
Perancang bahasa JavaScript menyadari bahwa pada saat ini utas utama dapat sepenuhnya mengabaikan perangkat IO, menangguhkan tugas menunggu, dan menjalankan tugas berikutnya terlebih dahulu. Tunggu sampai perangkat IO mengembalikan hasilnya, lalu putar dan lanjutkan tugas yang ditangguhkan.
Oleh karena itu, semua tugas dapat dibagi menjadi dua jenis, satu adalah tugas sinkron dan yang lainnya adalah tugas yang tidak sinkron. Tugas sinkron merujuk pada tugas yang antri di utas utama, hanya tugas sebelumnya yang telah dieksekusi.
Tugas terakhir dapat dieksekusi; Tugas asinkron mengacu pada tugas yang tidak memasuki utas utama tetapi memasuki "antrian tugas". Hanya ketika "antrian tugas" memberi tahu utas utama bahwa tugas asinkron dapat dieksekusi, tugas akan masuk utas utama untuk dieksekusi.
Seperti yang ditunjukkan pada gambar di bawah ini:
Selama utas utama kosong, ia akan membaca "antrian tugas". Ini adalah mekanisme berjalan JavaScript. Proses ini akan diulang terus menerus.
3. Contoh Penjelasan
Oke, jangan katakan banyak "omong kosong", mari kita mulai aplikasi nodej pertama kami: "Halo beruang besar" segera.
Buka editor favorit Anda dan buat file HelloWorld.js .
Kodenya adalah sebagai berikut:
Salinan kode adalah sebagai berikut: 1 var http = membutuhkan ("http"); 2 http.createServer (function (request, response) {3 response.writeHead (200, {4 "tipe konten": "teks/polos" 5}); 6 response.write ("halo, beruang besar!"); 7 response.end (); 8}). Listen (8888);
Mari kita jalankan dan uji kode ini. Pertama, jalankan skrip Anda dengan Node.js:
Buka Command Line Tool CMD, beralih ke direktori kerja Anda, dan jalankan perintah "Node HelloWorld.js"
Selanjutnya, buka browser dan kunjungi http: // localhost: 8888/, dan Anda akan melihat halaman web dengan kata -kata "halo, beruang besar!".
Sedikit pengetahuan yang diperpanjang:
Seperti yang ditunjukkan pada gambar di bawah ini, ini adalah bagian dari kode sumber http.js di nodeJS. CreateServer adalah antarmuka yang ramah pengguna. Implementasi internal mengadopsi model singleton. Keuntungan dari hal ini adalah untuk secara efektif memisahkan tugas penciptaan dan inisialisasi contoh, fokus pada tanggung jawab, dan mengurangi kopling. Ini adalah ide yang dapat dipelajari semua orang saat pemrograman.
Hahaha, bukankah itu sangat menarik? Ini hanya pengalaman singkat. Saya akan menjelaskan banyak poin pengetahuan nanti. Semua orang dapat secara perlahan memahami o (∩_∩) o haha ~
Iv. Tinjauan keseluruhan
1. Ini adalah lingkungan lari JavaScript
2. Mengandalkan mesin Chrome V8 untuk penjelasan kode
3. Berdorong acara
4. Non-blocking I/O.
5. Ringan, dapat diskalakan, cocok untuk aplikasi interaksi data real-time
6. Proses tunggal, utas tunggal
Akhirnya, yang ingin saya katakan adalah: tidak banyak contoh dalam artikel ini, tetapi konsep -konsep ini sangat penting. Anda harus memiliki pemahaman yang jelas, sehingga Anda akan meletakkan dasar yang kuat untuk pembelajaran nodej di masa depan. Ayo, bekerja keras bersama.
Hahaha, artikel ini sudah berakhir dan tidak akan dilanjutkan. Saya berharap untuk berkomunikasi dengan Anda lebih banyak dan membuat kemajuan bersama. . . . . . Huhuhuhu… (*^__^*)