2012-08-16 82 views
1

我在一个Web应用程序中工作,在该应用程序中,开发环境从本地Web服务器加载大约500个js文件(我试过IIS和Apache)。这些文件在prod中进行了优化,但对于我们所拥有的开发而言。我知道还有其他的战略选择可能会阻止加载这么多js文件的需要,但目前我的手中没有。我想要做的是加快这些请求。我疯狂地认为每个请求只需要10ms,这样整个请求可能需要5s(10ms * 500个请求)?目前chrome和firefox都报告说这些请求需要大约100ms(甚至是304s)。为什么Chrome和Firefox在下载超小的JavaScript文件时比curl慢10倍?

我把这个下拉到最小公分母,并创建了一个1行js文件。我通过Firefox和Chrome向这个文件发出一个请求,并且每个报告都需要大于100ms。但奇怪的是,当我从curl发出同样的请求时,只需要5ms-ish:

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

什么给出了?我会认为卷曲数是正确的?为什么Chrome和Firefox需要更长的时间?

+4

** 500 JavaScript文件** ...哇 – Pointy 2012-08-16 18:52:32

+2

我们确定FF/Chrome是*只*计时实际下载,还是包括将其转换为字节码/等?我不知道,但它会造成差异。 – 2012-08-16 19:00:49

+1

您的本地网络服务器是否从您本地存储加载js文件?我刚刚检查过我的,一半JS文件从缓存(0ms)和半载~10ms。 – Brock 2012-08-16 19:01:34

回答

2

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

+0

这是我最好的理论。所以,无论我加快响应速度的速度有多快,500个js文件都需要一段时间才能加载......但是,如果情况如此,那么打包到1个文件中的js数量不会相同长? (它不) – andersonbd1 2012-08-16 19:07:54

+1

@ andersonbd1我的猜测是,在那里设置了一些开销,每个文件都是固定的金额。考虑到Chrome在他们的JS引擎中的骄傲,解析可能只是这100毫秒的一小部分。其余的可能更多的是在缓存,注册文件等方面。 – 2012-08-16 19:15:35

1

答案对我来说很简单:饼干。

在作为“Content-Type:application/json”服务的单个json文件中,Chrome的网络标签始终显示为〜1400ms,而卷曲为〜300ms(即使设置了浏览器用户代理)。浏览器应该很少需要解析这个,因为我禁用了漂亮的打印插件,并且在Chrome的开发工具中选中了“禁用缓存”。

最后我在一个隐身窗口中试了一下,看到了和Curl同样的结果。然后,我回到原来的窗口并删除了cookie,没有其他任何东西,并获得相同的速度提升。我终于意识到我的web应用程序在请求另一个验证它的服务时使用了特定的验证cookie。

相关问题