我在面試時是如何回答“前端性能優化”的


每一位前端開發同學在面試的時候,都會有50%的幾率會被問:你是如何做前端性能優化的?
下面說一說我是怎么回答的?

儲備知識

  • webpack打包
  • 服務端渲染
  • http緩存
  • 瀏覽器本地緩存

下面我會以第一人稱的角度,配合文本排版進行回答

面試官:你是如何做性能優化

我:針對前端性能優化,我做過一些總結,一共有三點:

  1. 第一次訪問時的優化(把第一次的加載速度變快);
  2. 第n次訪問時的優化(把已經訪問過的資源緩存);
  3. 讓用戶感覺很快,很流暢(通過交互手段優化體驗);

第一次訪問優化的方式有哪些?

我:第一次訪問的時我們優化的主要目的是【加快渲染的速度】、一般我們會使用webpack將資源較大的文件進行壓縮或者拆分,壓縮一般可以使用uglifyjs去壓縮js文件,使文件體積變小;

我:如果此時文件依然很大,我們也可以使用webpack插件來拆分第三方庫(不需要記住名字,知道有相關插件即可)

我: 至於圖片、圖標等資源同樣可以在webpack中進行配置,將一定大小的文件轉換成base64、或者使用阿里的字體圖標庫進行圖標的渲染

如果想做SEO的優化,也可以采用服務端渲染的方式來加快首屏渲染的速度;

  1. 通過webpack進行資源壓縮
  2. 通過webpack進行資源拆分
  3. 圖片/圖標資源的處理
  4. 服務端渲染

資源的壓縮與拆分

1. 使用webpack插件壓縮(html、js、css)資源

  • 壓縮html的方式:HtmlWebpackPlugin
  • 壓縮js的方式:uglifyjs-webpack-plugin
  • 壓縮css的方式:optimize-css-assets-webpack-plugin
  • 除了使用插件以外也可以在服務端開啟GZIP進行資源壓縮

2. 如何進行資源拆分?

  • 通過webpack插件:CommonsChunkPlugin、Dllplugin 、DllReferencePlugin、SplitChunksPlugin(webpack4內置) 進行壓縮
  • 路由的異步加載 import(/* webpackChunkName:${name} */ $ {path})

3. 圖片/圖標資源的處理

  • 通過webpack將一定大小范圍內的圖片處理成base64
  • 圖標類的圖片,可使用阿里的iconfont處理為字體圖標
  • 雪碧圖(比較老的方法,不建議了)

4. 服務端渲染

  • 無需等待頁面加載js,直接將服務端渲染好的頁面返回
  • SEO優化

第n次訪問優化的方式有哪些?

我:一般情況下,訪問過的頁面/資源,想要在后面訪問時加快訪問速度,可以想到的方式是利用緩存或本地存儲;

我:前端本身我們可以通過不同的業務邏輯利用localStorage或sessionStorage 就可以了

我:如何涉及到服務端,我們也可以采用http的緩存,一般有兩種方式,一個是強緩存、另一個是協商緩存,強緩存的優先級高於協商緩存,我們可以通過相關key去設置緩存時間(那么多屬性不一定記得住,但一定要知道有這個東西)

除了本地存儲和http緩存,也可以嘗試采用indexDB去做前端的數據存儲

除了indexBD,Service workers也可以作為緩存方案

  • 瀏覽器本地緩存

  • http緩存

  • indexDB

  • Service workers

幫助大家的傳送門:

localStorage的使用

sessionStorage的使用

徹底弄懂強緩存與協商緩存

http面試必會的:強制緩存和協商緩存

IndexedDB

Service worker 的概念和用法

如何讓用戶感覺很快

我:讓用戶感覺很快,顧名思義,就是並沒有實際上的提升速度,而是優化了用戶體驗,我可以采用骨架屏、懶加載、合理loading,防抖、節流(減少不必要的請求)等方式讓用戶的等待變得舒服

  • 骨架屏、懶加載
  • loading優化
  • 防抖、節流
  • 等等等

以上就是我個人在面試中回答性能優化問題的是常用回答方式,通過以上的回答,也可以衍生出webpack的相關問題、http緩存的相關問題,http/https相關問題,閉包問題等


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM