浏览器编译和缓存javascript?

时间:2009-05-20 17:25:07

标签: javascript internet-explorer internet-explorer-8

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

看起来IE正在编译我的javascript并在某处缓存编译版本,类似于SQLServer处理查询的方式。

那是怎么回事?

有谁知道我在哪里可以找到浏览器如何处理javascript的说明?

3 个答案:

答案 0 :(得分:7)

您可能需要查看Eric Lippert's comment给Peter Torr的博文Compiled, interpreted, whatever

  

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

帖子和评论是从2003年9月开始的,但从Ralph Sommerer的On JavaScript performance in IE8帖子来看,它们在底层JScript引擎中没有太大变化:

  

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

答案 1 :(得分:3)

IE8不是开源的,所以人们只能提出假设;然而,开源浏览器(如Chromium,Firefox,Webkit)的工作方式大致如你所说的那样,非浏览器中的许多其他解释器也不一定是JS设置(在首次看到或重新加载时编译新的源代码,缓存或保存编译版本,以便将来更快地执行),所以IE浏览器的Javascript方法看起来非常合理,就像你推测的那样。

答案 2 :(得分:1)

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

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