2009-05-20 46 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方法應該與您猜測的非常相似,這似乎是非常合理的。