轉自:http://www.infoq.com/cn/news/2013/07/mobile-web-performance
在一篇深入的實質性文章中,某iOS開發公司的老闆Drew Crawford表示他認為目前移動Web應用運作遲緩,而且并不指望能在不久的将來看到重大改善,并列出了以上觀點的全部原因。該文章是
此前某篇部落格文章的後續之作——在那篇文章中,他指出:與桌面系統中的表現相比,JavaScript在移動裝置上的性能有着量級上的差距。由于那篇文章遭到了嚴重的批評,是以Drew撰寫了這篇更詳細的文章以作為回應。對于糟糕的性能和缺乏改善由此歸為以下三類:
1. 處理器性能差異:移動裝置ARM處理器vs.桌面x86處理器
2. JavaScript引擎的性能趨勢
3. 垃圾回收方面的記憶體消耗
Drew所列出的兩個瓶頸在于CPU和記憶體。其中,CPU密集型任務涉及兩方面:CPU的能力和執行效率。Drew指出,現階段x86處理器比iPhone和高端Android裝置使用的ARM處理器快十倍。
雖然不是硬體工程師,但我曾經為一家主流半導體公司工作,那裡的人們告訴我,現在性能主要依賴于工藝水準(例如,他們用“納米”來衡量的那些東西)。iPhone5能夠具有令人矚目的性能,很大程度是由于工藝水準從45納米提升到32納米——接近1/3的提升。不過要想再次獲得這樣的效果,蘋果必須将其工藝水準進一步提升到22納米。
由于大部分縮減半導體尺寸方面的知識和投入都掌握在Intel手中,Drew認為:在可以預見的未來,ARM不大可能迎頭趕上;實際上,更大的可能是Intel生産一款x86處理器,并殺入低能耗市場與ARM進行競争,而不是ARM彌補性能差距。
有關性能的第二個方面是效率。CPU周期的使用率如何,也即是,機器指令獲得JavaScript代碼生成指令的效率如何?
這也正是許多能幹的軟體工程師馬失前蹄的地方。其思維過程類似于這樣:JavaScript已經變快了,而它将繼續變快!
這句話的前半部分正确。JavaScript的速度确實得到了顯著提升。但是對後半句來說,我們已經身處JavaScript的頂峰,從今以後它的速度将不會再有大幅提升了。
下面是Chrome v8在我的Mac上(能夠運作的最早版本,來自2010年12月),與現在的v26進行對比的結果。
看不出什麼差別?這是因為本來就沒有多少差别。對于CPU密集型JavaScript程式來說,近來沒有任何重大進步。
而如果說有人覺得現在通路Web比2010年快多了,那很可能是因為電腦性能的進步,而與Chrome的改進無關。
在Drew看來,近期JavaScript的性能沒有顯著提升的原因非常明顯:
問題在于,JavaScript的JIT化是一個有着60年曆史、并經曆了長達60年研究的理念,期間人們使用各種可以想象的程式設計語言進行了成千上萬次實作,以驗證這是一個好的想法。但是現在我們已經完成了這一工作,并且榨幹了它的價值。兄弟們,就是這樣,演出結束了。或許我們可以開始尋找适用于下個60年的另一條妙計。
移動Web的第二條制約因素是記憶體。記憶體使用方面也有兩大因素:可用的記憶體總量,與記憶體使用效率。
盡管現代移動裝置擁有相當數量的内容(一般為512MB或1GB),然而作業系統限制每個應用的使用量。作業系統自身消耗了許多記憶體,此外還有許多同時運作的應用(多任務)也在消耗記憶體:
基本上,當iPhone4S上的應用使用40MB記憶體時會出現警告,而消耗213MB記憶體時應用程序會被殺死。在iPad 3上,警告出現在應用消耗400MB記憶體時,而當消耗量達到550MB時系統将殺死應用程序。
Drew提到,以iPhone 4S的分辨率,單張照片包含的位圖資料将達到30MB。這意味着最多在記憶體裡存放7張照片,超過這一數量操,作系統就會因為應用耗盡了它所享有的記憶體而殺死它的程序。是以,如果某個應用用來處理圖形或視訊等多媒體檔案,那麼它必須非常謹慎地規劃在記憶體中存放哪些内容,以及存放多長時間——因為記憶體是非常有限的。
記憶體方面的第二個因素在于效率。JavaScript帶有垃圾回收機制,是以開發者無需手動管理記憶體——這一特性正是為了減輕開發者的工作。然而,記憶體回收是有其代價的,而且這種代價在記憶體受限的環境下呈指數增長。
這張圖意味着“如果我們擁有的記憶體是我們真正需要的6倍,那麼一切安好。但如果少于需要的4倍那可就慘了。”
實際上,在記憶體受限環境中,垃圾回收機制的性能呈指數下降。如果我們編寫Python、Ruby或JS應用并在桌面計算機中運作,那麼很可能整個體驗都處在圖表右側,而永遠不會遇到緩慢的垃圾回收器。不過,讓我們在圖表左側花些時間,看看我們需要面對的其他問題。
這一表現或許可以解釋,為何蘋果永遠不會讓iOS上的Objective-C帶有垃圾回收器,而是用
ARC(同時在iOS和MAC中出現)來代替它。
雖然Drew在文章中列出了一些有趣的内容,但就像
Brendan Eich在Tweeter中所說的一樣,不是所有的應用都是CPU/記憶體密集型的。隻有一些特定類型的應用會遇到這些問題,例如遊戲和多媒體應用。盡管如此,對任何有興趣了解移動Web性能的人來說,
Drew的“萬言書”依舊值得一讀。
檢視英文原文:
The Current and FuturePerformance of the Mobile Web