var http = require('http');
http.createServer(function(req,res){
res.writeHeader(200, {'Content-Type' : 'text/html ; charset=utf-8'})
if(req.url !== '/favicon.ico'){
console.time('test');
var c=1,a=2,b=3;
res.write(show()+''+c);
c=a+b;
res.write('<br />')
res.write(c+'<br />');
console.timeEnd('test');
res.end()
}
}).listen(8000)
function show(){
var str='';
for(var i=0;i<10000;i++){
str+=i*i*i*i+'<br />';
}
return str
}
console.log('server is running at http://127.0.0.1:8000')
Dua baris terakhir ialah 1 dan 5!
Buku itu mengatakan bahawa objek http.ServerResponse melaksanakan strim.Boleh tulis (strim boleh tulis). Walau bagaimanapun, strim boleh tulis biasanya tidak segerak (seperti strim tulis fs, strim zlib, stdin sub-proses), yang sesuai untuk model perkhidmatan dipacu peristiwa. Sekarang apa yang saya uji ialah penyegerakan res.write, yang bermaksud bahawa panggilan balik ini mesti dilaksanakan sebelum panggilan balik seterusnya dalam baris gilir acara boleh dilaksanakan?
function(req,res) ialah panggilan balik acara ruquest, yang bermaksud bahawa jika anda berurusan dengan puluhan ribu permintaan serentak, anda perlu melaksanakan puluhan ribu fungsi(req,res), walaupun tiada Aplikasi intensif CPU dalam fungsi(req,res) Sedikit menambah Adakah ini tidak bermakna akan ada kelewatan dalam akses pengguna? Tetapi nod sangat baik untuk mengendalikan io intensif? Adakah saya tersalah sangka?
Saya sengaja membuat fungsi show ini, kerana js adalah single-threaded dan tidak pandai mengendalikan perniagaan intensif CPU, jadi res.write(show()+''+c) mengambil masa yang lebih lama dan kelihatan lebih baik ? Jika Jika res.write tidak segerak, maka c=a+b akan dilaksanakan dahulu;
Kelebihan nod ialah ia boleh mengendalikan konkurensi yang tinggi dan boleh mengendalikan sejumlah besar permintaan, tetapi operasi pengendalian respons. menulis atau menanya pangkalan data dikendalikan oleh urutan lain, sama seperti restoran, dengan chef dan pelayan ( Satu utas), tidak seperti rangka kerja perkhidmatan web am yang hanya mempunyai seorang chef dan pelayan sambilan,
Jadi situasi anda di atas bukanlah IO yang intensif, tetapi seperti, chef di restoran terlalu sibuk untuk mengendalikan hidangan anda, menyebabkan pelayan itu menghidangkan hidangan dengan perlahan .
Jelas sekali, pelaksanaan
show()
时,还没有开始执行write()
, jadi kaedah ujian anda sendiri adalah salah.
.write
Ia hanya menulis data ke penimbal dalaman dan kemudian kembali Ini tidak bermakna ia kembali selepas data dihantar, jadi ia tidak mengambil masa CPU