OneAPM大講堂 | 誰更快?JavaScript 框架性能評測

来源:https://www.cnblogs.com/oneapm/archive/2018/01/25/8352147.html
-Advertisement-
Play Games

文章系國內領先的 ITOM 管理平臺供應商 OneAPM 編譯呈現。 網頁性能是一個豐富且又複雜的話題。在本帖中,我們會將討論的範圍局限在前端 JavaScript 框架上,探究相對於另外一種框架而言,使用當前的框架會如何影響您的應用程式的性能。我們會特別關註兩點: (1)某種框架要使用多長的時間來 ...


文章系國內領先的 ITOM 管理平臺供應商 OneAPM 編譯呈現。

網頁性能是一個豐富且又複雜的話題。在本帖中,我們會將討論的範圍局限在前端 JavaScript 框架上,探究相對於另外一種框架而言,使用當前的框架會如何影響您的應用程式的性能。我們會特別關註兩點:

(1)某種框架要使用多長的時間來更新用戶界面

(2)為了讓框架正常工作,下載和解析所需要的軟體包所花費的時間

在過去幾年中,我所使用的這些數據一直來源於 Stefan Krause 的 js-framework-benchmark。資源很好,但也有點複雜了。僅關註部分結果應該會更簡單一些,而本文中我們也正是這樣做的。建議您看看 Stefan 所構建的工具,自己先深入瞭解一下這些數據,尤其是如果下麵的圖片中沒有你最鐘意的框架的話。這些資源可以從 Stefan 的網站上獲取(他已測試過 40 多個框架)。

另外需要註意的是:

這些只是初步的統計結果,使用時需謹慎(比如,它們可能來自不同的瀏覽器版本)。

請留意這個問題。

窺探數字

第一組要關註的結果是每一種框架需要多長的時間在一個大型表格上進行各種操作,例如創建行,刪除行等等。重要的一點是,這些是有鍵框架的數據結果。以下是來自 Stefan 站點的解釋:

有鍵的實現通過設定鍵值在域數據和 dom 元素之間創建了某種關聯。如果數據變更了,與該鍵關聯的 dom 元素也會被更新。因此,往數據列表裡增添或刪除元素會導致 dom 發生相應的變化。

在下圖中,越大的數字表示框架執行任務越慢。表格底部的“減速幾何平均“是一項總的性能指標,從左至右,依次表明瞭各個框架的評級。最左端是 vanillajs ,表示無框架的實現,做為一個參考點。

 

OneAPM大講堂 | 誰更快?JavaScript 框架性能評測 技術分享 第1張

 

如您所見,這裡我囊括了大部分流行的前端框架,以及一些不太有名,但是非常有趣的框架。 Preact (一個非常流行的框架)和 Inferno 具有與 React 非常類似的應用編程介面(API),所 以我也將他們包含了進來。如果你的團隊正在使用 React 搭建對性能要求很高的應用,那他們或許是不錯的選擇。另外要註意的是,有鍵框架得出的結果通常會比較慢一些,因為框架要完成更多的任務。

在這些最流行的框架中,Vue 看起來相當出色。Angular 和 React 都是顯著偏慢的框架,兩者給出的性能數據也相差無幾。Inferno 的庫是其中的佼佼者。作為題外話,Inferno 的作者 Dominic Gannaway 新近被 Facebook 聘用,參與到 React 團隊中。

現在來看一些無鍵框架的統計結果:

 

OneAPM大講堂 | 誰更快?JavaScript 框架性能評測 技術分享 第2張

 

需要註意幾點。首先,這裡列出的框架數量要少一些,因為並非每一種框架都有無鍵的結果。最快的要數 Svelte,這種框架很有趣,採用不同的方式實現,你也應該對其一探究竟。

在開始後續的話題之前,如果不提一提高居榜首的 Surplus (由 Adam Haile 開發),那未免顯得有些失職。它在有鍵和無鍵的測試結果中都脫穎而出。另外,還有其他一些表現優異的框架包括 petit-dom 和 dio ,我沒有將它們列在上面是因為我想用更多的篇幅討論最受歡迎的那些庫和框架。如果你查看結果統計表,你很快會被這龐大的統計數據搞得沉重不堪。因此對其做一些修正,讓事情變得可控,以更好地達到我們的目的。

啟動指標

之前的結果關註完全載入頁面以及在大型表格上執行操作時框架的執行速度。下麵的一組數據則是從另一個不同的視角來衡量框架的性能——下載,解析和編譯所耗費的時間。

這些統計值可以告訴我們,用戶需要等待多長的時間後載入的頁面才能開始正常工作。通常來講,要下載的 JavaScript 越多,瀏覽器需要解析和編譯的代碼量越大,所需要的時間就越長。

同樣的,這些統計結果也是分為有鍵的和無鍵的。我們先來看看有鍵的統計結果:

 

OneAPM大講堂 | 誰更快?JavaScript 框架性能評測 技術分享 第3張

 

這些用於評級的指標值並不能很方便地說明問題,但通常而言,綠色代表較好,紅色代表遜色。同樣地, Inferno 表現優異,Svelte 和 Preact 也相當出色。在這些最受歡迎的框架中,Vue 表現最好,而 Ember 則墊底榜單,落後於其他的對手。

現在來看看無鍵的統計結果:

 

OneAPM大講堂 | 誰更快?JavaScript 框架性能評測 技術分享 第4張

 

在這一組中,Svelte 表現得非常快速且輕量級。其 total byte weight 值甚至比純 vanilla JavaScript 還低。我告訴過你,這是一種非常有趣的框架,沒錯吧!

後續思考

一個月前,在讀了 Addy Osmani 所著的 The Cost of JavaScript 一書後,我腦海裡便萌生了撰寫該文的念頭。他分享的一張圖表給了我啟示。該圖展示了在不同的移動設備上,一個 250KB 用 gzip 壓縮的(未解壓縮時為 1MB ) JavaScript 包需要花費多長時間完成解析。圖中特別標出了平均設備的統計值,如下所示:

 

OneAPM大講堂 | 誰更快?JavaScript 框架性能評測 技術分享 第5張

 

前端的 JavaScript 框架是一項引人關註的工程技術。它們很複雜,且不容易做好。針對特定的項目使用哪一種框架常常也很難抉擇,其中有許多需要權衡的因素。例如,像 React 這樣的框架具有一個大型的生態系統,通過提供許多第三方的庫和豐富的培訓資料,以及其他一些優勢,可以加速你的項目進度。但如果你的項目是針對 2G 網路用戶的,React 還會是最佳的選擇嗎?答案也許是否定的。

判斷哪一種框架會工作得最好最終都取決於項目需求,以及構建項目的團隊。希望本文所展示的結果能夠給讀者的思考帶來一些源泉。

Browser Insight 是一個基於真實用戶的 Web 前端性能監控平臺,能夠幫大家定位網站性能瓶頸,網站加速效果可視化;支持瀏覽器、微信、App 瀏覽 HTML 和 HTML5 頁面。想閱讀更多技術文章,請訪問 OneAPM 官方技術博客

來源:http://blog.oneapm.com/apm-tech/806.html


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1:定義:javascript是一種弱類型、動態類型、解釋型的腳本語言。 弱類型:類型檢查不嚴格,偏向於容忍隱式類型轉換。 強類型:類型檢查嚴格,偏向於不容忍隱式類型轉換。 動態類型:運行的時候執行類型檢查。 靜態類型:編譯的時候就知道每個變數的類型。 解釋型:程式不需要編譯,程式在運行的時候才翻譯 ...
  • 本篇導航: 介紹與安裝 vue常用指令 一、介紹與安裝 vue是一套構建用戶界面的JAVASCRIPT框架。與其它大型框架不同的是,Vue 被設計為可以自底向上逐層應用。Vue 的核心庫只關註視圖層,不僅易於上手,還便於與第三方庫或既有項目整合。 1、安裝 下載vue.js:https://cn.v ...
  • js原生輪播 今天用js做了輪播圖,做的不怎麼好,希望大家能夠看懂。 效果: 1.滑鼠放在輪播圖上自動停止 2.滑鼠離開輪播圖自動播放 3.滑鼠點擊輪播圖上的小圓點跳轉到相應的圖上。 代碼: 輪播就到這裡了,裡面還有自己封裝的函數,就使用了標簽,類名,id獲取。 ...
  • 1、勾選“禁用模板預設CSS” 2、將下麵代碼粘貼到“頁面定製CSS代碼”部分 ...
  • 代碼: 自封裝js: 描述:可以根據放入的圖片大小自動適應大小,輪播圖下方會有小縮略圖 ...
  • - 之前給公司做的一個小型知識庫管理網站時遇到一個問題,在這裡記錄下解決的過程。 公司的美工要求首頁導航菜單 要跟他們公司的網站風格保持一致,如圖所示 (子菜單是平鋪的) 我一看,心想很簡單嘛 先貼一下通用菜單html結構 <li> <a href="" class="abc">熱設計</a> <u ...
  • Anagrams of string(帶有重覆項) 使用遞歸。對於給定字元串中的每個字母,為字母創建字謎。使用map()將字母與每部分字謎組合,然後使用reduce()將所有字謎組合到一個數組中,最基本情況是字元串長度等於2或1。 const anagrams = str => { if (str. ...
  • JS排序之快速排序 一個數組中的數據,選擇索引為(2/數組長度)的那個數據作為基數,數組中的其他數據與它對比,比它數值小的放在做數組,比它數值大的放在右數組,最後組合 左數組+基數+右數組,其中,左數組和右數組再調該方法,也就是遞歸調用,當數組長度小於2時,停止。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...