Jika saya perlu menggunakan nodejs untuk meminta berbilang antara muka java dan akhirnya mendapatkan semua data untuk memaparkan halaman, bagaimana saya boleh meningkatkan kelajuan
Saya pernah begini
//请求接口
http.tp(options,function(error,response,tags){
http.tp(options1,function(error,response,topic){
http.tp(follow,function(error,response,follow){
http.tp(options2,function(error,response,topicRCMD){
data={
follow:follow,
topicRCMD:topicRCMD,
tags:tags,
topicHot:topic,
}
opt.render(data); //渲染页面
})
})
})
})
Ini sangat perlahan. Kemudian saya memetik async
return async.parallel({
//我关注的人
follow:function(callback){
http.tp(follow,function(error, response, follow){
callback(null, follow);
})
},
// 获取标签
tags:function(callback){
http.tp(options,function(error, response, tags){
callback(null, tags);
})
},
// 获取热门话题
topicHot:function(callback){
http.tp(options1,function(error, response, topicHot){
callback(null, topicHot);
})
},
// 获取推荐话题列表
topicRCMD:function(callback){
http.tp(options2,function(error, response, topicRCMD){
callback(null, topicRCMD);
})
}
},
function(err, results){
console.log('ssss:',results);
opt.render(results); //渲染页面
});
Ini menjadikan kelajuan lebih pantas, tetapi ia masih sangat perlahan
Kaedah pertama adalah perlahan kerana masa yang diambil ialah jumlah semua masa permintaan; proses pemaparan atau Proses pemprosesan permintaan sebelah pelayan telah dioptimumkan
Anda hanya boleh menggunakan sesuatu seperti promise.all Jika ada kaedah yang baik, sila beritahu saya.
Masalah ini sebenarnya adalah masalah strategi rendering Sebenarnya, tidak perlu melengkapkan semua permintaan data dalam Node sebelum menghantarnya kepada klien.
Anda boleh meletakkan sepenuhnya langkah meminta data ini pada klien, dan kemudian pelanggan menggunakan ajax untuk mendapatkan data. Ini menghapuskan keperluan untuk menunggu semua data diperolehi.
Anda boleh menggunakan janji baharu dalam sintaks es6 untuk menyelesaikan situasi lubang hitam panggil balik anda secara khusus.
Saya rasa saya perlu mempertimbangkan dua perkara Pertama, adakah anda bergantung pada yang sebelumnya untuk segala-galanya? Adakah mungkin untuk menghantar beberapa permintaan secara selari? Kedua, adakah mungkin untuk membezakan keutamaan dan membiarkan pelanggan menghantar permintaan Lagipun, tetingkap pelanggan hanya begitu besar, dan hubungan antara keutamaan akan menjadi jelas permintaan, yang penting dihantar dahulu Pengguna akan melihatnya apabila memuatkan skrin pertama, dan kemudian menyiarkan perkara berikut;