最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

前端面試官常問之首屏加載速度慢怎么解決

 更新時間:2026年04月10日 08:33:12   作者:程序員小寒  
前端頁面的首次加載過慢和資源加載順序錯亂是前端性能優(yōu)化與工程化開發(fā)中的高頻核心問題,且二者常伴隨出現(xiàn),這篇文章主要介紹了前端面試官常問之首屏加載速度慢怎么解決的相關(guān)資料,需要的朋友可以參考下

在前端面試中,首屏優(yōu)化一直是常見的前端性能面試題。

我們可以先用 performance 相關(guān)API 來統(tǒng)計下頁面的 DOM 加載時間。

舊版統(tǒng)計方法,使用 performance:

// 舊版統(tǒng)計性能 performance.timing 已廢棄,不推薦使用
window.onload = () => {
  console.log(performance.timing.domComplete - performance.timing.navigationStart);
}

新版統(tǒng)計方法,使用 PerformanceObserver (推薦使用):

// 新版統(tǒng)計性能 推薦使用
window.onload = () => {
  const observer = new PerformanceObserver((list) => {
    list.getEntries().forEach(entry => {
      console.log(entry.domComplete);
    })
  })
  observer.observe({ entryTypes: ['navigation'] })
}

如果 DOM加載時間 過長,比如超過 1s,就需要考慮進行優(yōu)化了,優(yōu)化的話主要從以下幾個方向進行:

  • 網(wǎng)絡(luò)資源請求
  • 構(gòu)建工具
  • 渲染
  • 用戶體驗

一、網(wǎng)絡(luò)資源請求

1.1 減少請求個數(shù)

  • 圖片采用 雪碧圖(CSS Sprites),base64,WebP,圖片懶加載,只加載可視區(qū)域內(nèi)的圖片。
  • 某些關(guān)鍵 CSS 可以采用 style 標(biāo)簽內(nèi)聯(lián)的方式,減少 CSS 資源請求數(shù)量。
  • 某些數(shù)據(jù)及時性要求沒那么高,可以增加接口緩存,減少請求次數(shù)。

1.2 加快請求速度

  • 將圖片進行壓縮,減少圖片大小
  • 將靜態(tài)資源 html、css、js 以及圖片 都上傳到 cdn

二、構(gòu)建工具

這里以 webpack 為例。

2.1 按需打包

對于一些第三方包,我們有時候并不會用到包里全部的內(nèi)容,這時候就可以根據(jù)自己使用的部分進行按需打包,以減少打包后的文件體積。比如 Element-UI、Vant 等組件庫、lodash、moment 等三方包。

2.2 代碼分割 splitChunks

可以手動配置 splitChunks 進行代碼分割:

  1. 將一些不怎么變動的包提取到一起,提高緩存復(fù)用率。
  2. 一些比較大的包,可以單獨進行代碼分割,按需加載
  3. 使用異步組件異步路由會自動進行代碼分割,推薦將路由都設(shè)置為異步加載,一些比較大的組件,可以定義為異步組件,按需再加載。

2.3 配置 externals

externals 的作用是可以讓某些特定的依賴不打包到最終的 bundle 中,這樣可以大大減少打包后的包體積。

2.4 開啟 tree-shaking

tree-shaking 搖樹優(yōu)化能消除未使用的代碼,減少打包體積。

2.5 開啟 gzip 壓縮

可以使用 compression-webpack-plugin 在打包過程中對資源文件進行壓縮,并在服務(wù)器開啟 gzip,比如如果前端靜態(tài)資源服務(wù)器用的 nginx,就需要修改 nginx 配置。

三、渲染層面

3.1 預(yù)渲染(Prerendering)

預(yù)渲染就是在構(gòu)建時生成靜態(tài)的 HTML,相比于單頁應(yīng)用需要在加載完 javascript 后再通過 js 渲染的方式,預(yù)渲染的首屏加載速度會快很多,而且 SEO 也更友好。

適用場景:內(nèi)容基本靜態(tài)的頁面,且需要更好的用戶體驗和 SEO 友好。

3.2 服務(wù)端渲染(Server-Side Rendering)

服務(wù)端渲染(Server-Side Rendering,簡稱 SSR)是一種在服務(wù)器端將 Vue 組件渲染成HTML 字符串的技術(shù)。它在服務(wù)端拼接好 HTML字符串,然后發(fā)送給客戶端,客戶端無需等待下載和執(zhí)行 javascript,可以直接渲染頁面,這樣能極大提升首屏渲染速度,SEO也更為友好。

適用場景:需要優(yōu)化 SEO,對首屏性能敏感,內(nèi)容安全性高,能接受服務(wù)端渲染需要的額外服務(wù)器成本。

四、用戶體驗

4.1 骨架屏(Skeleton Screen)

骨架屏是在內(nèi)容加載前展示頁面的大致結(jié)構(gòu)框架,用于提升用戶感知性能。

注意點:骨架屏最好是需要在打包時直接注入到 html 中,那種組件庫里面的骨架屏組件的渲染太靠后了,比如 Vant 的 <van-skeleton> 組件,其效果會差很多。

4.2 懶加載

  • 圖片懶加載: 只加載可視區(qū)域內(nèi)的圖片。
  • 路由懶加載: 只加載當(dāng)前路由的資源。
  • 組件懶加載: 只加載當(dāng)前用到的組件。
  • 第三方庫懶加載: 使用動態(tài) import 加載第三方庫。
  • 按需加載樣式/腳本: 以動態(tài)創(chuàng)建 script標(biāo)簽/link標(biāo)簽 的方式按需加載腳本/樣式。

小結(jié)

本文介紹了首屏優(yōu)化的一些思路和方案,主要從 網(wǎng)絡(luò)資源請求、構(gòu)建工具、渲染 和 用戶體驗 四方面進行優(yōu)化。

  • 網(wǎng)絡(luò)資源請求:減少請求個數(shù)和加快請求速度。
  • 構(gòu)建工具:通過按需打包、代碼分割、externals、tree-shaking、gzip 等方式進行優(yōu)化。
  • 渲染:通過預(yù)渲染/服務(wù)端渲染提高首屏速度。
  • 用戶體驗:通過骨架屏和懶加載,提高用戶體驗。

回答示例(面試中怎么說)

“首屏加載慢通常是綜合問題。我的思路是:先測量,再分層優(yōu)化。

測量時,我會用Lighthouse和Network面板看TTFB、關(guān)鍵文件大小和請求鏈。

實際優(yōu)化會從幾個方向入手:

網(wǎng)絡(luò)層:啟用Brotli壓縮、部署CDN、升級HTTP/2。

資源層:路由懶加載、圖片換WebP格式、對非首屏圖片懶加載。

渲染層:內(nèi)聯(lián)關(guān)鍵CSS、用defer加載非核心JS、用preload預(yù)加載字體。

構(gòu)建層:做代碼分割、Tree Shaking,大庫換輕量替代品。

如果項目是內(nèi)容型網(wǎng)站,我會考慮SSR或SSG;如果是SPA,骨架屏+異步組件能有效提升感知速度。最后還要持續(xù)監(jiān)控,用Performance API收集真實用戶數(shù)據(jù)。”

到此這篇關(guān)于首屏加載速度慢怎么解決的文章就介紹到這了,更多相關(guān)前端首屏加載速度慢內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • JS中封裝axios來管控api的2種方式

    JS中封裝axios來管控api的2種方式

    這篇文章主要介紹了封裝axios來管控api的2種方式,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-09-09
  • JavaScript圖像查看庫Viewer.js的使用方法

    JavaScript圖像查看庫Viewer.js的使用方法

    Viewer.js是一款強大的圖片查看器,像門戶網(wǎng)站一般都會有各自的圖片查看器,如果您正需要一款強大的圖片查看器,也許Viewer.js是一個很好的選擇,這篇文章主要介紹了JavaScript圖像查看庫Viewer.js的使用方法,需要的朋友可以參考下
    2025-07-07
  • JS實現(xiàn)圖片橫向滾動效果示例代碼

    JS實現(xiàn)圖片橫向滾動效果示例代碼

    圖片橫向滾動效果,大家可能都已經(jīng)很熟悉了,本文為大家介紹下使用js實現(xiàn)橫向滾動效果,喜歡的朋友可以參考下,希望對大家有所幫助
    2013-09-09
  • 可自定義速度的js圖片無縫滾動示例分享

    可自定義速度的js圖片無縫滾動示例分享

    這篇文章主要介紹了非常平滑的JS圖片滾動特效代碼,無縫循環(huán),速度可自定義,大家參考使用吧
    2014-01-01
  • 利用js獲取下拉框中所選的值

    利用js獲取下拉框中所選的值

    本文介紹利用js取到下拉框中選擇的值。并附上實例代碼,需要的朋友可以參考下
    2016-12-12
  • js中關(guān)于require與import的區(qū)別及說明

    js中關(guān)于require與import的區(qū)別及說明

    這篇文章主要介紹了js中關(guān)于require與import的區(qū)別及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • 微信小程序?qū)崿F(xiàn)打卡簽到頁面

    微信小程序?qū)崿F(xiàn)打卡簽到頁面

    這篇文章主要為大家詳細介紹了微信小程序?qū)崿F(xiàn)打卡簽到頁面,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-09-09
  • JavaScript 繼承 封裝 多態(tài)實現(xiàn)及原理詳解

    JavaScript 繼承 封裝 多態(tài)實現(xiàn)及原理詳解

    這篇文章主要介紹了JavaScript 繼承 封裝 多態(tài)實現(xiàn)及原理詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-07-07
  • uni-app使用uni.navigateTo傳遞對象參數(shù)示例代碼

    uni-app使用uni.navigateTo傳遞對象參數(shù)示例代碼

    最近在做微信小程序用的是uniapp開發(fā)的,自己記錄一下,也和大家分享一下,這篇文章主要給大家介紹了關(guān)于uni-app使用uni.navigateTo傳遞對象參數(shù)的相關(guān)資料,需要的朋友可以參考下
    2023-11-11
  • 移動端手指操控左右滑動的菜單

    移動端手指操控左右滑動的菜單

    這篇文章主要為大家詳細介紹了移動端手指操控左右滑動的菜單,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-09-09

最新評論

泗水县| 丹阳市| 齐齐哈尔市| 祥云县| 宜春市| 宁乡县| 石景山区| 南昌市| 天门市| 新邵县| 来凤县| 桃园市| 邵阳县| 顺义区| 虎林市| 化德县| 海口市| 格尔木市| 镇沅| 资源县| 武宣县| 甘孜| 泰安市| 隆尧县| 静海县| 宁波市| 石景山区| 瓮安县| 阳高县| 板桥市| 察雅县| 德格县| 台东市| 疏附县| 搜索| 鄂托克前旗| 报价| 城口县| 水城县| 河津市| 柏乡县|