javascript - nodejs 優(yōu)化問(wèn)題
問(wèn)題描述
如果我需要用nodejs 請(qǐng)求多個(gè)java的接口最后得到所有數(shù)據(jù)渲染頁(yè)面,怎么樣能提高速度之前我是這樣的
//請(qǐng)求接口 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); //渲染頁(yè)面}) })}) })
這樣速度很慢。然后我引用async
return async.parallel({//我關(guān)注的人follow:function(callback){ http.tp(follow,function(error, response, follow){callback(null, follow); })},// 獲取標(biāo)簽tags:function(callback){ http.tp(options,function(error, response, tags){callback(null, tags); })},// 獲取熱門(mén)話題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); //渲染頁(yè)面 });
這樣子速度變快了點(diǎn),但還是很慢,請(qǐng)問(wèn)這個(gè)有什么好的解決辦法嗎
問(wèn)題解答
回答1:第一個(gè)方法慢是因?yàn)樾枰ㄙM(fèi)的時(shí)間是所有請(qǐng)求時(shí)間的總和;第二種方法只需要花費(fèi)最長(zhǎng)的那個(gè)請(qǐng)求需要的時(shí)間,自然會(huì)快一些再想優(yōu)化了就需要在渲染過(guò)程或者服務(wù)器端請(qǐng)求處理過(guò)程上優(yōu)化了
回答2:只能用promise.all類似的了吧,如果有什么好的方法可以告訴我。
回答3:這個(gè)問(wèn)題其實(shí)是渲染的策略問(wèn)題,其實(shí)不需要在Node把所有數(shù)據(jù)請(qǐng)求完全后再發(fā)送到客戶端。
完全可以把這個(gè)請(qǐng)求數(shù)據(jù)的步驟放到客戶端,然后客戶端ajax獲取數(shù)據(jù)。這就不需要等所有數(shù)據(jù)獲取完。
回答4:可以用es6語(yǔ)法中新增的promise,專門(mén)解決你這種回調(diào)黑洞的情況。
回答5:感覺(jué)需要考慮兩點(diǎn),第一,你所有的都是依賴前一個(gè)嗎?有沒(méi)有可能并行發(fā)一些請(qǐng)求;第二,有沒(méi)有可能分清主次,讓客戶端去發(fā)請(qǐng)求,畢竟客戶端視窗就那么大,主次關(guān)系會(huì)很明確,客戶端發(fā)請(qǐng)求,先發(fā)重要的,用戶首屏加載會(huì)看到的,再發(fā)后面的;
相關(guān)文章:
1. java - IDEA每個(gè)修改完代碼,重啟tomcat,但是似乎還是之前的代碼2. java類加載機(jī)制-類定義中new如何理解3. android - 使用vue.js進(jìn)行原生開(kāi)發(fā)如何進(jìn)行Class綁定4. java - c++ 經(jīng)常出現(xiàn)error LNK20195. 小白問(wèn)題getDay()6. mySql排序,序號(hào)7. 常量在外面不加引號(hào)會(huì)報(bào)錯(cuò)。8. mysql取模分表與分表9. 怎么在phpstudy中用phpexcel上傳數(shù)據(jù)到MYSQL?10. wordpress里,這樣的目錄列表是屬于小工具還是啥?
