浏览器是否会“缓存”JavaScript代码?

4

我正在微调一个JQuery较重的页面,偶然发现了这个网站:

http://www.componenthouse.com/extra/jquery-analysis.html

当我第一次点击“运行测试”按钮时,数字比后续点击要高得多。这是因为JS被浏览器缓存了吗?有人能解释一下内部工作原理吗?用户可以选择不缓存JS吗?

我在5个浏览器中进行的所有测试都返回了稳定的值。我相信你的第一次测试速度较慢,是因为你在同一时间加载了其他东西。 - Havenard
给定的链接已失效。 - ManirajSS
4个回答

3

外部JavaScript文件可以被缓存,当然,包含脚本标签的HTML也可以被缓存。你看到的可能是HTML缓存或浏览器优化的结果。你应该尝试不同的浏览器,关闭和重新打开浏览器,并清除浏览器的缓存。


如果你点击重新加载,你会再次得到较慢的时间,因此这不是由于文件被缓存的原因。 - Alan
他所看到的是jQuery缓存选择器查询结果。 - Eli Grey
2
Elijah,我不确定那是正确的。在Firebug分析器中运行它并比较结果;第一次和第二次运行的jQuery执行代码时间相似。 - Craig Stuntz

1
无论 JavaScript 代码是否被缓存,执行性能都不会受到影响。你所看到的是 jQuery 对选择器查询结果进行缓存,以便在后续运行中不需要花费太长时间。

如果那是差异的主要原因,我会期望在IE 8中看到类似的行为。 - Craig Stuntz
后续运行中没有性能提升。在5个不同的浏览器(和2个IE不同版本)中进行了测试,结果从第一次运行到所有后续运行都保持稳定。那个人可能在第一次测试期间加载了大量CPU,并认为这与缓存有关。 - Havenard
1
Havenard,你和我看到的结果不同。在Firefox 3.5上,我看到第二次及以后的运行始终执行更快。 - Craig Stuntz
我也在 Google Chrome 中看到了同样的行为(第二次和随后的运行一致更快),尽管差异不是很明显(因为 Chrome 本来就很快)。 - Craig Stuntz

1

在Firefox 3.5中,第二次的数字与我之前(显著)不同。另一方面,在IE 8中它们相当一致(但速度较慢)。Firefox 3.5的JavaScript解释器将JS编译为可执行代码。因此,第一次运行较慢是有道理的;代码尚未被JIT编译。


1
你所看到的性能提升很可能是由于你的JavaScript解释器。大多数较新的Web浏览器使用JIT编译JavaScript引擎,因此多次执行的代码路径可以进行优化。
阅读这篇博客文章,了解Safari的JavaScript引擎如何实现其许多加速。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接