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. javascript - 关于一段 for 循环代码执行顺序的问题2. 请问连接文件怎么写3. 求解答:访问不了虚拟服务器的问题?4. docker - 各位电脑上有多少个容器啊?容器一多,自己都搞混了,咋办呢?5. docker-machine添加一个已有的docker主机问题6. docker网络端口映射,没有方便点的操作方法么?7. docker 17.03 怎么配置 registry mirror ?8. java - 3个dao的数据根据请求参数选择一个映射到一个url上,怎么写比较好?9. 如何调整IDEA中直接运行java程序的日志输出级别?10. javascript - 读取页面源码,页面中所有的换行都被当成<br/>读取出来 了,,求解应该怎么让它被正确的解析