色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Web前端性能優化思路

innswaiter ? 來源:未知 ? 作者:van ? 2022-10-18 14:21 ? 次閱讀

本文旨在整理常見Web前端性能優化的思路,可供前端開發參考。因為力求精簡,限于篇幅,所以并未詳述具體實施方案。

基于現代Web前端框架的應用,其原理是通過瀏覽器向服務器發送網絡請求,獲取必要的index.html和打包好的JS、CSS等資源,在瀏覽器內執行JS,動態獲取數據并渲染頁面,從而將結果呈現給用戶。

在這個過程中,有兩個步驟可能較為耗時,一個是網絡資源的加載,另一個是瀏覽器內代碼執行和DOM渲染。

而耗時的增加會導致頁面響應慢,卡頓,影響用戶體驗。

針對上述兩種耗時的情況,常見的優化方向有:

  1. 縮短請求耗時;
  2. 減少重排重繪;
  3. 改善JS性能。

1 縮短請求耗時

網絡資源是Web應用運行的基礎,改善網絡資源加載速度會顯著改善前端性能。

1.1 優化打包資源

總體原則:減少或延遲模塊引用,以減少網絡負荷。

常用工具:

常用方法:

  • 減小體積:減少非必要的import;壓縮JS代碼;配置服務器gzip等;使用WebP圖片;
  • 按需加載:可根據“路由”、“是否可見”按需加載JS代碼,減少初次加載JS體積。比如可以使用import()進行代碼分割,按需加載;
  • 分開打包:利用瀏覽器緩存機制,依據模塊更新頻率分層打包。

其他方法:

  • 雪碧圖:每個HTTP/1.1請求都是獨立的TCP連接,最大6個并發,所以合并圖片資源可以優化加載速度。HTTP/2已經不需要這么做了。

1.2 CDN加速

總體原則:通過分布式的邊緣網絡節點,縮短資源到終端用戶的訪問延遲。
常用工具:

常用方法:

  • 加速圖片、視頻等大體積文件

1.3 瀏覽器緩存

總體原則:避免重復傳輸相同的數據,節省網絡帶寬,加速資源獲取。

常用方法:
可以通過設置HTTP Header來控制緩存策略,一般有如下幾種。

  • 強緩存

    • Expires:HTTP/1.0
    • Cache-Control:HTTP/1.1
  • 協商緩存

    • ETag+If-None-Match
    • Last-Modified+If-Modified-Since

ETag舉例,如果瀏覽器給的If-None-Match值與服務端給的ETag值相等,服務器就直接返回304,從而避免重復傳輸數據。

ETag示例:

如果幾個配置同時存在,則優先級為:Cache-Control>Expires>ETag>Last-Modified。

1.4 更高版本的HTTP

總體原則:使用高版本HTTP提升性能。

常用工具:

  • HTTP/2

HTTP/2較HTTP/1.1最大的改進在于:

  • 多路復用:單一TCP連接,多HTTP請求,有Demo
  • 頭部壓縮:減少HTTP頭體積;
  • 請求優先級:優先獲取重要的數據;
  • 服務端推送:主動推送CSS等靜態資源。

其他方法:

  • HTTP/3

HTTP/3基于UDP,有很多方面的性能改進,如多路復用無隊頭阻塞,響應更快。感興趣的同學可參考Wiki。

1.5 Web Socket

總體原則:解決HTTP協議無法實時通信的問題。

Web Socket是一條有狀態的TCP長連接,用于實現實時通信、實時響應。

1.6 服務器端渲染(SSR)

總體原則:第一次訪問時,服務器端直接返回渲染好的頁面。

一般流程:

  • 瀏覽器向 URL 發送請求;
  • 服務器端返回“空白”index.html;
  • 瀏覽器不能呈現頁面,需要繼續下載依賴;
  • 加載所有腳本后,組件才能被渲染。

SSR流程:

  • 瀏覽器向 URL 發送請求;
  • 服務器端執行JS完成首屏渲染并返回;
  • 瀏覽器直接呈現頁面,然后繼續下載其他依賴;
  • 加載所有腳本后,組件將再次在客戶端呈現。它將對現有View進行合并。

常用工具:

  • Node.js,用于服務器端執行代碼,輸出HTML給瀏覽器,支持所有主流前端框架
  • Next.js,用于服務器端渲染React的框架
  • gatsby,用React生成靜態網站的工具

除了可以提升頁面用戶體驗,還能應用于SEO。

2 減少重排重繪

除了網絡資源以外,另一個影響前端性能的因素就是前端頁面的渲染繪制效率。

雖然不同的前端框架有一些差異,但整體的優化思路是一致的,這里將以React舉例。

2.1 減少渲染量

總體原則:不渲染未展示的部分。

常用工具:

  • react-window
  • react-loadable
  • JS原生,如IntersectionObserver
  • 框架提供,如React.lazy、react-intersection-observer

常用方法:

  • 虛擬列表:只渲染可見區;
  • 惰性加載:無限滾動;
  • 按需加載:頁面只在切換過去時才加載。

以虛擬列表舉例,以下是使用react-window庫,僅僅渲染了可見區的數據:

2.2 減少渲染次數

總體思路:避免重復的渲染。

常用工具:

  • lodash
  • JS或框架自帶

常用方法:

  • 防抖與節流;
  • 對于React函數組件來說,合理使用副作用,拆分無關聯的副作用;
  • 對于React類組件來說,可以使用shouldComponentUpdate或使用PureComponent來優化渲染;
  • 利用緩存,如React.memo;
  • 使用requestAnimationFrame替代setInterval執行動畫。

3 改善JS性能

因為瀏覽器是單線程異步模型,長時間的運算會阻塞渲染過程,所以改善復雜運算有助于改善前端的整體性能。

3.1 緩存復雜計算

總體思路:避免重復計算。

常用方法:

  • 對于React函數組件來說,可以使用useMemo緩存復雜計算值。

舉例如下,memoizedValue需要經過復雜計算才能得到,此時就可以使用useMemo緩存,僅僅在輸入參數發生變化時才重新計算,避免計算阻塞頁面渲染,從而避免頁面卡頓。


1const MyFunctionalComponent = () => {
2 const memoizedValue = useMemo(() => {
3   computeExpensiveValue(a, b);
4 }, [a, b]);
5
6 return ;
7}

useMemo自身也有性能消耗,需要視情況使用,某些場景可以利用React的渲染機制避免性能問題,可以參考《Before You memo()》

3.2 Web Worker

總體原則:多線程思想。

常用方法:

  • Dedicated Workers,處理與UI無關的密集型數學計算:大數據集合排序、數據壓縮、音視頻處理;
  • Service Worker,服務端推送,或者PWA中配合CacheStorage在前端控制緩存資源;
  • Shared Worker,Tab間通信。

JS語言在設計之初就是單線程異步模型,好處是可以高效處理I/O操作,但壞處是無法利用多核CPU。

Web Worker會啟動系統級別的線程,可進行多線程編程,發揮多核的性能。

3.3 Web Assembly

總體原則:將復雜的計算邏輯編譯為Web Assembly,避免JS類型推斷過程中的性能開銷,可用于性能的極限優化。

適用范圍有限:

曾在網上看到,有人使用自頂向下非優化的斐波那契數列算法來舉例,說Web Assembly比原生JS快一倍,實測之后似乎也沒有。

在同一臺機器測試,其中求第48個值的耗時如下:

  • C(Ubuntu+GCC):18s
  • JS(V8):32s
  • Web Assembly(V8+EMCC):39s

一種可能的猜想是,斐波那契計算中沒有大量的類型推斷,而且V8內部有一些優化機制,使得此處JS執行速度快于Web Assembly。

簡而言之,并非所有場景都適用于Web Assembly。

另一種運用場景是,把不同語言編寫的代碼(C/C++/Java等)編譯為Web Assembly,能以接近原生的速度在Web中運行,并且與JS共存。

總結

導致前端性能問題的因素是多方面的。

如果是前端資源加載慢,導致頁面慢,則應該考慮如何縮短請求耗時。而如果是前端頁面邏輯笨重,UI數據量太大,則可以試著從減少重排重繪的角度去優化。對于耗時長的復雜計算,緩存計算結果往往是見效較快的優化方式。

最后需要注意的是,在實際應用開發過程中,因為受限于開發成本,所以需要平衡優化所花的代價與其對應產生的成效??梢杂嗅槍π缘貙π阅芷款i進行分析和處理,同時也需要避免引入不必要的優化措施,以確保最終優化效果。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 性能
    +關注

    關注

    0

    文章

    271

    瀏覽量

    18981
收藏 人收藏

    評論

    相關推薦

    SSM框架的性能優化技巧 SSM框架中RESTful API的實現

    SSM框架的性能優化技巧 SSM(Spring + Spring MVC + MyBatis)框架的性能優化是提升Java Web應用
    的頭像 發表于 12-17 09:10 ?109次閱讀

    HarmonyOS Web開發性能優化指導

    的影響因素以及對應的優化方案。 二、Web頁面加載性能優化指導 (一)Web頁面加載流程 Web
    發表于 12-06 08:41

    HarmonyOS Web頁面加載的原理和優化方法

    在移動互聯網時代,應用的頁面渲染速度對于用戶體驗至關重要。相對于原生頁面,Web頁面的性能存在多方面的技術挑戰。本文以HarmonyOS的ArkWeb組件為基礎,介紹了Web頁面加載中的影響因素以及對應的
    的頭像 發表于 12-05 15:14 ?203次閱讀
    HarmonyOS <b class='flag-5'>Web</b>頁面加載的原理和<b class='flag-5'>優化</b>方法

    簡述大前端技術棧的渲染原理

    作者:京東物流 盧旭 大前端包括哪些技術棧 大前端指的是涵蓋所有與前端開發相關的技術和平臺,應用于各類設備和操作系統上。大前端不僅包括Web
    的頭像 發表于 11-07 10:11 ?204次閱讀

    優化 LCR 表前端設計以實現精確的阻抗測量

    電子發燒友網站提供《優化 LCR 表前端設計以實現精確的阻抗測量.pdf》資料免費下載
    發表于 09-13 10:41 ?0次下載
    <b class='flag-5'>優化</b> LCR 表<b class='flag-5'>前端</b>設計以實現精確的阻抗測量

    一款3605電源芯片的性能優化與改進思路

    在電源設計中,確保電源轉換器在各種工作條件下都能提供穩定和高效的性能至關重要。 ASP3605是一款高效同步降壓轉換器,它提供了多種調節選項,以優化電源的性能。特別是,ITH(Error
    發表于 08-23 14:34

    鴻蒙原生應用元服務開發WEB-使用Devtools工具調試前端頁面

    Web組件支持使用DevTools工具調試前端頁面。DevTools是一個 Web前端開發調試工具,提供了電腦上調試移動設備前端頁面的能力。
    發表于 05-21 15:59

    鴻蒙原生應用元服務開發-Web應用側調用前端頁面函數

    應用側可以通過runJavaScript()方法調用前端頁面的JavaScript相關函數。 在下面的示例中,點擊應用側的“runJavaScript”按鈕時,來觸發前端頁面的htmlTest
    發表于 05-11 15:31

    鴻蒙原生應用元服務開發-Web相關說明

    Web組件用于在應用程序中顯示Web頁面內容,為開發者提供頁面加載、頁面交互、頁面調試等能力。 頁面加載:Web組件提供基礎的前端頁面加載的能力,包括加載網絡頁面、本地頁面、Html格
    發表于 05-10 15:03

    鴻蒙原生應用元服務開發-Web設置深色模式

    Web組件支持對前端頁面進行深色模式配置。 通過darkMode()接口可以配置不同的深色模式,WebDarkMode.Off模式表示關閉深色模式。WebDarkMode.On表示開啟深色模式,并且
    發表于 05-09 15:37

    鴻蒙原生應用元服務開發-Web上傳文件

    Web組件支持前端頁面選擇文件上傳功能,應用開發者可以使用onShowFileSelector()接口來處理前端頁面文件上傳的請求。 下面的示例中,當用戶在前端頁面點擊文件上傳按鈕,應
    發表于 05-08 11:17

    鴻蒙原生應用元服務開發-Web前端頁面調用應用側函數

    開發者使用Web組件將應用側代碼注冊到前端頁面中,注冊完成之后,前端頁面中使用注冊的對象名稱就可以調用應用側的函數,實現在前端頁面中調用應用側方法。 注冊應用側代碼有兩種方式,一種在
    發表于 05-07 15:03

    鴻蒙原生應用元服務開發-Web建立應用側與前端頁面數據通道

    ,再把其中一個端口通過postMessage()接口發送到前端頁面,便可以在前端頁面和應用側之間互相發送消息。 應用側代碼。 // xxx.ets import web_webview from
    發表于 05-06 14:32

    模擬前端芯片的差異分析

    模擬前端芯片,作為電子設備中的關鍵組件,承擔著將模擬信號轉換為數字信號的重要任務。然而,由于應用場景、設計思路、工藝技術等因素的不同,市面上的模擬前端芯片存在著諸多差異。本文將從功能、性能
    的頭像 發表于 03-16 15:22 ?868次閱讀

    web前端開發和前端開發的區別

    、CSS和JavaScript等技術來構建用戶界面,實現用戶與應用程序的交互。Web前端開發包括網頁設計、網頁編碼、前端框架使用以及優化頁面性能
    的頭像 發表于 01-18 09:54 ?3499次閱讀
    主站蜘蛛池模板: 91嫩草私人成人亚洲影院| 亚洲毛片网| 翁用力的抽插| 午夜伦理电影在线观免费| 亚洲高清视频在线| 伊人情人网综合| 91九色视频无限观看免费| x8国产精品视频| 国产精品久久久精品日日| 精品国产99久久久久久麻豆| 久久伊人免费| 強姧伦久久久久久久久| 无码一区二区在线欧洲| 亚洲免费视频在线观看| 最新在线黄色网址| 边做边爱免费视频播放| 国产在线高清视频| 美女的隐私蜜桃传媒免费看| 色99蜜臀AV无码| 亚洲日本欧美日韩高观看| 99热这里精品| 国产亚洲精品黑人粗大精选| 老板揉搓秘书丰满大乳| 日韩人妻无码精品-专区| 亚洲日本va中文字幕久久| 97人妻久久久精品系列A片| 国产成人精品永久免费视频| 久久国产主播福利在线| 秋霞电影网午夜免费鲁丝片| 亚洲国产综合另类视频| 99re5.久久热在线视频| 国产精品一区二区人妻无码| 伦理片92伦理午夜| 乌克兰xxxxx| 91羞羞视频| 国产树林野战在线播放| 暖暖日本 在线 高清| 亚洲AV无码一区二区色情蜜芽 | 4480YY旧里番在线播放| 国产成人综合在线观看| 两个洞一起插哦!好刺激|