Google 提出 StrongMode 和 SoundScript議案,增強 V8 性能
原文 http://www.infoq.com/cn/news/2015/03/Google-StrongMode-SoundScript-V8
JavaScript 引擎性能大戰硝煙迷漫,Chrome V8 引擎團隊宣布了一個 新的計劃 ,在這個計劃里他們介紹了兩個新的虛擬機概念:強化模式(StrongMode)和強化腳本(StrongScript)。
強化模式是 ES5 嚴格模式(strict mode)的一個擴展,在這個模式下只允許使用性能可預測的 JavaScript 特性。它是 JavaScript 語言的一個子集,在允許的情況下關閉妨礙虛擬機充分優化代碼的部分特性。
舉個例子,強化模式下的其中一個限制是數組不能有空洞。在一篇 描述 SoundScript 的博客文章 中,Dr. Axel Rauschmayer 說:
如果數組沒有空洞,它們的元素就會被存儲在連續內存中并且可以被索引訪問,如果數組一旦有了空洞,就必須使用由索引到元素的映射。
所以,只要消除數組空洞就可以提升性能。如果想要使用這個模式,開發者需要在代碼的最前面加入如下聲明:
use strong
按照強化模式規范編寫的 JavaScript 仍然可以在其它瀏覽器中運行,啟用強化模式意味著 V8 會進行額外的性能優化,當你使用了不被建議的代碼時會拋出錯誤提示。Mozilla 的研究員, Emscripten 的負責人 Alon Zakai 對此感到非常擔憂 :
這讓我感到很困擾,如果它正常運行,那么沒問題,但是如果遇到增強模式不推薦使用的代碼,那么事情就大有不同,其它瀏覽器可能以不 同的方式執行。當然,如果想避免這個問題發生,強化模式需要拋出 警告(warnings) 而非 錯誤(errors),作為規范,僅提示人們他們可以優化的內容就足夠了。
在一個有潛力成為 JavaScript 重大改變的相關議案中,SoundScript 旨在向運行時 JavaScript 中添加面向用戶的類型。JavaScript 的其中一個特性就是它的動態類型系統,然而隨著應用規模的增加,為了滿足運行大型項目的需求,像 TypeScript 一樣的外部類型系統如雨后春筍般涌現。
事實上,SoundScript 將會基于 TypeScript 實現一套盡可能與 TypeScript 相似的標準,V8 團隊表示在虛擬機中支持強類型會讓它可以使用類型信息以盡早地積極優化。
在 Hacker News 上的一個討論 中,JavaScript 的創始人 Brendan Eich,希望 Chrome 在這些提案上有所作為:
V8 團隊承諾與 TC39 一起為語義化工作并且開源這些代碼,這么做大有裨益。最糟糕的情況是,這會變成另一個 Chrome 掌權的游戲,變成另一個Chrome的權力場。但是所有跡象都表明,到目前為止事情并沒有像這樣發展下去。
Google 聲稱強化模式和 SoundScript 暫時是實驗性的,像這樣的新特性在加入標準之前還有很長的路要走。ECMAScript 負責的標準核心 TC39 在形成新標準之前,像 SoundScript 這樣的提案還需要充分地實踐。
我們鼓勵開發者閱讀 強化模式的提案 ,開發者們可以在命令行中使用如下 flag 打開 Chrome canary:
--js-flags="--strong-mode"
查看英文原文: http://www.infoq.com/news/2015/03/Google-StrongMode-SoundScript-V8