Node.js harus menjadi salah satu teknologi terpanas saat ini. Artikel ini terutama memperkenalkan karakteristik dan skenario aplikasi Node.js.
Node.js adalah platform yang dibangun di runtime JavaScript Chrome, yang digunakan untuk dengan mudah membangun aplikasi jaringan yang cepat dan mudah skala. Node.js dibuat ringan dan efisien dengan peristiwa yang digerakkan, dan sangat ideal untuk aplikasi real-time yang intensif data yang berjalan pada perangkat terdistribusi.
1. Fitur
1.1 Asinkron I/O.
I/O asinkron yang disebut relatif terhadap I/O sinkron. Banyak operasi I/O harus dilakukan selama pelaksanaan program, seperti membaca dan menulis file, input dan output, respons permintaan, dll. Secara umum, operasi I/O memakan waktu. Misalnya, dalam mode pemrograman tradisional, Anda perlu membaca file beberapa g, seluruh utas akan dijeda dan menunggu file dibaca dan terus dieksekusi. Dengan kata lain, operasi I/O memblokir pelaksanaan kode, sangat mengurangi efisiensi program.
Mengenai I/O asinkron, sebenarnya tidak terbiasa dengan insinyur front-end, karena memulai permintaan AJAX adalah panggilan "asinkron" yang paling umum. Di Node, mengambil membaca file (membaca file adalah operasi I/O yang memakan waktu) sebagai contoh, itu sangat mirip dengan cara memulai permintaan AJAX:
Salinan kode adalah sebagai berikut:
var fs = membutuhkan ('fs');
fs.readfile ('/path', function (err, file) {
console.log ('Baca file selesai');
});
Console.log ('Mulai Membaca File');
Setelah kode di atas disebut fs.readfile, kode selanjutnya dijalankan segera, dan waktu ketika "file baca selesai" tidak dapat diprediksi. Ketika utas menghadapi operasi I/O, itu tidak akan menunggu operasi I/O berakhir dengan cara pemblokiran, tetapi hanya akan mengirim permintaan I/O ke sistem operasi dan terus menjalankan pernyataan berikutnya. Ketika sistem operasi menyelesaikan operasi I/O, utas yang melakukan operasi I/O diberitahu dalam bentuk suatu peristiwa, dan utas akan memproses acara pada waktu tertentu.
1.2 Lingkaran Acara dan Fungsi Callback
Loop acara yang disebut berarti bahwa node akan menggunakan mekanisme acara untuk menyelesaikan semua operasi asinkron, dan utas terus-menerus melingkar untuk mendeteksi antrian acara. Loop acara memeriksa acara yang tidak ditangani dalam antrian acara hingga akhir program. Metode pemrograman acara memiliki keunggulan ringan, kopling longgar, dan hanya berfokus pada titik transaksi. Namun, dalam skenario beberapa tugas asinkron, peristiwa tidak tergantung satu sama lain, dan bagaimana bekerja sama adalah masalah. Dalam JavaScript, fungsi panggilan balik ada di mana -mana, dan fungsi panggilan balik adalah cara terbaik untuk menerima panggilan asinkron untuk mengembalikan data.
1.3 Berulir tunggal
Node mempertahankan karakteristik JS sebagai utas tunggal di browser. Keuntungan terbesar dari utas tunggal adalah bahwa ia tidak memerlukan masalah sinkronisasi yang sadar keadaan seperti pemrograman multi-utas, tidak ada kebuntuan, atau overhead dari switching konteks utas. Benang tunggal juga memiliki kelemahannya, terutama dimanifestasikan dalam tiga aspek: ketidakmampuan untuk memanfaatkan CPU multi-core; Kesalahan akan menyebabkan seluruh aplikasi keluar, dan ketahanan aplikasi layak untuk ujian masuk pascasarjana; Sejumlah besar komputasi akan menempati CPU dan membuat tidak mungkin untuk terus memanggil I/O asinkron.
Untuk menyelesaikan masalah di atas, Node mengadopsi ide yang sama dengan pekerja web HTML5 dan menggunakan Child_Process untuk menyelesaikan masalah komputasi dalam jumlah besar dalam satu utas. Dengan mendistribusikan perhitungan untuk setiap proses anak, sejumlah besar perhitungan dapat dipecah dan hasilnya dapat dilewati melalui pesan peristiwa di antara proses.
1.4 Cross-Platform
Node adalah cross-platform, yaitu set kode JS yang sama dapat digunakan dan dijalankan di Windows, Linux, OSX dan platform lainnya. Ini terutama karena fakta bahwa Node telah membangun libuv arsitektur tingkat platform antara sistem operasi dan sistem modul tingkat atas node.
2. Skenario aplikasi
1) Aplikasi real-time: seperti obrolan online, dorongan pemberitahuan waktu nyata, dll. (Seperti socket.io)
2) Aplikasi Terdistribusi: Gunakan data yang ada melalui I/O paralel yang efisien
3) Aplikasi Alat: Alat besar, dari penyebaran kompresi ujung depan (seperti Grunt) ke aplikasi antarmuka grafis desktop
4) Aplikasi Game: Bidang permainan memiliki persyaratan tinggi untuk waktu nyata dan konkurensi (seperti kerangka kerja Pomelo Netease)
5) Gunakan antarmuka yang stabil untuk meningkatkan kemampuan rendering web
6) Lingkungan bahasa pemrograman front-end terpadu: pengembang front-end dapat dengan cepat memasuki pengembangan sisi server (seperti arsitektur full-stack full-stack murni yang terkenal)