javascript - nodejs 優化問題
問題描述
如果我需要用nodejs 請求多個java的接口最后得到所有數據渲染頁面,怎么樣能提高速度之前我是這樣的
//請求接口 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); //渲染頁面}) })}) })
這樣速度很慢。然后我引用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); //渲染頁面 });
這樣子速度變快了點,但還是很慢,請問這個有什么好的解決辦法嗎
問題解答
回答1:第一個方法慢是因為需要花費的時間是所有請求時間的總和;第二種方法只需要花費最長的那個請求需要的時間,自然會快一些再想優化了就需要在渲染過程或者服務器端請求處理過程上優化了
回答2:只能用promise.all類似的了吧,如果有什么好的方法可以告訴我。
回答3:這個問題其實是渲染的策略問題,其實不需要在Node把所有數據請求完全后再發送到客戶端。
完全可以把這個請求數據的步驟放到客戶端,然后客戶端ajax獲取數據。這就不需要等所有數據獲取完。
回答4:可以用es6語法中新增的promise,專門解決你這種回調黑洞的情況。
回答5:感覺需要考慮兩點,第一,你所有的都是依賴前一個嗎?有沒有可能并行發一些請求;第二,有沒有可能分清主次,讓客戶端去發請求,畢竟客戶端視窗就那么大,主次關系會很明確,客戶端發請求,先發重要的,用戶首屏加載會看到的,再發后面的;
相關文章:
1. android - weex 項目createInstanceReferenceError: Vue is not defined2. android - 哪位大神知道java后臺的api接口的對象傳到前端后輸入日期報錯,是什么情況?求大神指點3. PHPExcel表格導入數據庫怎么導入4. pdo 寫入到數據庫的內容為中文的時候寫入亂碼5. javascript - 如圖,百度首頁,查看源代碼為什么什么都沒有?6. vue2.0+webpack 如何使用bootstrap?7. PHP類封裝的插入數據,總是插入不成功,返回false;8. mac連接阿里云docker集群,已經卡了2天了,求問?9. 微信渠道二維碼怎么使用?10. html5 - html元素select下拉列表在原生app里面為什么不能彈框顯示?
