问题描述
假设:
- 这里有一个接口,在浏览器控制台中看到他的请求时间是 50ms
- 复制到同网络环境下的 postman 中调用,请求时间是将近 200ms ,请求头完全复制
- 把调用写到 js 脚本中,在同网络环境下 node 运行 ,console.time 显示也是 200ms
怀疑过程
- 一开始以为是 nodejs 瓶颈,在中文互联网下搜索原因寥寥无几,改去 stackoverflow 用 [nodejs is slower than chrome] 查找,有几篇类似的像这一篇,看回答基本都是是归咎于网络;
- 通过 fiddler 查看,有如下区别 !
- 在 js 脚本中把原本一次运行只调用一次的请求重复调用了几次,发现后几次速度逐渐接近浏览器原生访问 !
我的问题
- 我怀疑是不是有什么缓存机制在生效,与 fiddler 中的 TCP/IP Connect 和 ServerConnected 的差异相耦合,可惜到这里中文互联网上的资料就明显出现了欠缺,感觉我已经快找到正确的原因了,所以来找大家确认下
- 如果 1 是正确的,那对于每次运行都从头开始的 js 脚本,有什么解决方法吗? nginx 的缓存配置可以起到作用吗
问题的根源
最后根据网友的提示, 得到的一些线索,或者根源
- 浏览器的 keep-alive 机制优化掉了连接建立的开销
- 浏览器默认会开启压缩,而 postman/node.js 默认没有压缩,如果 response body 较大,而且网速不够快的话,会有显著的区别
- 如果你要测量一个接口的响应时间,最好在服务端测量,浏览器端的测量不可避免的会收到网络的影响
转载请注明:QMT|Ptrade量化交易 » node.js 请求性能比在浏览器控制台(或者postman中)运行 要慢很多 ?