为什么chrome和firefox在下载超小javascript文件时比curl慢10倍?

时间:2012-08-16 18:46:22

标签: javascript apache http iis web

我在一个Web应用程序上工作,其中dev环境从本地Web服务器加载大约500个js文件(我已经尝试过IIS和apache)。这些文件在prod中进行了优化,但对于我们所拥有的开发。我知道还有其他战略选项可能会阻止加载这么多js文件的需要,但这目前不在我手中。我想做的是加快这些要求。我是否疯狂地认为这些请求中的每一个只需要10ms,因此整个请求可能需要5s(10ms * 500个请求)?目前,chrome和firefox都报告这些请求大约需要100毫秒(即使是304秒)。

我把它归结为最小的公分母并创建了1行js文件。我通过firefox和chrome向此文件发出请求,并且每个报告都需要> 100毫秒。但奇怪的是,当我从curl发出相同的请求时,它只需要5ms-ish:

$ curl 'http://10.222.139.56:81/js/ben.js' -o /dev/null -w '%{time_total}'
0.005

是什么给出的?我认为卷曲数字是正确的吗?为什么chrome和firefox需要更长时间?

2 个答案:

答案 0 :(得分:2)

我的猜测是,对于Firefox和Chrome加载的每个js文件,报告的时间包括文件的浏览器解析,缓存等。即使是单行文件也只需要处理少量工作。 另一方面,curl只是拉下内容并保存到磁盘或标准输出。那个操作要快得多。

答案 1 :(得分:1)

对我来说答案很简单:cookies。

在单个json文件上作为" Content-Type:application / json",Chrome的网络标签始终显示~1400ms,而curl是~300ms(即使使用浏览器User-Agent组)。浏览器应该没有必要解析这个,因为我禁用了漂亮的打印插件,并且已经禁用了缓存"在Chrome的开发工具中查看。

最后,我在一个隐身窗口中尝试了它,并看到了与Curl相同的结果。然后我回到原来的窗口并删除了cookie,没有别的,并且获得了相同的速度提升。我终于意识到我的Web应用程序在对另一个验证它的服务的请求中使用了特定的身份验证cookie。