前端性能優化方案


  1.在js中盡量減少閉包的使用(閉包不會釋放棧內存)

    A:循環進行事件綁定時,盡可能使用自定義屬性,而不用創建閉包來存儲信息。

    B:在最外層形成一個閉包,把一些后期需要的公共信息進行存儲,而不是每一個方法都創建一個閉包(例如單例模式)。

    C:盡可能手動釋放掉不需要的內存。

      。。。

  2.進行js和css文件的合並,減少http請求的次數,盡可能將文件進行壓縮,減少請求資源的大小。

    A:webpack這種自動化構建工具,可以幫我們實現代碼的合並和壓縮(工程化開發)

    B:在移動端開發過程中,如果代碼不是很多,直接將css和js寫html中。

  3.盡量使用字體圖標和SVG圖標,來代替傳統的PNG等格式的圖片(字體圖標等是矢量圖)

  

  4.減少對DOM的操作(主要是減少DOM的重繪和回流(重排))

    A:關於重排的分離讀寫(瀏覽器會將連續dom操作一起緩存起來一起操作)

    B:使用文檔碎片或者字符串做數據綁定(DOM的動態創建)

  5.js避免“嵌套循環”(會額外增加很多次循環次數)和“死循環”(瀏覽器會死機)

 

  6.采用圖片“懶加載”,加快第一次加載的速度,實際並沒有減少請求次數

    步驟:開始加載頁面是,所有的真實圖片都不去發送請求,而是給一張占位的背景圖,當頁面加載完后,並且圖片出現在可是區域再去做圖片加載。

 

  7.利用瀏覽器和服務器端的緩存技術(304緩存),把一些不經常變更的資源進行緩存,例如js和css文件。目的就是減少請求大小。

 

  8.盡可能使用事件委托來處理綁定的操作,減少DOM的頻繁操作。

 

  9.減少css表達式的使用

#box{
  position:fixed;
  left:  expression(document.body.offsetWidth-110+'px');
  top:  expression(document.body.offsetWidth-110+'px');
}

  10.css選擇器解析規則從右到左進行解析

.container .link a{
  先找到所有的a,再次篩選.link類中 ,最后再找.container類中。。
  所以應減少標簽選擇器的使用。
}

  11.css雪碧圖技術(css sprite/css 圖片精靈)

    把所有相對較小的資源圖片匯集到一張大圖上,通過背景定位展示對應的小圖。

 

  12.避免重定向(301:資源永久轉移/302:暫時轉移)

  

  13.減少cookie的使用(最主要是減少本地cookie儲存內容的大小),因為客戶端操作cookie的時候,這些信息總是傳來傳去。

 

  14.頁面中數據獲取采用異步編程和延遲分批加載

    使用異步獲取數據,是為了降低http通道的阻塞,不會因為數據沒有請求而耽誤下面的渲染,提高頁面加載速度。(可以將需要動態綁定數據的區域先隱藏,等數據返回綁定完成再讓他顯示)

    延遲分批加載類似於圖片懶加載,是為了減少頁面第一次加載請求的次數。

  15.頁面出現音視頻標簽,我們不讓頁面加載的時候加載這些資源(資源太大)

    方案:只需設置preload=“none”,頁面加載完時就會開始加載。

 

  16.交互時,數據盡可能基於json格式進行傳送(處理方便,資源偏小)==》相對於XML

 

  17.進行js封裝,減少冗余代碼。

 

  18.css中設置定位后,最好使用z-index改變層級,讓盒子不在同一平面上,性能會提高一丟丟。

 

  19:基於AJAX的get請求根據需求產生緩存(非304),但不建議使用。

 

  20.盡量減少filter屬性濾鏡的使用。

 

  21.css導入盡量減少@import是同步操作,資源返回才向下渲染,而link是異步請求。

  重量級優化:CDN加速(有錢上面的都是浮雲。)

 

  22.配置ETAG(有點類似304緩存)

 

  23.使用window.requestAnimationFrame(js的幀動畫)代替傳統的定時器動畫。

 

  24.減少遞歸的使用,避免棧內存嵌套,盡量使用尾遞歸。

 

  25.避免使用iframe

 

  26.利用H5提供localstorage本地儲存或者manifest離線緩存,下次頁面加載直接從本地獲取,減少請求次數。

 

  29.基於script調用js的時候,使用defer或者async來異步加載。

 

===前端性能優化方案====

  第一類:減少請求次數和請求大小。

  第二類:代碼優化:

      --》利於SEO

      --》利於拓展維護

      --》有利於減少性能優化

  第三類:DNS及HTTP通信方式的優化

  額外技巧:

    1.將css放在body上,將js放在body下(元素時帶着樣式渲染,js操作元素)。

    2.能用css實現就不要去使用js操作元素,能用原生js解決的就不要使用使用插件,絕對不使用FLASH(除了去兼容低版本的瀏覽器的播放)。

    ==》css處理動畫的性能優於js,而且css的transform變形還開啟硬件加速。

    3.js減少eval的使用,eval會執行兩次。(當然該用還是用)。

    4.使用keep-alive,客戶端與服務器端建立長連接。

    5.盡量使用設計模式來管理代碼(單例,promise,發布訂閱),方便維護和升級。

    6.開啟服務器的gzip壓縮。

    7.不要出現無效的鏈接,不利於SEO。提高關鍵字曝光率,img設置alt、設置meta標簽,標簽語義化。


免責聲明!

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



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