Flexbox 版面配置非';速度不慢

不久前,Wilson Page 撰寫了一篇《Smashing Magazine》的精彩文章,主題是深入探討他們如何讓《金融時報》網頁應用程式上架。文章中提到:

隨著應用程式開始發展,我們發現效能越來越嚴重。

我們在 Chrome 開發人員工具的推出數小時內,發現了問題:令人驚訝的,— 它是我們新認識的朋友 flexbox。時間軸顯示,部分版面配置大約需要 100 毫秒的時間,因此在不採用 Flexbox 的情況下重新調整版面配置,就縮短了 10 毫秒!

Wilson 的意見是關於使用 display: box; 的原始 (舊版) Flexbox。遺憾的是,如果較新的 Flexbox (display: flex;) 速度更快,他們根本沒有機會回答,但在 CSS Tricks 上,Chris Coyier 開啟了這個問題

我們詢問了 Ojan Vafai,他曾為 WebKit & Blink 撰寫許多實作內容,說明新的 Flexbox 模型和實作方式。

新版 Flexbox 程式碼的多輪版面配置程式碼路徑較少。不過,您仍可很容易地點擊多道程式碼路徑 (例如 flex-align: stretch 通常為雙道)。一般情況下,速度應該快上許多,但您可以建立速度相等的客服案件。

也就是說,如果可以從這個位置取出,一般區塊版面配置 (非浮動),因為一律採用單傳遞,因此速度通常會比新的彈性箱快或更快。但是新的 Flexbox 會比使用資料表或編寫自訂的 JS 基本版面配置程式碼更快。

為了找出數字差異,我已分別為新舊語法做前後比較。

舊版 V Flexbox 基準測試

  • 舊款 Flexbox全新 Flexbox (含備用選項)
  • 每頁 500 個元素
  • 計算網頁載入費用來排列所有元素
  • 每次 3 次跑步的平均值
  • 都是以桌機做為評估依據(行動裝置的速度會減慢約 10 倍)

舊版 Flexbox:版面配置成本約 43.5 毫秒


舊版 Flexbox 版面配置範例

全新 Flexbox:版面配置成本約 18.2 毫秒


新的 Flexbox 版面配置範例

摘要:舊式裝置的比新舊速度慢 2.3 倍。

此時該如何處理這種狀況?

使用 Flexbox 時,務必編寫新內容的 IE10 高音語法,以及適用於 Chrome 21 以上版本、Safari 7 以上版本、Firefox 22 以上版本、Opera (和 Opera Mobile) 12.1 以上版本、IE 11 以上版本和 Blackberry 10 以上版本的行動裝置。在許多情況下,您可以彈性選擇備用的行動裝置

記住:工具,而非規則

但最重要的是最佳化重要的指標。請一律根據時間軸來確定瓶頸,再花時間針對特定類型的作業進行最佳化。

事實上,我們與 Wilson 和《金融時報》研究室團隊交流,因此改善了 Chrome 開發人員工具的版面配置效能工具涵蓋範圍。我們即將推出新增查看元素重新版面配置邊界的功能,系統也會載入時間軸中的版面配置事件,提供每個版面配置的範圍、根層級和費用詳細資料:

強制同步處理版面配置的彈出式視窗