Rumah  >  Artikel  >  hujung hadapan web  >  Ketahui lebih lanjut tentang beberapa ciri dalam Node.js_node.js

Ketahui lebih lanjut tentang beberapa ciri dalam Node.js_node.js

WBOY
WBOYasal
2016-05-16 16:35:291208semak imbas

Node.js ialah bahasa bahagian belakang yang baru muncul yang direka untuk membantu pengaturcara membina aplikasi berskala dengan cepat. Node.js mempunyai banyak ciri menarik, dan terdapat banyak laporan mengenainya Artikel ini akan menganalisis dan membincangkan ciri seperti EventEmitter, Streams, Gaya Pengekodan, Linting dan Gaya Pengekodan untuk membantu pengguna memahami Node.js dengan lebih mendalam.

Sebagai platform yang dibina pada masa jalan JavaScript Chrome, pengetahuan JavaScript kami nampaknya boleh digunakan untuk aplikasi nod tanpa sambungan atau pengubahsuaian bahasa tambahan, kami boleh menggunakan pengalaman pengaturcaraan bahagian hadapan kami pada pengaturcaraan Backend.

EventEmitter (event emitter)

Pertama sekali, anda harus memahami model EventEmitter. Ia boleh menghantar acara dan membenarkan pengguna melanggan acara yang menarik. Kita boleh menganggapnya sebagai lanjutan daripada corak penghantaran panggil balik kepada fungsi tak segerak. Khususnya, EventEmitter akan lebih berfaedah apabila berbilang panggilan balik diperlukan.

Sebagai contoh, pemanggil menghantar permintaan "fail senarai" ke pelayan jauh. Anda mungkin mahu mengumpulkan hasil yang dikembalikan dan melakukan panggilan balik untuk setiap kumpulan. Model EventEmitter membolehkan anda menghantar panggilan balik "fail" pada setiap kumpulan dan melakukan pemprosesan "tamat" apabila semua operasi selesai.

Apabila menggunakan EventEmitter, anda hanya perlu menetapkan acara dan parameter yang berkaitan.

Salin kod Kod adalah seperti berikut:

var EventEmitter = memerlukan('events').EventEmitter;
var util = memerlukan('util');
fungsi MyClass() {
jika (!(contoh MyClass ini)) kembalikan MyClass();
EventEmitter.call(ini);
var diri = ini; setTimeout(fungsi timeoutCb() {
Self.emit('myEvent', 'hello world', 42); }, 1000); }
util.inherits(MyClass, EventEmitter);


Pembina MyClass mencipta pencetus masa dengan kelewatan pencetus 1s dan peristiwa pencetus myEvent. Untuk menggunakan acara berkaitan, anda perlu melaksanakan kaedah on():



Salin kod

Kod adalah seperti berikut:

Perlu diingatkan di sini bahawa walaupun acara EventEmitter yang dilanggan ialah acara tak segerak, apabila masa dicetuskan, tindakan pendengar akan disegerakkan. Oleh itu, jika acara myEvent di atas mempunyai 10 pendengar, semua pendengar akan dipanggil mengikut urutan tanpa menunggu gelung acara.

Jika subkelas EventEmitter menjana peristiwa emit('error'), tetapi tiada pendengar melanggannya, maka kelas asas EventEmitter akan membuang pengecualian, menyebabkan uncaughtException dicetuskan apabila objek proses dilaksanakan.


verror

verror ialah lanjutan daripada Ralat kelas asas, yang membolehkan kami mentakrifkan mesej output menggunakan format aksara printf.

Strim

Sekiranya terdapat fail yang sangat besar yang perlu diproses, kaedah yang ideal adalah dengan membaca sebahagian daripadanya dan menulis sebahagian daripadanya Tidak kira berapa besar fail itu, selagi masa membenarkan, pemprosesan akan sentiasa dilengkapkan. Konsep aliran perlu digunakan di sini. Strim ialah satu lagi model yang digunakan secara meluas dalam Node, yang merupakan pelaksanaan EventEmitter. Menyediakan antara muka yang boleh dibaca, boleh ditulis atau dupleks penuh. Ia adalah antara muka abstrak yang menyediakan acara operasi biasa termasuk: boleh dibaca, boleh ditulis, longkang, data, tamat dan tutup. Jika kita boleh menggunakan saluran paip untuk menyepadukan acara ini dengan berkesan, operasi interaktif yang lebih berkuasa akan dicapai. Dengan menggunakan .pipe(), Note boleh berkomunikasi dengan tekanan belakang melalui saluran paip. Tekanan belakang bermaksud: hanya membaca yang boleh ditulis, atau hanya menulis yang boleh dibaca.

Sebagai contoh, kami kini menghantar data dari stdin ke fail tempatan dan pelayan jauh:

Salin kod

Kod adalah seperti berikut:


var fs = memerlukan('fs');

var net = memerlukan('net'); var localFile = fs.createWriteStream('localFile.tmp'); net.connect('255.255.255.255', 12345, function(client) { process.stdin.pipe(client); process.stdin.pipe(localFile);
});

Dan jika kami ingin menghantar data ke fail setempat dan ingin menggunakan gunzip untuk memampatkan strim, kami boleh melakukan ini:

Salin kod Kod adalah seperti berikut:

var fs = memerlukan('fs');
var zlib = memerlukan('zlib');

process.stdin.pipe(zlib.createGunzip()).pipe(fs.createWriteStream('localFile.tar'));

Jika anda ingin mengetahui lebih lanjut tentang strim, sila klik di sini.

Kawalan Aliran

Memandangkan JS mempunyai objek kelas pertama, penutupan dan konsep fungsi lain, kebenaran panggil balik boleh ditakrifkan dengan mudah. Ini sangat mudah apabila membuat prototaip dan boleh menyepadukan kebenaran logik seperti yang diperlukan. Tetapi ia juga memudahkan untuk menggunakan fungsi terbina dalam yang kekok.

Sebagai contoh, kami ingin membaca satu siri fail mengikut urutan dan kemudian melaksanakan tugas tertentu:

Salin kod Kod adalah seperti 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', function thirdCb(err, thirdFile) {
doSomething(thirdFile);
});
});
});

Masalah dengan model ini ialah:

1. Logik kod ini sangat berselerak dan tidak teratur, dan proses operasi yang berkaitan sukar difahami.
2. Tiada ralat atau pengendalian pengecualian.
3. Kebocoran memori penutupan dalam JS adalah sangat biasa dan sukar untuk didiagnosis dan dikesan.

Jika kita ingin melakukan satu siri operasi tak segerak pada set input, menggunakan perpustakaan kawalan aliran ialah pilihan yang lebih bijak. Vasync digunakan di sini.

vasync ialah perpustakaan kawalan proses yang ideanya datang daripada operasi tak segerak. Keistimewaannya ialah ia membolehkan pengguna melihat dan memerhati pemprosesan tugas tertentu. Maklumat ini sangat berguna untuk mengkaji proses berlakunya ralat.

Gaya Pengekodan

Gaya pengaturcaraan boleh dikatakan sebagai topik yang paling kontroversi, kerana ia selalunya santai. Lobak merah dan kubis, setiap orang mempunyai pilihan mereka sendiri. Perkara yang penting ialah mencari gaya yang sesuai untuk kedua-dua individu dan pasukan. Sesetengah warisan tradisional mungkin menjadikan perjalanan pembangunan Node lebih baik.

1. Namakan fungsi
2. Cuba namakan semua fungsi.
3. Elakkan penutupan
4. Jangan tentukan fungsi lain dalam fungsi. Ini boleh mengurangkan banyak kemalangan kebocoran memori penutupan yang tidak dijangka.
5. Semakin banyak fungsi

Walaupun V8 JIT ialah enjin yang berkuasa, fungsi yang lebih kecil dan diperkemas akan disepadukan dengan lebih baik dengan V8. Tambahan pula, jika fungsi kami kecil dan indah (kira-kira 100 baris), kami akan berterima kasih kepada diri sendiri apabila kami membaca dan mengekalkannya.

Semak gaya secara pemrograman: Kekalkan konsistensi gaya dan kuatkan gaya dengan alat pemeriksaan. Kami menggunakan jsstyle.

Linting (pemeriksaan kod)

Alat Lint boleh melakukan analisis statik kod tanpa menjalankannya dan menyemak kemungkinan ralat dan risiko, seperti kehilangan penyataan putus sekiranya berlaku suis. Lint bukan semata-mata setara dengan pemeriksaan gaya, ia lebih ditujukan kepada analisis risiko objektif dan bukannya pemilihan gaya subjektif. Kami menggunakan javascriptlint, yang mempunyai item semakan yang kaya.

Membalak

Apabila kita memprogram dan mengekod, kita perlu mempunyai perspektif jangka panjang. Khususnya, pertimbangkan alat yang hendak digunakan untuk penyahpepijatan. Langkah pertama yang sangat baik ialah pembalakan yang berkesan. Kami perlu mengenal pasti maklumat untuk melihat perkara yang patut diberi perhatian khusus semasa penyahpepijatan dan perkara yang digunakan untuk analisis dan penyelidikan semasa masa jalan. Anda disyorkan untuk menggunakan Bunyan, sebuah Node.jspustaka log Format output data ialah JSON Untuk maklumat lanjut, sila klik di sini.

Pelayan Pelanggan

Jika aplikasi telah mengedarkan keupayaan pemprosesan, ia akan menjadi lebih menarik di pasaran. Antara muka yang serupa boleh diterangkan menggunakan HTTP RESTFul API atau TCP JSON mentah. Ini membolehkan pembangun menggabungkan pengalaman Node mereka dengan persekitaran rangkaian tak segerak dan penggunaan strim dengan sistem teragih dan berskala.

Alat yang biasa digunakan:

1 Ringkasnya, ini adalah alat untuk membina perkhidmatan REST. Ia menyediakan sokongan pemprosesan tontonan dan penyahpepijatan yang baik, serta menyokong Bunyan dan DTrace.

2. cepat

fast ialah alat ringan yang menggunakan TCP untuk memproses mesej JSON. Menyediakan sokongan DTrace, membolehkan kami mengenal pasti ciri prestasi klien pelayan dengan cepat.

3. aliran kerja

Aliran kerja dibina atas restify dan boleh menentukan proses perniagaan untuk siri perkhidmatan jauh dan API. Contohnya: status ralat, tamat masa, penyambungan semula, pengendalian kesesakan, dsb.

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn