臉書開源JS引擎,可優化移動應用性能
臉書發布了為移動設備優化的JavaScript引擎Hermes,能提高應用的性能,以及為資源有限的設備提供更流暢的使用體驗,目前Hermes的第一個使用案例,是用於改進React Native應用,臉書未來還計劃推出一系列分析工具,並在開發工具Visual Studio Code上提供整合支持。
現在的移動應用越來越複雜,容量也越來越大,開發人員在為應用增加功能時,常需要考慮性能影響,而臉書為了提高它們應用的性能,對JavaScript以及平台做了很多改進,但當他們在分析性能數據的時候,發現JavaScript引擎本身的啟動性能以及容量,便是影響應用執行性能的一大重要因素。
臉書提到,移動設備相對PC以及筆記本來說,計算資源更少,才需要專為這類資源受限的設備優化JavaScript性能,因此臉書重新打造了名為Hermes的JavaScript引擎。Hermes針對較低計算資源不足的設備進行優化,這些設備通常內存較少,快閃記憶體較慢,以及較弱的計算能力,臉書希望使用Hermes,以改善應用載入到可用的時間(TTI,Time To Interact)、下載程序的大小,還有內存的使用率。
Hermes通過3個手段提高上述的3項指標,分別是位元組碼預編譯(Bytecode Precompilation)、不使用JIT,以及特殊的垃圾回收策略。臉書提到,通常JavaScript引擎會載入JavaScript代碼,併產生位元組碼,而這個步驟會延遲JavaScript開始執行的時間,但Hermes使用AOT編譯跳過這一個過程,讓程序在發布的時候就先編譯好,因此也可以花更多的時間優化位元組碼,而位元組碼更小效率也就更高。
位元組碼預編譯可以明顯縮減代碼載入到可以開始執行與操作的時間,而且因為代碼先編譯好了,文件鏡像的內存只需要讀取,對於Android無置換(Swapping)操作的操作系統,在內存吃緊的情況下,內存區塊頂多被刪除,而不至於整個程序被砍掉。臉書提到,雖然壓縮位元組碼比壓縮JavaScript代碼稍大,但是Hermes本身的容量比較小,因此也減少了Android React Native應用整體的容量。
Hermes採用無JIT設計,臉書表示,雖然JIT編譯程序是常用來加速執行的方法,但是JIT必須要在應用啟動時預熱,而這會使得TTI難以改善,甚至負面影響TTI,而且JIT會增加原生代碼的大小和內存使用,這些缺點都會使臉書設定的三個指標下降。
在垃圾回收策略上,Hermes能夠最小化引擎使用的內存和虛擬地址(Virtual Address,VA)空間,Hermes的垃圾回收器具有幾個重要的特性,分別是以區塊的形式按需分配VA空間,而VA空間也不需要在單一內存範圍內,這能避免32位設備的限制,垃圾回收器也能夠移動對象,對內存碎片進行整理,並把不需要的內存區塊還給系統,並且以代數機制回收內存,而不做JavaScript堆(Heap)的掃描。
控制內存的使用,對於內存有限的設備非常重要,臉書提到,低端設備由於內存有限,在不會進行置換操作的操作系統,系統會關閉使用過多內存的應用,這樣不只會影響程序後台功能,之後也需要花費許多時間重新啟動,而Hermes能儘可能避免這些影響應用性能的事件發生。
React Native是臉書應用Hermes最初的使用案例,並且已經完成大部分的工作,接下來還會構建時間和內存分析工具,讓開發者更容易改進應用,未來也希望能支持Visual Studio Code排錯器協議。由於Hermes是針對移動應用進行優化,因此臉書沒有計劃要將Hermes與瀏覽器或是Node.js等伺服器基礎架構整合,臉書表示,目前市面上的JavaScript引擎仍然是這些環境的首選。
※塵埃落定!IBM以340億美金拿下紅帽,混合雲競爭加速
※邁向金融科技,招商銀行如何在Power上玩轉分散式創新?
TAG:雲智時代 |