2009-05-20 33 views
2

我注意到,在对JavaScript文件进行更改后,清除缓存并重新加载;一个函数特别在大约90ms内运行,下一次我加载页面,它运行在40ms,下一次运行时,它运行在20ms ...然后永远不会变快。浏览器是否编译和缓存javascript?

它看起来像IE的一种编译我的JavaScript和缓存编译版本的地方,类似于SQLServer处理查询。

这是怎么回事?

有没有人知道我在哪里可以找到如何浏览器处理JavaScript的澄清?

回答

7

你可能想看看Eric Lippert's comment彼得托的博客文章Compiled, interpreted, whatever

的JScript经典就像在这个意义上,任何的JScript经典程序运行之前,我们充分语法检查代码编译语言,产生一个完整的分析树,并生成一个字节码。然后我们通过字节码解释器运行字节码。从这个意义上说,JScript与Java一样被“编译”。不同之处在于JScript不允许您保留或检查我们的专有字节码。此外,字节码比JVM字节码高得多 - JScript Classic字节码语言仅仅是解析树的线性化,而JVM字节码显然是要在低级堆栈机器上运行。

桩和评论是从2003年9月,但从拉尔夫·Sommerer的On JavaScript performance in IE8后来看,他们并没有在根本JScript引擎太大的改变:

除非在IE中使用的JavaScript引擎(和其他地方)采用某种编译方式来编译本地代码,它在性能方面总是落后于竞争对手。根据我在他们的Channel9 appearance中收集的内容,他们已经改进了字节码的执行,但他们的主要目标是JavaScript本地对象(Array,String,...)和JavaScript-DOM交互。

+0

感谢您深思熟虑并提出了答案。 – 2009-05-21 14:45:26

1

我知道你问了关于IE8,但这里是V8-谷歌的引擎。包含有关V8如何工作的视频。

http://code.google.com/p/v8/

+0

伟大的视频谢谢。 – 2009-05-20 18:15:05

3

IE8是不是开源的,所以人们只能做假设;然而,开源浏览器(例如Chromium,Firefox,Webkit)的工作方式与您所说的大致相同,在非浏览器中的许多其他解释器也不一定是JS设置(首次看到或重新加载时编译新源,缓存或保存编译版本以便将来更快地执行),所以IE的JavaScript方法应该与您猜测的非常相似,这似乎是非常合理的。