前端性能優化匯總


性能優化:

一、減少請求資源大小或者次數 

1、盡量和並和壓縮css和js文件。(將css文件和並為一個。將js合並為一個)
  原因:主要是為了減少http請求次數以及減少請求資源的大小
  打包工具:
  webpack
  gulp
  grunt
.  ....
2、盡量所使用的字體圖標或者SVG圖標來代替傳統png圖
  因為字體圖標或者SVG是矢量圖,代碼編寫出來的,方大不會變形,而且渲染速度快

3、采用圖片的懶加載(延遲加載)
  目的為了,減少頁面第一次加載過程中http的請求次數
  具體步驟:
    1、頁面開始加載時不去發送http請求,而是放置一張占位圖
    2、當頁面加載完時,並且圖片在可視區域再去請求加載圖片信息

4、能用css做的效果,不要用js做,能用原生js做的,不要輕易去使用第三方插件。
  避免引入第三方大量的庫。而自己卻只是用里面的一個小功能

5、使用雪碧圖或者是說圖片精靈
  把所有相對較小的資源圖片,繪制在一張大圖上,只需要將大圖下載下來,然后利用
  圖片定位來講小圖展現在頁面中(background-position:百分比,數值)

6、減少對cookie的使用(最主要的就是減少本地cookie存儲內容的大小),因為客戶端操作cookie的時候,這些信息總是在客戶端和服務端傳遞。如果上設置不當,每次發送

一個請求將會攜帶cookie

7、前端與后端進行數據交互時,對於多項數據盡可能基於json格式來進行傳送。相對於使用xml
  來說傳輸有這個優勢
  目的:是數據處理方便,資源偏小

8、前端與后端協商,合理使用keep-alive

9、前端與服務器協商,使用響應資源的壓縮

10、避免使用iframe
  不僅不好管控樣式,而且相當於在本頁面又嵌套其他頁面,消耗性能會更大。因為還回去加載這個嵌套頁面的資源

11、在基於ajax的get請求進行數據交互的時候,根據需求可以讓其產生緩存(注意:這個
緩存不是我們常看到的304狀態碼,去瀏覽器本地取數據),這樣在下一次從相同地址獲取是數據
時,取得就是上一次緩存的數據。(注意:很少使用,一般都會清空。根據需求來做)

二、代碼優化相關

1、在js中盡量減少閉包的使用
  原因:使用閉包后,閉包所在的上下文不會被釋放

2、減少對DOM操作,主要是減少DOM的重繪與回流(重排)
  關於重排(回流)的分離讀寫:如果需要設置多個樣式,把設置樣式全放在一起設置,不要一條一條的設置。使用文檔碎片或者字符串拼接做數據綁定(DOM的動態創建)

3、在js中避免嵌套循環和"死循環"(一旦遇到死循環,瀏覽器就會直接卡掉)

4、把css放在body上,把js放在body下面
  讓其先加載css(注意:這里關於優化沒有多大關系)

5、減少css表達式的使用

6、css選擇器解析規則所示從右往左解析的。減少元素標簽作為對后一個選擇對象

7、盡量將一個動畫元素單獨設置為一個圖層(避免重繪或者回流的大小)
  注意:圖層不要過多設置,否則不但效果沒有達到反而更差了

8、在js封裝過程中,盡量做到低耦合高內聚。減少頁面的冗余代碼

9、css中設置定位后,最好使用z-index改變盒子的層級,讓盒子不在相同的平面上

10、css導入的時候盡量減少@import導入式,因為@import是同步操作,只有把對應的樣式導入后,才會繼續向下加茲安,而link是異步的操作

11、使用window.requestAnimationFrame(js的幀動畫)代替傳統的定時器動畫
  如果想使用每隔一段時間執行動畫,應該避免使用setInterval,盡量使用setTimeout
  代替setInterval定時器。因為setInterval定時器存在弊端:可能造成兩個動畫間隔時間
  縮短

12、盡量減少使用遞歸。避免死遞歸
  解決:建議使用尾遞歸

13、基於script標簽下載js文件時,可以使用defer或者async來異步加載

14、在事件綁定中,盡可能使用事件委托,減少循環給DOM元素綁定事件處理函數。

15、在js封裝過程中,盡量做到低耦合高內聚。減少頁面的冗余代碼

16、減少Flash的使用

三、存儲

1、結合后端,利用瀏覽器的緩存技術,做一些緩存(讓后端返回304,告訴瀏覽器去本地拉取數據)。(注意:也有弊端)可以讓一些不太會改變的靜態資源做緩存。比如:一些圖片,js,cs

2、利用h5的新特性(localStorage、sessionStorage)做一些簡單數據的存儲,
  避免向后台請求數據或者說在離線狀態下做一些數據展示。

四、其他優化

1、避免使用iframe不僅不好管控樣式,而且相當於在本頁面又嵌套其他頁面,消耗性能會更大。因為還回去加載這個嵌套頁面的資源

2、頁面中的是數據獲取采用異步編程和延遲分批加載,使用異步加載是數據主要是為了避免瀏覽器失去響應。如果你使用同步,加載數據很大並且很慢
  那么,頁面會在一段時間內處於阻塞狀態。目的:為了解決請求數據不耽擱渲染,提高頁面的
  渲染效率。解決方法:需要動態綁定的是數據區域先隱藏,等數據返回並且綁定后在讓其顯示
  延遲分批加載類似圖片懶加載。減少第一次頁面加載時候的http請求次數

3、頁面中出現音視頻標簽,我們不讓頁面加載的時候去加載這些資源(否則第一次加載會很慢)
  解決方法:只需要將音視頻的preload=none即可。
  目的:為了等待頁面加載完成時,並且音視頻要播放的時候去加茲安音視頻資源

4、盡量將一個動畫元素單獨設置為一個圖層(避免重繪或者回流的大小)
  注意:圖層不要過多設置,否則不但效果沒有達到反而更差了

 


免責聲明!

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



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