【问题标题】:why are chrome and firefox are 10x slower than curl at downloading a super small javascript file?为什么 chrome 和 firefox 在下载超小的 javascript 文件时比 curl 慢 10 倍?
【发布时间】:2012-08-13 04:16:56
【问题描述】:

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

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

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

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

【问题讨论】:

  • 500 个 JavaScript 文件 ...哇
  • 我们确定 FF/Chrome 为实际下载计时,还是包括将其转换为字节码/等?我不知道,但这会有所不同。
  • 您的本地网络服务器是否从您的本地存储加载 js 文件?我刚刚检查了我的,一半 JS 文件来自缓存(0 毫秒),一半加载约 10 毫秒。
  • “我们确定 FF/Chrome 只为实际下载计时吗”不,这可能是最好的猜测……但您会认为浏览器会报告差异,不是吗?

标签: javascript apache http iis web


【解决方案1】:

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

【讨论】:

  • 这也是我所掌握的最好的理论。因此,无论我加快响应时间的速度有多快,加载 500 个 js 文件都需要一段时间……但是,如果是这种情况,那么打包到 1 个文件中的相同数量的 js 不会像长的? (它没有)
  • @andersonbd1 我的猜测是其中设置了一些开销,每个文件的数量是固定的。考虑到 Chrome 对其 JS 引擎的自豪感,解析可能只是这 100 毫秒的一小部分。剩下的可能更多是在缓存、注册文件等方面。
【解决方案2】:

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

在作为“Content-Type:application/json”的单个 json 文件中,Chrome 的网络选项卡始终显示 ~1400 毫秒,而 curl 为 ~300 毫秒(即使设置了浏览器用户代理)。浏览器应该几乎不需要解析这个,因为我禁用了我的漂亮打印插件,并在 Chrome 的开发工具中检查了“禁用缓存”。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-07
    • 1970-01-01
    • 2017-02-03
    • 2019-04-05
    • 1970-01-01
    • 2011-06-28
    • 2013-05-31
    • 1970-01-01
    相关资源
    最近更新 更多