Node.js adalah bahasa backend yang muncul yang dirancang untuk membantu pemrogram dengan cepat membangun aplikasi yang dapat diskalakan. Node.js memiliki banyak fitur yang menarik, dan ada banyak laporan tentang hal itu. Artikel ini akan menganalisis dan membahas fitur Eventemitter, Streams, Coding Style, Linting, Coding Style dan lainnya untuk membantu pengguna memiliki pemahaman yang lebih dalam tentang Node.js.
Sebagai platform yang dibangun pada runtime JavaScript Chrome, pemahaman kami yang relevan tentang JavaScript tampaknya berlaku untuk aplikasi node; Tanpa ekstensi atau modifikasi bahasa tambahan, kami dapat menerapkan pengalaman pemrograman front-end untuk pemrograman back-end.
Eventemitter (Pengirim Acara)
Pertama -tama, Anda harus memahami model EventeMitter. Ini dapat mengirim acara serta acara yang akan menarik minat konsumen. Kita dapat menganggapnya sebagai perpanjangan dari pola callback pass ke fungsi asinkron. Secara khusus, EventeMitter akan memiliki lebih banyak keuntungan ketika beberapa panggilan balik diperlukan.
Misalnya, penelepon mengirim permintaan "file daftar" ke server jarak jauh. Anda mungkin ingin mengelompokkan hasil yang dikembalikan dan melakukan panggilan balik untuk setiap grup. Model EventeMitter memungkinkan Anda untuk mengirim callback "File" pada setiap grup dan melakukan pemrosesan "Akhir" ketika semua operasi selesai.
Saat menggunakan EventeMitter, cukup atur acara dan parameter yang relevan.
Salinan kode adalah sebagai berikut:
var eventemitter = membutuhkan ('acara'). Eventemitter;
var util = membutuhkan ('util');
fungsi myclass () {
if (! (Contoh myClass)) mengembalikan myclass baru ();
Eventemitter.call (ini);
var self = ini;
setTimeout (function timeoutcb () {
self.emit ('MyEvent', 'Hello World', 42);
}, 1000);
}
util.inherit (myclass, eventemitter);
Konstruktor MyClass menciptakan pemicu waktu dengan penundaan pemicu 1 dan peristiwa pemicu MyEvent. Untuk menggunakan acara terkait, Anda perlu menjalankan metode on ():
Salinan kode adalah sebagai berikut:
var myobj = myclass baru ();
var start = date.now ();
myobj.on ('myevent', function myeventcb (str, num) {
console.log ('myevent dipicu', str, num, date.now () - start);
});
Perlu dicatat di sini bahwa meskipun acara Eventemitter yang berlangganan adalah peristiwa asinkron, ketika waktu memicu, tindakan pendengar akan disinkronkan. Oleh karena itu, jika acara MyEvent di atas memiliki 10 pendengar, semua pendengar akan dipanggil secara berurutan tanpa menunggu lingkaran acara.
Jika subclass dari EventeMitter menghasilkan peristiwa emit ('error'), tetapi tidak ada pendengar yang berlangganan, kelas pangkalan EventeMitter melempar pengecualian, menyebabkan peristiwa eksklusif yang tidak dipicu dipicu ketika objek proses dieksekusi.
Verror
Verror adalah ekstensi dari kesalahan kelas dasar, yang memungkinkan kita untuk mendefinisikan pesan output menggunakan format karakter printf.
Stream
Jika ada file yang sangat besar yang perlu diproses, metode yang ideal adalah membaca bagian dan menulis bagian. Tidak peduli seberapa besar file itu, itu akan selalu diproses selama waktu memungkinkan. Ini membutuhkan konsep streaming. Streams adalah model lain yang banyak digunakan dalam simpul, di Node, implementasi Eventemitter. Memberikan antarmuka dupleks yang dapat dibaca, dapat ditulis atau penuh. Ini adalah antarmuka abstrak, dan acara operasi reguler yang disediakan meliputi: dapat dibaca, dapat ditulis, menguras, data, akhir dan penutupan. Jika kita dapat menggunakan jaringan pipa untuk mengintegrasikan peristiwa ini secara efektif, interaksi yang lebih kuat akan tercapai.
Dengan menggunakan .pipe (), catatan dapat berkomunikasi dengan tekanan balik melalui pipa. Tekanan belakang berarti: Hanya mereka yang dapat ditulis, atau hanya mereka yang dapat dibaca.
Misalnya, kami sekarang mengirim data dari Stdin ke file lokal dan server jarak jauh:
Salinan kode adalah sebagai berikut:
var fs = membutuhkan ('fs');
var net = membutuhkan ('net');
var localfile = fs.createWriteStream ('localfile.tmp');
net.connect ('255.255.255.255', 12345, fungsi (klien) {
Process.stdin.pipe (klien);
Process.stdin.pipe (LocalFile);
});
Dan jika kami ingin mengirim data ke file lokal dan ingin menggunakan Gunzip untuk mengompres aliran ini, kami dapat melakukan ini:
Salinan kode adalah sebagai berikut:
var fs = membutuhkan ('fs');
var zlib = membutuhkan ('zlib');
Process.stdin.pipe (zlib.createGunzip ()). PIPE (fs.createWriteStream ('localfile.tar'));
Jika Anda ingin tahu lebih banyak tentang stream, silakan klik di sini.
Aliran Kontrol (Kontrol Proses)
Karena JS memiliki konsep fungsional seperti objek kelas satu, penutupan, dll., Dimungkinkan untuk dengan mudah mendefinisikan izin panggilan balik. Ini sangat nyaman saat membuat prototipe, dan dapat mengintegrasikan izin logis berdasarkan permintaan. Tetapi mudah untuk menggunakan fungsi bawaan yang canggung.
Misalnya, kami ingin membaca serangkaian file secara berurutan dan kemudian melakukan tugas:
Salinan kode adalah sebagai berikut:
fs.readfile ('firstfile', 'utf8', function firstcb (err, firstfile) {
dosomething (firstfile);
fs.readfile ('SecondFile', 'UTF8', Function SecondCB (err, SecondFile) {
dosomething (SecondFile);
fs.readfile ('ThirdFile', 'UTF8', fungsi ketiga (err, ketiga) {
dosomething (fhireFile);
});
});
});
Masalah dengan pola ini adalah:
1. Logika kode -kode ini sangat tersebar dan tidak teratur, dan proses operasional terkait sulit dipahami.
2. Tidak ada kesalahan atau pengecualian yang ditangani.
3. Kebocoran memori penutupan di JS sangat umum dan sulit didiagnosis dan dideteksi.
Jika kami ingin melakukan serangkaian operasi asinkron pada set input, menggunakan pustaka kontrol proses adalah pilihan yang lebih pintar. Vasync digunakan di sini.
Vasync adalah perpustakaan kontrol proses yang idenya berasal dari operasi asinkron. Yang membuatnya istimewa adalah memungkinkan konsumen untuk melihat dan mengamati proses tugas tertentu. Informasi ini sangat berguna untuk mempelajari proses kesalahan tertentu.
Gaya pengkodean (gaya pemrograman)
Gaya pemrograman adalah topik yang paling kontroversial karena sering santai. Setiap orang memiliki preferensi sendiri. Penting untuk menemukan gaya yang sesuai dengan individu dan tim. Beberapa warisan tradisional dapat membuat perjalanan pengembangan simpul menjadi tempat yang lebih baik.
1. Sebutkan fungsinya
2. Coba beri nama semua fungsi.
3. Hindari penutupan
4. Jangan mendefinisikan fungsi lain dalam fungsi tertentu. Ini mengurangi banyak kecelakaan bocor memori penutupan yang tidak terduga.
5. Fungsi yang lebih dan lebih kecil
Meskipun V8 JIT adalah mesin yang kuat, fungsi yang lebih kecil dan lebih tipis akan lebih baik dikombinasikan dengan V8. Selain itu, jika fungsi kami semuanya kecil dan indah (sekitar 100 baris), kami juga akan berterima kasih kepada diri kami sendiri ketika membaca dan mempertahankannya sendiri.
Periksa gaya secara terprogram: Pertahankan konsistensi gaya dan gunakan alat giro untuk meningkatkannya. Kami menggunakan JSStyle.
Serat (cek kode)
Alat serat dapat melakukan analisis statis kode tanpa berjalan, memeriksa kesalahan dan risiko potensial, seperti pernyataan break yang hilang di CasesWitch. Lint tidak hanya setara dengan pemeriksaan gaya, itu lebih ditujukan untuk analisis risiko objektif daripada pilihan gaya subyektif. Kami menggunakan JavaScriptLint, yang memiliki item cek yang kaya.
Logging (logging)
Ketika kita memprogram dan mengkode, kita perlu memiliki visi jangka panjang. Secara khusus, pertimbangkan alat apa yang akan digunakan untuk debugging. Langkah pertama yang sangat baik adalah melakukan penebangan yang efektif. Kita perlu mengidentifikasi informasi dan melihat apa yang diberi perhatian khusus selama debugging dan apa yang digunakan untuk analisis dan penelitian saat runtime. Disarankan untuk menggunakan Bunyan, pustaka logging Node.js langsung, dan format output data adalah JSON. Untuk informasi lebih lanjut, silakan klik di sini.
Server klien
Jika suatu aplikasi memiliki kemampuan pemrosesan yang didistribusikan, itu akan lebih menarik di pasar. Antarmuka serupa dapat dijelaskan menggunakan HTTP Restful API atau TCP JSON asli. Hal ini memungkinkan pengembang untuk menggabungkan pengalaman pada node dengan lingkungan jaringan asinkron, serta penggunaan aliran dengan sistem terdistribusi dan dapat diskalakan.
Alat Umum:
1. Resttify
Sederhananya, ini adalah alat untuk membangun layanan istirahat. Ini memberikan dukungan tontonan dan debugging yang baik, sambil mendukung Bunyan dan Dtrace.
2. Cepat
Fast adalah alat ringan yang menggunakan TCP untuk memproses pesan JSON. Dukungan DTRACE disediakan, yang memungkinkan kami untuk mengidentifikasi karakteristik kinerja klien server dengan cepat.
3. Alur kerja
Workflow dibangun di atas restify dan dapat mendefinisikan proses bisnis untuk serangkaian layanan jarak jauh dan API. Misalnya: Status kesalahan, batas waktu, penyambungan kembali, pemrosesan kemacetan, dll.