React的受歡迎程度並非沒有批評者。該框架的相當大的尺寸(約120 kib縮小)顯著影響啟動時間,尤其是僅依靠客戶端渲染時。即使使用客戶端水合的服務器端渲染也仍然是性能密集的。儘管React在復雜的州管理中表現出色,但其資源需求通常超過更簡單的應用程序中的好處。這可以有效地排除使用功能較低的硬件的用戶。
儘管我保留了React的性能開銷,但我還是感謝其組件化模型和JSX語法。服務器端渲染(或使用preact,我首選的替代方案)仍然是寶貴的資產。但是,確定適當的客戶端用法仍然是一個挑戰。本文詳細介紹了我有關優化React性能的發現,以獲得更好的用戶體驗。
上下文:RSS提要應用程序
我的rss feed應用程序bylines.fyi
在服務器和客戶端都使用JavaScript。雖然我並不固有地不喜歡客戶端框架,但我的經驗突出了兩個反復出現的問題:
- 框架可以掩蓋基礎的網絡平台,從而阻礙對它們何時真正有益的深刻理解。
- 框架並不總是保證最佳用戶體驗。
蒂姆·卡德克(Tim Kadlec)對Web框架性能的Httparchive研究加劇了這些問題,揭示了React的表現不佳。我的目標是在減輕其客戶端缺陷的同時利用React的服務器端優勢。
實驗:移動導航切換
我的RSS應用需要客戶端的JavaScript來進行簡單的移動導航切換,這是“簡單狀態”的經典示例。我經常看到反應組件過度用於此類簡單任務,從而導致不必要的性能開銷。該實驗雖然看似瑣碎,但它是了解框架選擇如何擴展的關鍵基準。重要的是要注意,大多數開發人員不僅會依靠這種次要功能的反應,但是結果說明了對運行時性能的架構影響。
測試條件
該實驗比較了四個設備上的三個移動導航實現:
- 狀態反應組件:服務器渲染和客戶端熔融。
- 狀態的預先反應組件:服務器渲染和客戶端水合。
- 無狀態的提前部分:服務器渲染,未水合;使用標準事件聽眾。
設備包括:
- 諾基亞2 Android電話(Chrome 83)
- 華碩X550CC筆記本電腦(Windows 10,Chrome 83)
- 第一代iPhone SE(Safari 13)
- 第二代iPhone SE(Safari 13)
指標
為每個實施和設備測量了以下指標:
- 啟動時間:包括框架加載和水合(react/preaxct),或者只是事件偵聽器代碼(EventListener)。
- 水合時間:啟動時間的子集(僅反應/預先反應)。
- 移動導航開放時間:在事件處理中測量框架開銷。
方法論
測試涉及遠程調試和分析,每個場景和設備的十個迭代記錄了每個度量的CPU時間。網絡性能不是一個因素。
結果
由於數據的複雜性,結果以表格格式顯示,顯示最小,最大,中值和平均CPU時間。 (詳細的表格在隨附的電子表格中可用)。關鍵發現包括:
- React的高創業和水合成本:在低端諾基亞2上尤其明顯。
- PREACT的提高性能:比React的速度要快得多,但在諾基亞2上仍超出了理想的框架預算。
- 卓越的事件聽眾的性能:始終比React和Exct都要快,尤其是對於簡單的互動。
討論:淺呼叫堆棧
性能差異源於框架加載和水合的開銷。儘管某些性能權衡是不可避免的,但對於開發人員的便利性而言,餘額通常會傾向於開發人員的體驗,而用戶則以犧牲用戶為代價。呼叫堆棧的React和PreACT Hydration突出了重大處理需求,尤其是對於簡單的任務。使用本地事件偵聽器為簡單的狀態管理提供了一種更有效的方法。
結論和建議
這種分析不是作為反應批評的,而是鼓勵批判性評估框架選擇及其性能的影響。幾種策略可以減輕績效問題:
- 在可能的情況下,對無狀態組件的重構狀態組件。
- 避免客戶端的JavaScript和無狀態組件的水合。
- 使用獨立於框架的事件聽眾進行簡單的交互。
- 懶惰的水合物組件使用相交觀察者或
requestIdleCallback
。 - 將預先反應視為反應的更快替代方法。
- 使用
navigator.deviceMemory
適應低內存設備的用戶體驗。
優先考慮各種設備的性能測試,以確保具有不同硬件功能的用戶包容性。目標應該是每個人的快速訪問的網絡體驗。
特別感謝埃里克·貝利(Eric Bailey)的編輯反饋和CSS-Tricks員工發表本文。
以上是RadeVentListener:客戶端框架性能的故事的詳細內容。更多資訊請關注PHP中文網其他相關文章!

文章討論了CSS FlexBox,這是一種佈局方法,用於有效地對齊和分佈響應設計中的空間。它說明了FlexBox用法,將其與CSS網格進行了比較,並詳細瀏覽了瀏覽器支持。

本文討論了使用CSS創建響應網站的技術,包括視口元標籤,靈活的網格,流體媒體,媒體查詢和相對單元。它還涵蓋了使用CSS網格和Flexbox一起使用,並推薦CSS框架

本文討論了CSS盒裝屬性,該屬性控制了元素維度的計算方式。它解釋了諸如Content-Box,Border-Box和Padding-Box之類的值,以及它們對佈局設計和形式對齊的影響。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

WebStorm Mac版
好用的JavaScript開發工具

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

禪工作室 13.0.1
強大的PHP整合開發環境

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能