如果JavaScript解释器执行“JIT编译”,那么它是否会将其结果缓存以便在下次加载网站时使用相同的脚本?

12
为了更加明确,我主要关心Firefox中的SpiderMonkey解释器。假设我想要加速在浏览器中加载某个特定网站,或者加速加载所有包含一些流行脚本(例如JQuery)的网站。假设所涉及的脚本在页面重新加载之间不会改变。那么SeaMonkey会理解这一点并避免完全重新编译吗?如果SpiderMonkey不能做到这一点,是否有其他解释器可以?或者这基本上是一个潜在的新功能,但由于计算机已经足够快,因此没有人关心它吗?

不确定的话,你可能想要查看http://ejohn.org/blog/tracemonkey/和https://developer.mozilla.org/En/Nanojit。有趣的是:“如何编译它留给读者作为练习;” - Adam Bergmark
1
我认为你指的是SpiderMonkey,因为SeaMonkey是一个浏览器... - sdwilsh
1个回答

10

目前Gecko还没有做这样的优化,但我们一定会考虑。不幸的是,这样做有一些复杂的问题。


2
当前JIT编译模式下的Web脚本编译会将诸如指向全局对象的指针等内容嵌入到编译后的代码中,以实现最大的性能表现。它还会嵌入有关安全决策的信息。这意味着您无法将同一jit编译的代码重复使用于不同的全局对象上。您可以禁用编译并启用优化,但这仍然存在隔间问题等其他问题。如果简单地反优化所有这些内容以实现复用,代码会变得非常缓慢。 - Boris Zbarsky
1
任何全局变量访问都是在访问窗口上的属性,这是一个DOM对象。因此,任何访问任何全局属性(包括Array、Math、String、在全局范围内声明的任何函数或变量等等)的脚本都会触及DOM... - Boris Zbarsky
2
@Boris:就今天而言,这个答案还正确吗?特别是关于同一主题的此SO问题 - cha0site
@EirikHoem 是的,没错。 - Boris Zbarsky
这对于插件是否实际?我通过 tab.attach({contentScriptFile: ... 在每个选项卡上注入了大约64 KB的脚本,担心这会对性能产生负面影响。 - Artem
显示剩余3条评论

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