JavaScript的預編譯與執行
是一種描述型腳本語言,是由瀏覽器進行動態地解析與執行,不同於Java或C等編譯性語言,不需要提前進行編譯生成中間結果。事實上,引擎執行js:語法分析、預編譯期(預處理)與執行期。
- 就是引擎檢查你的代碼有沒有什麼低級的語法錯誤;
- 預編譯期JS會對本代碼塊中的所有聲明的變量和函數進行處理(類似與C語言的編譯)
- 此時處理函數的只是聲明式函數(例如:function p(x){console.log(x)})
- 全局變量聲明,變量也只是進行了聲明但未進行初始化以及賦值。
- 匿名函數不參與預編譯,只有在解釋執行階段纔會進行變量初始化。
- 執行代碼
- JS引擎是按照代碼塊來進行預處理和執行的,也就是說預處理的只是執行到的代碼塊的聲明函數和變量,這也是邊編譯邊處理的道理。
代碼緩存
爲了加快某個js文件的執行速度可以將該js第一次的編譯結果保存在文件中。在之後的運行中直接使用編譯結果。該技巧可以有效提高js文件依賴多的應用的響應時間;
在使用這種技巧時,需要注意:
- 是否是對全部js文件執行;
- 是否生成了編譯結果;
- 是否使用了編譯結果;
- 源文件更新後使用新源文件、並且同時生成新的cache(codecache 日期不匹配失效);