在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

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

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

innswaiter ? 來(lái)源:未知 ? 作者:van ? 2022-10-18 14:21 ? 次閱讀

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

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

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

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

針對(duì)上述兩種耗時(shí)的情況,常見(jiàn)的優(yōu)化方向有:

  1. 縮短請(qǐng)求耗時(shí);
  2. 減少重排重繪;
  3. 改善JS性能。

1 縮短請(qǐng)求耗時(shí)

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

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

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

常用工具:

常用方法:

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

其他方法:

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

1.2 CDN加速

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

常用方法:

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

1.3 瀏覽器緩存

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

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

  • 強(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示例:

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

1.4 更高版本的HTTP

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

常用工具:

  • HTTP/2

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

  • 多路復(fù)用:?jiǎn)我籘CP連接,多HTTP請(qǐng)求,有Demo
  • 頭部壓縮:減少HTTP頭體積;
  • 請(qǐng)求優(yōu)先級(jí):優(yōu)先獲取重要的數(shù)據(jù);
  • 服務(wù)端推送:主動(dòng)推送CSS等靜態(tài)資源。

其他方法:

  • HTTP/3

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

1.5 Web Socket

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

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

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

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

一般流程:

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

SSR流程:

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

常用工具:

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

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

2 減少重排重繪

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

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

2.1 減少渲染量

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

常用工具:

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

常用方法:

  • 虛擬列表:只渲染可見(jiàn)區(qū);
  • 惰性加載:無(wú)限滾動(dòng);
  • 按需加載:頁(yè)面只在切換過(guò)去時(shí)才加載。

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

2.2 減少渲染次數(shù)

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

常用工具:

  • lodash
  • JS或框架自帶

常用方法:

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

3 改善JS性能

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

3.1 緩存復(fù)雜計(jì)算

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

常用方法:

  • 對(duì)于React函數(shù)組件來(lái)說(shuō),可以使用useMemo緩存復(fù)雜計(jì)算值。

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


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

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

3.2 Web Worker

總體原則:多線程思想。

常用方法:

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

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

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

3.3 Web Assembly

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

適用范圍有限:

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

在同一臺(tái)機(jī)器測(cè)試,其中求第48個(gè)值的耗時(shí)如下:

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

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

簡(jiǎn)而言之,并非所有場(chǎng)景都適用于Web Assembly。

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

總結(jié)

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

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

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

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

    關(guān)注

    0

    文章

    271

    瀏覽量

    19040
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    熱門(mén)前端框架:引領(lǐng)現(xiàn)代 Web 開(kāi)發(fā)的潮流

    在當(dāng)今快速發(fā)展的前端開(kāi)發(fā)領(lǐng)域,熱門(mén)前端框架如 React、Vue 和 Angular 等,成為了開(kāi)發(fā)者構(gòu)建高效、高性能 Web 應(yīng)用的得力工具。它們各自具有獨(dú)特的特點(diǎn)和優(yōu)勢(shì),引領(lǐng)著現(xiàn)代
    的頭像 發(fā)表于 01-22 10:08 ?92次閱讀

    前端性能優(yōu)化:提升用戶(hù)體驗(yàn)的關(guān)鍵策略

    在互聯(lián)網(wǎng)飛速發(fā)展的今天,用戶(hù)對(duì)于網(wǎng)頁(yè)的加載速度和響應(yīng)性能要求越來(lái)越高。前端性能優(yōu)化成為了提升用戶(hù)體驗(yàn)、增強(qiáng)網(wǎng)站競(jìng)爭(zhēng)力的關(guān)鍵策略。一個(gè)性能良好
    的頭像 發(fā)表于 01-22 10:08 ?84次閱讀

    前端的作用

    界面設(shè)計(jì),需要設(shè)計(jì)出直觀、易用且美觀的界面,以吸引和留住用戶(hù)。 用戶(hù)體驗(yàn)優(yōu)化:開(kāi)發(fā)者需要確保應(yīng)用的響應(yīng)速度、流暢度和交互性,以提升用戶(hù)體。 跨平臺(tái)兼容性:需要在不同操作系統(tǒng)和設(shè)備上保持應(yīng)用的一致性和穩(wěn)定性。 性能優(yōu)
    的頭像 發(fā)表于 01-03 14:03 ?113次閱讀

    SSM框架的性能優(yōu)化技巧 SSM框架中RESTful API的實(shí)現(xiàn)

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

    HarmonyOS Web開(kāi)發(fā)性能優(yōu)化指導(dǎo)

    的影響因素以及對(duì)應(yīng)的優(yōu)化方案。 二、Web頁(yè)面加載性能優(yōu)化指導(dǎo) (一)Web頁(yè)面加載流程 Web
    發(fā)表于 12-06 08:41

    HarmonyOS Web頁(yè)面加載的原理和優(yōu)化方法

    在移動(dòng)互聯(lián)網(wǎng)時(shí)代,應(yīng)用的頁(yè)面渲染速度對(duì)于用戶(hù)體驗(yàn)至關(guān)重要。相對(duì)于原生頁(yè)面,Web頁(yè)面的性能存在多方面的技術(shù)挑戰(zhàn)。本文以HarmonyOS的ArkWeb組件為基礎(chǔ),介紹了Web頁(yè)面加載中的影響因素以及對(duì)應(yīng)的
    的頭像 發(fā)表于 12-05 15:14 ?366次閱讀
    HarmonyOS <b class='flag-5'>Web</b>頁(yè)面加載的原理和<b class='flag-5'>優(yōu)化</b>方法

    簡(jiǎn)述大前端技術(shù)棧的渲染原理

    作者:京東物流 盧旭 大前端包括哪些技術(shù)棧 大前端指的是涵蓋所有與前端開(kāi)發(fā)相關(guān)的技術(shù)和平臺(tái),應(yīng)用于各類(lèi)設(shè)備和操作系統(tǒng)上。大前端不僅包括Web
    的頭像 發(fā)表于 11-07 10:11 ?296次閱讀

    優(yōu)化 LCR 表前端設(shè)計(jì)以實(shí)現(xiàn)精確的阻抗測(cè)量

    電子發(fā)燒友網(wǎng)站提供《優(yōu)化 LCR 表前端設(shè)計(jì)以實(shí)現(xiàn)精確的阻抗測(cè)量.pdf》資料免費(fèi)下載
    發(fā)表于 09-13 10:41 ?1次下載
    <b class='flag-5'>優(yōu)化</b> LCR 表<b class='flag-5'>前端</b>設(shè)計(jì)以實(shí)現(xiàn)精確的阻抗測(cè)量

    一款3605電源芯片的性能優(yōu)化與改進(jìn)思路

    在電源設(shè)計(jì)中,確保電源轉(zhuǎn)換器在各種工作條件下都能提供穩(wěn)定和高效的性能至關(guān)重要。 ASP3605是一款高效同步降壓轉(zhuǎn)換器,它提供了多種調(diào)節(jié)選項(xiàng),以優(yōu)化電源的性能。特別是,ITH(Error
    發(fā)表于 08-23 14:34

    鴻蒙原生應(yīng)用元服務(wù)開(kāi)發(fā)WEB-使用Devtools工具調(diào)試前端頁(yè)面

    Web組件支持使用DevTools工具調(diào)試前端頁(yè)面。DevTools是一個(gè) Web前端開(kāi)發(fā)調(diào)試工具,提供了電腦上調(diào)試移動(dòng)設(shè)備前端頁(yè)面的能力。
    發(fā)表于 05-21 15:59

    鴻蒙原生應(yīng)用元服務(wù)開(kāi)發(fā)-Web應(yīng)用側(cè)調(diào)用前端頁(yè)面函數(shù)

    應(yīng)用側(cè)可以通過(guò)runJavaScript()方法調(diào)用前端頁(yè)面的JavaScript相關(guān)函數(shù)。 在下面的示例中,點(diǎn)擊應(yīng)用側(cè)的“runJavaScript”按鈕時(shí),來(lái)觸發(fā)前端頁(yè)面的htmlTest
    發(fā)表于 05-11 15:31

    鴻蒙原生應(yīng)用元服務(wù)開(kāi)發(fā)-Web相關(guān)說(shuō)明

    Web組件用于在應(yīng)用程序中顯示Web頁(yè)面內(nèi)容,為開(kāi)發(fā)者提供頁(yè)面加載、頁(yè)面交互、頁(yè)面調(diào)試等能力。 頁(yè)面加載:Web組件提供基礎(chǔ)的前端頁(yè)面加載的能力,包括加載網(wǎng)絡(luò)頁(yè)面、本地頁(yè)面、Html格
    發(fā)表于 05-10 15:03

    鴻蒙原生應(yīng)用元服務(wù)開(kāi)發(fā)-Web設(shè)置深色模式

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

    鴻蒙原生應(yīng)用元服務(wù)開(kāi)發(fā)-Web前端頁(yè)面調(diào)用應(yīng)用側(cè)函數(shù)

    開(kāi)發(fā)者使用Web組件將應(yīng)用側(cè)代碼注冊(cè)到前端頁(yè)面中,注冊(cè)完成之后,前端頁(yè)面中使用注冊(cè)的對(duì)象名稱(chēng)就可以調(diào)用應(yīng)用側(cè)的函數(shù),實(shí)現(xiàn)在前端頁(yè)面中調(diào)用應(yīng)用側(cè)方法。 注冊(cè)應(yīng)用側(cè)代碼有兩種方式,一種在
    發(fā)表于 05-07 15:03

    模擬前端芯片的差異分析

    模擬前端芯片,作為電子設(shè)備中的關(guān)鍵組件,承擔(dān)著將模擬信號(hào)轉(zhuǎn)換為數(shù)字信號(hào)的重要任務(wù)。然而,由于應(yīng)用場(chǎng)景、設(shè)計(jì)思路、工藝技術(shù)等因素的不同,市面上的模擬前端芯片存在著諸多差異。本文將從功能、性能
    的頭像 發(fā)表于 03-16 15:22 ?948次閱讀
    主站蜘蛛池模板: 视频黄色在线 | 中文天堂最新版资源新版天堂资源 | 99久久精品费精品国产一区二 | 尤物久久99热国产综合 | 久久久噜噜噜久久久 | 在线电影亚洲 | 毛片在线看免费版 | 色午夜视频 | 黄页网址免费观看18网站 | 免费91视频 | 在线综合网| 国产福利乳摇在线播放 | 男人的天堂免费视频 | 日韩一级欧美一级在线观看 | 午夜剧场一级片 | 中文字幕成人乱码在线电影 | 亚洲欧洲色天使日韩精品 | 黄色毛片子 | 国产美女精品一区二区三区 | 1024手机在线看 | 性欧美videofree另类超大 | 五月在线观看 | 特级做a爰片毛片免费看一区 | 国产精品久久久久乳精品爆 | 欧美在线黄 | 免费毛片网站在线观看 | 亚洲小younv另类 | 天天爽视频 | 国产热视频| 国产精品久久久久久久久 | 午夜免费视频观看 | 美女拍拍拍免费视频观看 | 国产逼逼视频 | 国产精品国产三级国产普通话对白 | xxxx日本69xxxxx | 天天干天天色天天 | 深爱五月激情五月 | 色一乱一伦一区一直爽 | 老司机色网 | 久久成人精品免费播放 | 色y情视频免费看 |