為什麼 Windows 8 中的 Metro App 啟動速度那麼慢?
對比 Windows Phone 8.1上的 App 和 Windows 8.1上的 App,可以明顯感覺 Windows Phone 上的 App 啟動比較快,特別是商店的啟動速度。
0. Windows Phone 8.1開始你會發現很多應用啟動變慢了。例Music, Video, 用WinJS寫的App等等(Target為7.0-8.0的除外)
1. Windows Phone 8.1以前,所有系統應用都是C++編寫的,使用Microsoft Iris UI Framework框架,其UI元素已經預編譯放到dll里。Windows Runtime XAML自8.1開始也編譯XAML文件。Windows Phone 8.0就已經開始編譯XAML了。(抱歉手機編輯器上沒有粗體)你如果用過Windows Phone 7.x,就會知道那種.NET CF和需要運行時解析渲染的XAML帶來的"快感"。
2. Windows Phone 8.1開始,Calendar, Podcast, Music, Video從系統里拆分出來有單獨的包。前兩者使用Windows Runtime XAML編寫,語言未知(沒去看AppX),後兩者使用Windows Phone Silverlight 8.1編寫(包形式其實就是換了個後綴名的AppX),語言為C++ C#。Host為AgHost.exe
3. Windows Phone 8.1的其他1st Apps同#1。
4. 很多Windows (Phone) Apps使用WinJS編寫,它們有一個共同的Host叫WWAHost.exe。其實這就是一個沒有瀏覽器UI的Internet Explorer 10/11。
The process that hosts and executes a Windows Store app using JavaScript is called WWAHost.exe. This process provides a superset of functionality greater than that provided by the Microsoft Internet Explorer browser. Therefore, if your web app runs under Internet Explorer (and does not incorporate the unsupported technologies listed later in this topic), it can also easily be run under WWAHost.exe.
然後WinJS 1.0效率又很挫,WinJS 2.0不算所有應用都遷移過來了。
Source : Migrating a web app (HTML) (Windows)
5. Windows Store的AppxManifest.xaml里(商店慢主要原因之一):
&
&
&
&
&
&
&
&
&
&
&
&
&
&
所以呢,要動態載入。 @可可蘇瑪 講到了中美悲劇的互聯速度,這個沒辦法。(嘿嘿嘿我打開Windows Store只需要轉半圈)
6. Security(主要原因之一)
為了安全,Windows Runtime很多API都是通過App&<-&>Broker&<-&>Server的機制完成的。充滿了大量的RPC(遠程過程調用)。然後效率會被拖低一點。(從Jan. 2014開始做Windows Store Apps有感覺)。
7. Dev(主要原因之一)
很多Dev根本沒有認真做應用。一點也不用心。
8. Appendix
WinJS應用 (Windows 8.0)
- Photos 我的筆記本啟動: &<1s Surface RT 3-5s
- Mail 筆記本 1-2s Surface 5-7s
8.1情況類似。說明IO性能很重要。我的筆記本裝了SSD。
9. PS: ABI的問題(主要問題之一)
Windows Runtime那麼多語言調用來調用去不斷ABI轉換肯定有效率損失,特別是那JavaScript還想操作COM對象
很快要中考了我也沒時間寫更多東西了。上次那個自問自答的問題還擱著。
商店打開慢是因為國內沒有CDN,而商店的首頁其實就是個特殊的網頁。商店本身也可以看作一個特殊的瀏覽器。在那個小圓圈在轉的時候其實商店(瀏覽器)本體就打開完了,只是在等待伺服器傳回首頁數據。
一點兒都不慢!這個在win8時代是有這個問題的,導致了我以為WP應用也這麼卡。事實不是這樣的,等我真的拿到925的時候真的很順暢,讓我反思為什麼win8應用這麼卡呢?後來我就一直用win7,後來又更新了win8.1,可以說非常的順暢.本人電腦硬碟配的120G的SSD,開狂野飆車3秒啟動完畢。狂野飆車應該已經能說明問題了,其他應用又有哪個做到了1.4個G呢?或者是開發者又該反思一下呢
Windows Phone比Windows RT好用多了!
貌似是個老問題, 不過介於高票答案基本沒說到點子上... 唔...
最大的問題, 或者說題主能感受到的 WP 8.1 和 Win 8.1 上應用載入速度的差異, 還是來自依賴網路資源的應用, 比如商店.
而諸如 XAML 編譯與否? WinJS 與否? 並不會有那麼明顯的影響. WinJS 的版本差異會帶來的影響就更小了.
就人能夠明顯感覺到的來講, 高票答案中提到的各種原因:
0. WP 8.1 的 Music 和 Video 應該不是 WinJS 寫的 (不完全確定), 用 WinJS 寫的是 Win 8.1 的 Music, Skype 等.
1. 解析 XAML 的時間跟渲染界面的時間相比應該是可以忽略的, 覺得 WP 7.x 時代慢的應該考慮到本身的配置差異和其他原因.2. C# 和 C++ 在一般應用中的性能差異也是可以忽略的, 瓶頸應該在資源載入上. 個人猜測原本相關應用沒有脫離出來之前, 載入快的主要原因應該是系統進行了預載入, 享受了自家系統的特權.
3. 同上.4. WinJS 只是一個上層庫, 性能也就是 JS 的性能, 1.0, 2.0, 3.0 性能上都不會有質的差異. 再一次, 即使是 JS 來講, 對於很多應用場景, 也是很難造成實質上的感受差異的, 尤其是在 PC 上, 差異微乎其微.5. 商店慢的確是因為網路載入的原因, 但和高票答案中給出的代碼片段沒有關係. 該代碼片段實際上應該是應用中允許訪問的網路資源, 而非需要載入的具體資源.6. 應該不會太影響, 我想一般也是觸髮式的, 和應用啟動沒有太大的關係, 而且都會給出等待提示嗯...7. 嗯這個是主要原因之一.8. 筆記本跟 ARM 設備差異最大的恐怕不止是磁碟 IO 吧... 這控制變數做得... 不過在 ARM 設備上, WinJS 確實可能帶來一點點影響.9. 也不是瓶頸, 可以忽略...嗯大致就是這樣. 不過高票答案答主還那麼年輕就知道那麼多, 也是十分羨慕~推薦閱讀:
※Windows 有哪些你相見恨晚的技巧?
※你有哪些特殊的Windows使用習慣?
※對毫無電腦知識及使用經驗的人來說,自學 Mac OS X 和 Windows 哪一個更容易?
※為什麼微軟每次發布新版 Windows 之前都要先發布一個存在大量明顯問題的預覽版?
※有了.net core之後,還會有人用windows server做伺服器嗎?
TAG:MicrosoftWindows | Windows8 | Metro設計語言 | WindowsPhone8 |