91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Web前端性能優(yōu)化思路

innswaiter ? 來源:未知 ? 作者:van ? 2022-10-18 14:21 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

本文旨在整理常見Web前端性能優(yōu)化的思路,可供前端開發(fā)參考。因?yàn)榱η缶?,限于篇幅,所以并未詳述具體實(shí)施方案。

基于現(xiàn)代Web前端框架的應(yīng)用,其原理是通過瀏覽器向服務(wù)器發(fā)送網(wǎng)絡(luò)請求,獲取必要的index.html和打包好的JS、CSS等資源,在瀏覽器內(nèi)執(zhí)行JS,動態(tài)獲取數(shù)據(jù)并渲染頁面,從而將結(jié)果呈現(xiàn)給用戶。

在這個過程中,有兩個步驟可能較為耗時,一個是網(wǎng)絡(luò)資源的加載,另一個是瀏覽器內(nèi)代碼執(zhí)行和DOM渲染。

而耗時的增加會導(dǎo)致頁面響應(yīng)慢,卡頓,影響用戶體驗(yàn)。

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

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

1 縮短請求耗時

網(wǎng)絡(luò)資源是Web應(yīng)用運(yùn)行的基礎(chǔ),改善網(wǎng)絡(luò)資源加載速度會顯著改善前端性能。

1.1 優(yōu)化打包資源

總體原則:減少或延遲模塊引用,以減少網(wǎng)絡(luò)負(fù)荷。

常用工具:

常用方法:

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

其他方法:

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

1.2 CDN加速

總體原則:通過分布式的邊緣網(wǎng)絡(luò)節(jié)點(diǎn),縮短資源到終端用戶的訪問延遲。
常用工具:

常用方法:

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

1.3 瀏覽器緩存

總體原則:避免重復(fù)傳輸相同的數(shù)據(jù),節(jié)省網(wǎng)絡(luò)帶寬,加速資源獲取。

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

  • 強(qiáng)緩存

    • Expires:HTTP/1.0
    • Cache-Control:HTTP/1.1
  • 協(xié)商緩存

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

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

ETag示例:

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

1.4 更高版本的HTTP

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

常用工具:

  • HTTP/2

HTTP/2較HTTP/1.1最大的改進(jìn)在于:

  • 多路復(fù)用:單一TCP連接,多HTTP請求,有Demo
  • 頭部壓縮:減少HTTP頭體積;
  • 請求優(yōu)先級:優(yōu)先獲取重要的數(shù)據(jù);
  • 服務(wù)端推送:主動推送CSS等靜態(tài)資源。

其他方法:

  • HTTP/3

HTTP/3基于UDP,有很多方面的性能改進(jìn),如多路復(fù)用無隊頭阻塞,響應(yīng)更快。感興趣的同學(xué)可參考Wiki

1.5 Web Socket

總體原則:解決HTTP協(xié)議無法實(shí)時通信的問題。

Web Socket是一條有狀態(tài)的TCP長連接,用于實(shí)現(xiàn)實(shí)時通信、實(shí)時響應(yīng)。

1.6 服務(wù)器端渲染(SSR)

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

一般流程:

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

SSR流程:

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

常用工具:

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

除了可以提升頁面用戶體驗(yàn),還能應(yīng)用于SEO。

2 減少重排重繪

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

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

2.1 減少渲染量

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

常用工具:

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

常用方法:

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

以虛擬列表舉例,以下是使用react-window庫,僅僅渲染了可見區(qū)的數(shù)據(jù):

2.2 減少渲染次數(shù)

總體思路:避免重復(fù)的渲染。

常用工具:

  • lodash
  • JS或框架自帶

常用方法:

  • 防抖與節(jié)流;
  • 對于React函數(shù)組件來說,合理使用副作用,拆分無關(guān)聯(lián)的副作用;
  • 對于React類組件來說,可以使用shouldComponentUpdate或使用PureComponent來優(yōu)化渲染;
  • 利用緩存,如React.memo;
  • 使用requestAnimationFrame替代setInterval執(zhí)行動畫。

3 改善JS性能

因?yàn)闉g覽器是單線程異步模型,長時間的運(yùn)算會阻塞渲染過程,所以改善復(fù)雜運(yùn)算有助于改善前端的整體性能。

3.1 緩存復(fù)雜計算

總體思路:避免重復(fù)計算。

常用方法:

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

舉例如下,memoizedValue需要經(jīng)過復(fù)雜計算才能得到,此時就可以使用useMemo緩存,僅僅在輸入?yún)?shù)發(fā)生變化時才重新計算,避免計算阻塞頁面渲染,從而避免頁面卡頓。


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

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

3.2 Web Worker

總體原則:多線程思想。

常用方法:

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

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

Web Worker會啟動系統(tǒng)級別的線程,可進(jìn)行多線程編程,發(fā)揮多核的性能。

3.3 Web Assembly

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

適用范圍有限:

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

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

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

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

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

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

總結(jié)

導(dǎo)致前端性能問題的因素是多方面的。

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

最后需要注意的是,在實(shí)際應(yīng)用開發(fā)過程中,因?yàn)槭芟抻陂_發(fā)成本,所以需要平衡優(yōu)化所花的代價與其對應(yīng)產(chǎn)生的成效。可以有針對性地對性能瓶頸進(jìn)行分析和處理,同時也需要避免引入不必要的優(yōu)化措施,以確保最終優(yōu)化效果。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 性能
    +關(guān)注

    關(guān)注

    0

    文章

    276

    瀏覽量

    19671
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    Linux系統(tǒng)性能優(yōu)化與調(diào)試的思路?

    在開發(fā)過程中,對系統(tǒng)性能的要求越來越高,在求職的過程中很多崗位不單單是要求驅(qū)動開發(fā)或者系統(tǒng)開發(fā),會解決系統(tǒng)性能瓶頸問題,往往是加分項(xiàng),有些公司特別是大廠都會把性能優(yōu)化單獨(dú)劃分一個崗位。
    的頭像 發(fā)表于 01-30 16:58 ?612次閱讀
    Linux系統(tǒng)<b class='flag-5'>性能</b><b class='flag-5'>優(yōu)化</b>與調(diào)試的<b class='flag-5'>思路</b>?

    AFE5808A 超聲模擬前端技術(shù)文檔總結(jié)

    。該設(shè)備還允許用戶選擇多種功率和噪聲組合之一 優(yōu)化系統(tǒng)性能。因此,AFE5808A是出色的超聲模擬前端 解決方案不僅適用于高端系統(tǒng),也適用于便攜式系統(tǒng)。
    的頭像 發(fā)表于 11-18 11:38 ?889次閱讀
    AFE5808A 超聲模擬<b class='flag-5'>前端</b>技術(shù)文檔總結(jié)

    AFE5807 超聲模擬前端技術(shù)文檔總結(jié)

    選擇多種功率/噪聲組合之一,以優(yōu)化系統(tǒng)性能。 因此,AFE5807不僅適用于高端,是超聲模擬前端的合適解決方案 系統(tǒng),也適用于便攜式系統(tǒng)。
    的頭像 發(fā)表于 11-18 11:08 ?830次閱讀
    AFE5807 超聲模擬<b class='flag-5'>前端</b>技術(shù)文檔總結(jié)

    AFE5803 8 通道超聲模擬前端總結(jié)

    該AFE5803是一種高度集成的模擬前端 (AFE) 解決方案,專為需要高性能和小尺寸的超聲系統(tǒng)而設(shè)計。該AFE5803集成了完整的時間增益控制 (TGC) 成像路徑。它還使用戶能夠選擇各種功率/噪聲組合之一,以優(yōu)化系統(tǒng)
    的頭像 發(fā)表于 11-17 17:05 ?919次閱讀
    AFE5803 8 通道超聲模擬<b class='flag-5'>前端</b>總結(jié)

    Coremark測試集分析與性能優(yōu)化思路

    實(shí)際上暴露了編譯器優(yōu)化工作負(fù)載的能力,而不是MCU或CPU的功能”的問題。因此要創(chuàng)建不能在編譯時計算而必須在運(yùn)行時計算的工作,因此coreMark 在嵌入式領(lǐng)域被認(rèn)為比 Dhrystone 更加具有
    發(fā)表于 10-24 08:21

    云原生環(huán)境里Nginx的故障排查思路

    本文聚焦于云原生環(huán)境下Nginx的故障排查思路。隨著云原生技術(shù)的廣泛應(yīng)用,Nginx作為常用的高性能Web服務(wù)器和反向代理服務(wù)器,在容器化和編排的環(huán)境中面臨著新的故障場景和挑戰(zhàn)。
    的頭像 發(fā)表于 06-17 13:53 ?959次閱讀
    云原生環(huán)境里Nginx的故障排查<b class='flag-5'>思路</b>

    鴻蒙5開發(fā)寶藏案例分享---Grid性能優(yōu)化案例

    ;懶加載! ?個人心得 鴻蒙的文檔里其實(shí)埋了不少“性能寶藏”,這個案例就是典型——****用計算代替遍歷的思路,在拖拽列表、瀑布流等場景都能復(fù)用。開發(fā)時多留意社區(qū)案例,能少踩很多坑! 如果你有其他Grid的優(yōu)化技巧,歡迎在評論區(qū)
    發(fā)表于 06-12 17:47

    鴻蒙5開發(fā)寶藏案例分享---長列表性能優(yōu)化解析

    鴻蒙長列表性能優(yōu)化大揭秘!告別卡頓,實(shí)戰(zhàn)代碼解析來了! 大家好呀~今天在翻鴻蒙開發(fā)者文檔時,發(fā)現(xiàn)了個 性能優(yōu)化寶藏案例 !官方居然悄悄放出了長列表卡頓的完整解決方案,實(shí)測效果炸裂!我連
    發(fā)表于 06-12 17:40

    鴻蒙5開發(fā)寶藏案例分享---Web開發(fā)優(yōu)化案例分享

    ,重點(diǎn)講講那些能立竿見影的優(yōu)化手段,配上代碼講解,包你學(xué)完就能用! 正文詳解(案例+講解+代碼): 官方文檔里把Web加載流程拆得很細(xì),提出了基于“ 預(yù)處理 **”思想的一系列優(yōu)化手段。核心
    發(fā)表于 06-12 17:20

    鴻蒙5開發(fā)寶藏案例分享---Web加載時延優(yōu)化解析

    鴻蒙開發(fā)寶藏:Web加載完成時延優(yōu)化實(shí)戰(zhàn) 大家好呀!今天在翻鴻蒙開發(fā)者文檔時,發(fā)現(xiàn)了一個隱藏的 性能優(yōu)化寶藏區(qū) ——官方竟然悄悄提供了超多實(shí)戰(zhàn)案例!尤其是****
    發(fā)表于 06-12 17:11

    鴻蒙5開發(fā)寶藏案例分享---Web頁面內(nèi)點(diǎn)擊響應(yīng)時延分析

    鴻蒙Web性能優(yōu)化寶藏指南!那些官方?jīng)]明說的實(shí)戰(zhàn)技巧 各位鴻蒙開發(fā)者好!最近在排查Web頁面卡頓時,意外在HarmonyOS開發(fā)者文檔里挖到性能
    發(fā)表于 06-12 17:09

    鴻蒙5開發(fā)寶藏案例分享---性能優(yōu)化案例解析

    鴻蒙性能優(yōu)化寶藏指南:實(shí)戰(zhàn)工具與代碼案例解析 大家好呀!今天在翻鴻蒙開發(fā)者文檔時,意外挖到一個 性能優(yōu)化寶藏庫 ——原來官方早就提供了超多實(shí)用工具和案例,但很多小伙伴可能沒發(fā)現(xiàn)!這篇就
    發(fā)表于 06-12 16:36

    Cadence Conformal AI Studio助力前端驗(yàn)證設(shè)計

    Cadence 推出最新的前端驗(yàn)證設(shè)計方案 Conformal AI Studio,專為解決日益復(fù)雜的前端設(shè)計挑戰(zhàn)而打造,旨在提升設(shè)計人員的工作效率,進(jìn)而優(yōu)化全流程功耗、效能和面積(PPA)等設(shè)計目標(biāo)。
    的頭像 發(fā)表于 06-04 11:16 ?1807次閱讀

    HarmonyOS優(yōu)化應(yīng)用內(nèi)存占用問題性能優(yōu)化

    應(yīng)用開發(fā)過程中注重內(nèi)存管理,積極采取措施來減少內(nèi)存占用,以優(yōu)化應(yīng)用程序的性能和用戶體驗(yàn)。 HarmonyOS提供了一些內(nèi)存管理的工具和接口,幫助開發(fā)者有效地管理內(nèi)存資源: onMemoryLevel接口
    發(fā)表于 05-21 11:27

    「極速探索HarmonyOS NEXT 」閱讀體驗(yàn)】+Web組件

    web web應(yīng)用是基于 Web技術(shù)(如HTML、CSS、JavaScript),構(gòu)建在瀏覽器中運(yùn)行的應(yīng)用,亦稱為前端開發(fā)。從用戶視角來看,手機(jī)和平板上的應(yīng)用多由原生開發(fā)打造;而通過瀏
    發(fā)表于 03-10 10:39