Ringkasan pembelajaran NodeJs saya (1)_node.js

WBOY
Lepaskan: 2016-05-16 16:42:31
asal
1169 orang telah melayarinya

Dalam artikel pertama ini, mari bercakap tentang beberapa butiran pengaturcaraan NodeJs.

1. Lintas tatasusunan

for (var i=0, l=arr.length; i<l; i++)
Salin selepas log masuk

Satu kelebihan menulis dengan cara ini ialah setiap gelung menyimpan satu langkah untuk mendapatkan panjang objek tatasusunan Semakin panjang panjang tatasusunan, semakin jelas nilainya.

2. Tentukan sama ada pembolehubah itu benar atau salah

if (a) {...} //a='', a='0', a=[], a={}
Salin selepas log masuk

Keputusan jika penghakiman bersyarat ialah: palsu, benar, benar, benar. Keputusan ini berbeza daripada keputusan PHP, jangan keliru. Ia juga perlu untuk membezakan antara situasi yang serupa dengan pertimbangan bukan identiti.

3. Penghakiman bukan identiti 0 nilai

1 if (0 == '0') {...} //true
2 if (0 == []) {...} //true
3 if (0 == [0]) {...} //true
4 if (0 == {}) {...} //false
5 if (0 == null) {...} //false
6 if (0 == undefined) {...} //false
Salin selepas log masuk

Sebenarnya, terdapat banyak pertimbangan yang pelik, saya hanya menyenaraikan yang lebih biasa. Jika anda ingin memahami peraturan, sila rujuk catatan blog saya yang lain: [JavaScript] Analisis mendalam tentang operasi hubungan JavaScript dan pernyataan if.

4. Perangkap parseInt

var n = parseInt(s); //s='010'
Salin selepas log masuk

Selepas pernyataan ini dilaksanakan, nilai n ialah 8, bukan 10. Walaupun ramai orang tahu perkara ini, kesilapan tidak dapat dielakkan dalam pengaturcaraan, dan saya tahu dengan baik. Oleh itu, yang terbaik adalah menulis dengan cara berikut dan anda tidak akan melakukan kesilapan.

var n = parseInt(s, 10);
Salin selepas log masuk

5. Pembolehubah mesti diisytiharkan sebelum digunakan

Walaupun tiada ralat dalam menggunakan pembolehubah secara langsung tanpa mengisytiharkannya, penulisan dengan cara ini sangat terdedah kepada ralat. Oleh kerana jurubahasa akan mentafsirkannya sebagai pembolehubah global, ia boleh mempunyai nama yang sama dengan pembolehubah global lain dan menyebabkan ralat. Oleh itu, kita mesti membangunkan tabiat yang baik untuk mengisytiharkan pembolehubah sebelum menggunakannya.

6. Terdapat situasi tak segerak dalam gelung

for (var i=0, l=arr.length; i<l; i++) {
   var sql = "select * from nx_user";
  db.query(sql, function(){
    sys.log(i + ': ' + sql);
  }); //db.query为表查询操作,是异步操作
}
Salin selepas log masuk

Anda akan mendapati bahawa hasil output adalah sama, dan ia adalah kandungan output apabila i=arr.length-1. Oleh kerana JavaScript adalah satu-benang, ia akan melaksanakan kandungan segerak keseluruhan gelung sebelum melaksanakan operasi tak segerak. Fungsi panggil balik tanpa nama dalam kod ialah panggilan balik tak segerak. Apabila fungsi ini dilaksanakan, gelung for dan beberapa operasi penyegerakan seterusnya telah selesai. Disebabkan oleh prinsip penutupan, fungsi ini akan mengekalkan kandungan pembolehubah sql dan pembolehubah i dalam gelung terakhir gelung for, jadi ia akan membawa kepada keputusan yang salah.

Jadi apa yang perlu kita lakukan? Terdapat dua penyelesaian Satu ialah menggunakan fungsi segera, seperti berikut:

for (var i=0, l=arr.length; i<l; i++) {
  var sql = "select * from nx_user";
  (function(sql, i){
    db.query(sql, function(){
      sys.log(i + ': ' + sql);
    }); //db.query为表查询操作,是异步操作
  })(sql, i);
}
Salin selepas log masuk

Kaedah lain ialah mengekstrak bahagian operasi tak segerak dan menulis fungsi seperti berikut:

var outputSQL = function(sql, i){
   db.query(sql, function(){
      sys.log(i + ': ' + sql);
  }); //db.query为表查询操作,是异步操作
}

for (var i=0, l=arr.length; i<l; i++) {
  var sql = "select * from nx_user";
  outputSQL(sql, i); 
}
Salin selepas log masuk


7 Apabila memproses sejumlah besar data, cuba elakkan gelung bersarang.

Oleh kerana masa pemprosesan gelung bersarang akan meningkat secara eksponen apabila jumlah data meningkat, ia harus dielakkan sebaik mungkin. Dalam kes ini, jika tiada cara yang lebih baik, strategi umum adalah untuk menukar ruang untuk masa, iaitu, untuk mewujudkan jadual pemetaan Hash bagi data kitaran sekunder. Sudah tentu, keadaan tertentu mesti dianalisis berdasarkan kes demi kes. Perkara lain yang perlu disebutkan ialah beberapa kaedah itu sendiri ialah badan gelung, seperti Array.sort() (kaedah ini harus dilaksanakan menggunakan dua lapisan gelung), jadi anda perlu memberi perhatian apabila menggunakannya.

8. Cuba elakkan panggilan rekursif.

Kelebihan panggilan rekursif ialah kodnya ringkas dan pelaksanaannya mudah, tetapi kelemahannya sangat penting dan dijelaskan seperti berikut:

(1) Saiz tindanan fungsi akan berkembang secara linear dengan tahap rekursi, dan tindanan fungsi mempunyai had atas Apabila rekursi mencapai tahap tertentu, tindanan fungsi akan melimpah, menyebabkan ralat program;

(2) Setiap tahap rekursif akan menambah operasi tolak dan pop tindanan tambahan, iaitu, menyimpan pemandangan dan memulihkan pemandangan semasa panggilan fungsi.

Oleh itu, panggilan rekursif harus dielakkan sebaik mungkin.

9. Berkenaan pengasingan skop fail modul.

Apabila Node menyusun fail modul JavaScript, kandungannya telah dibungkus kepala dan ekor, seperti berikut:

(function(exports, require, module, __filename, __dirname){
  你的JavaScript文件代码
});
Salin selepas log masuk
Ini membolehkan pengasingan skop antara setiap fail modul. Oleh itu, apabila anda menulis fail modul NodeJs, anda tidak perlu menambah sendiri lapisan enkapsulasi pengasingan skop. Format kod berikut hanya menambah lapisan tambahan panggilan fungsi, yang tidak disyorkan:

(function(){
  ... ...
})();
Salin selepas log masuk
10. Jangan campurkan tatasusunan dan objek

Berikut ialah contoh kod ralat:

var o = [];
o['name'] = 'LiMing';
Salin selepas log masuk
Mencampur tatasusunan dan objek boleh membawa kepada ralat yang tidak dapat diramalkan. Salah seorang rakan sekerja saya menghadapi masalah yang sangat pelik. Mari lihat kodnya dahulu:

var o = [];
o['name'] = 'LiMing';
var s = JSON.stringify(o);
Salin selepas log masuk

Dia pada asalnya menyangka bahawa atribut nama objek o akan berada dalam rentetan JSON, tetapi hasilnya tidak. Saya juga sangat terkejut pada masa itu, tetapi saya mempunyai firasat bahawa ia adalah masalah mencampurkan tatasusunan dan objek. Saya mencubanya dan ternyata masalahnya. Kemudian, saya mendapat tahu dalam spesifikasi ECMA bahawa tatasusunan bersiri mengikut peraturan JA. Oleh itu, adalah perlu untuk membangunkan tabiat pengaturcaraan yang baik, menggunakan tatasusunan dan objek dengan betul, dan jangan mencampurkannya.

11. Pengaturcaraan Janji Elegan

Saya percaya bahawa sesiapa sahaja yang telah berhubung dengan nodeJs telah mengalami pengalaman ini Apabila panggilan balik tak segerak disarangkan dalam panggilan balik tak segerak, kod tersebut menjadi mengelirukan dan tidak dapat dibaca. Dilema nodeJs ini boleh diatasi dengan bantuan janji. Janji adalah seperti pengukir, menjadikan kod anda elegan dan cantik. Promise mempunyai spesifikasi A, dan terdapat beberapa kaedah pelaksanaan dalam talian, anda boleh merujuknya.

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!