摘要:不推薦移動端瀏覽器前端優化策略相對于桌面端瀏覽器,移動端瀏覽器上有一些較為明顯的特點設備屏幕較小新特性兼容性較好支持一些較新的和特性需要與應用交互等。
GitHub鏈接:https://github.com/zwwill/blo...
圍繞前端的性能多如牛毛,涉及到方方面面,以我我們將圍繞PC瀏覽器和移動端瀏覽器的優化策略進行羅列
注意,是羅列不是展開,遇到不會不懂的點還請站外擴展
開車速度有點快,坐穩了。
PC瀏覽器前端優化策略tips : 這么多前端優化點你都記得住嗎?反正我是收藏起來備查的。
PC端優化的策略很多,如 YSlow(YSlow 是 Yahoo 發布的一款 Firefox 插件,現 Chrome 也可安裝,可以對網站的頁面性能進行分析,提出對該頁面性能優化的建議)原則,或者 Chrome 自帶的 Audits 等,總結起來主要包括網絡加載類、頁面渲染類、CSS 優化類、JavaScript 執行類、緩存類、圖片類、架構協議類等幾類,下面逐一介紹。
網絡加載類 1.減少 HTTP 資源請求次數在前端頁面中,通常建議盡可能合并靜態資源圖片、JavaScript 或 CSS 代碼,減少頁面請求數和資源請求消耗,這樣可以縮短頁面首次訪問的用戶等待時間。通過構建工具合并雪碧圖、CSS、JavaScript 文件等都是為了減少 HTTP 資源請求次數。另外也要盡量避免重復的資源,防止增加多余請求。
2.減小 HTTP 請求大小除了減少 HTTP 資源請求次數,也要盡量減小每個 HTTP 請求的大小。如減少沒必要的圖片、JavaScript、CSS 及 HTML 代碼,對文件進行壓縮優化,或者使用 gzip 壓縮傳輸內容等都可以用來減小文件大小,縮短網絡傳輸等待時延。前面我們使用構建工具來壓縮靜態圖片資源以及移除代碼中的注釋并壓縮,目的都是為了減小 HTTP 請求的大小。
3.將 CSS 或 JavaScript 放到外部文件中,避免使用或標簽直接引入在 HTML 文件中引用外部資源可以有效利用瀏覽器的靜態資源緩存,但有時候在移動端頁面 CSS 或 JavaScript 比較簡單的情況下為了減少請求,也會將 CSS 或 JavaScript 直接寫到 HTML 里面,具體要根據 CSS 或 JavaScript 文件的大小和業務的場景來分析。如果 CSS 或 JavaScript 文件內容較多,業務邏輯較復雜,建議放到外部文件引入。
...4.避免頁面中空的 href 和 src
當標簽的 href 屬性為空,或、、標簽的 src 屬性為空時,瀏覽器在渲染的過程中仍會將 href 屬性或 src 屬性中的空內容進行加載,直至加載失敗,這樣就阻塞了頁面中其他資源的下載進程,而且最終加載到的內容是無效的,因此要盡量避免。
點擊鏈接5.為 HTML 指定 Cache-Control 或 Expires
為 HTML 內容設置 Cache-Control 或 Expires 可以將 HTML 內容緩存起來,避免頻繁向服務器端發送請求。前面講到,在頁面 Cache-Control 或 Expires 頭部有效時,瀏覽器將直接從緩存中讀取內容,不向服務器端發送請求。
6.合理設置 Etag 和 Last-Modified
合理設置 Etag 和 Last-Modified 使用瀏覽器緩存,對于未修改的文件,靜態資源服務器會向瀏覽器端返回304,讓瀏覽器從緩存中讀取文件,減少 Web 資源下載的帶寬消耗并降低服務器負載。
7.減少頁面重定向頁面每次重定向都會延長頁面內容返回的等待延時,一次重定向大約需要200毫秒不等的時間開銷(無緩存),為了保證用戶盡快看到頁面內容,要盡量避免頁面重定向。
8.使用靜態資源分域存放來增加下載并行數瀏覽器在同一時刻向同一個域名請求文件的并行下載數是有限的,因此可以利用多個域名的主機來存放不同的靜態資源,增大頁面加載時資源的并行下載數,縮短頁面資源加載的時間。通常根據多個域名來分別存儲 JavaScript、CSS 和圖片文件。
...9.使用靜態資源 CDN 來存儲文件
如果條件允許,可以利用 CDN 網絡加快同一個地理區域內重復靜態資源文件的響應下載速度,縮短資源請求時間。
10.使用 CDN Combo 下載傳輸內容CDN Combo 是在 CDN 服務器端將多個文件請求打包成一個文件的形式來返回的技術,這樣可以實現 HTTP 連接傳輸的一次性復用,減少瀏覽器的 HTTP 請求數,加快資源下載速度。例如同一個域名 CDN 服務器上的 a.js,b.js,c.js 就可以按如下方式在一個請求中下載。
11.使用可緩存的 AJAX對于返回內容相同的請求,沒必要每次都直接從服務端拉取,合理使用 AJAX 緩存能加快 AJAX 響應速度并減輕服務器壓力。
$.ajax({ url : url, type : "get", cache : true, //推薦使用緩存 data : {}, success (){//...}, error (){//...} });12.使用 GET 來完成 AJAX 請求
使用 XMLHttpRequest 時,瀏覽器中的 POST 方法會發起兩次 TCP 數據包傳輸,首先發送文件頭,然后發送 HTTP 正文數據。而使用 GET 時只發送頭部,所以在拉取服務端數據時使用 GET 請求效率更高。
$.ajax({ url : url, type : "get", //推薦使用get完成請求 data : {}, success (){//...}, error(){//...} });13.減少 Cookie 的大小并進行 Cookie 隔離
HTTP 請求通常默認帶上瀏覽器端的 Cookie 一起發送給服務器,所以在非必要的情況下,要盡量減少 Cookie 來減小 HTTP 請求的大小。對于靜態資源,盡量使用不同的域名來存放,因為 Cookie 默認是不能跨域的,這樣就做到了不同域名下靜態資源請求的 Cookie 隔離。
14.縮小 favicon.ico 并緩存有利于 favicon.ico 的重復加載,因為一般一個 Web 應用的 favicon.ico 是很少改變的。
15.推薦使用異步 JavaScript 資源異步的 JavaScript 資源不會阻塞文檔解析,所以允許在瀏覽器中優先渲染頁面,延后加載腳本執行。例如 JavaScript 的引用可以如下設置,也可以使用模塊化加載機制來實現。
使用 async 時,加載和渲染后續文檔元素的過程和 main.js 的加載與執行是并行的。使用 defer 時,加載后續文檔元素的過程和 main.js 的加載是并行的,但是 main.js 的執行要在頁面所有元素解析完成之后才開始執行。
16.消除阻塞渲染的 CSS 及 JavaScript對于頁面中加載時間過長的 CSS 或 JavaScript 文件,需要進行合理拆分或延后加載,保證關鍵路徑的資源能快速加載完成。
17.避免使用 CSS import 引用加載 CSSCSS 中的 @import 可以從另一個樣式文件中引入樣式,但應該避免這種用法,因為這樣會增加 CSS 資源加載的關鍵路徑長度,帶有 @import 的 CSS 樣式需要在 CSS 文件串行解析到 @import 時才會加載另外的 CSS 文件,大大延后 CSS 渲染完成的時間。
頁面渲染類 1.把 CSS 資源引用放到 HTML 文件頂部
一般推薦將所有 CSS 資源盡早指定在 HTML 文檔 中,這樣瀏覽器可以優先下載 CSS 并盡早完成頁面渲染。
2.JavaScript 資源引用放到 HTML 文件底部JavaScript 資源放到 HTML 文檔底部可以防止 JavaScript 的加載和解析執行對頁面渲染造成阻塞。由于 JavaScript 資源默認是解析阻塞的,除非被標記為異步或者通過其他的異步方式加載,否則會阻塞 HTML DOM 解析和 CSS 渲染的過程。
3.盡量預先設定圖片等大小在加載大量的圖片元素時,盡量預先限定圖片的尺寸大小,否則在圖片加載過程中會更新圖片的排版信息,產生大量的重排
4.不要在 HTML 中直接縮放圖片在 HTML 中直接縮放圖片會導致頁面內容的重排重繪,此時可能會使頁面中的其他操作產生卡頓,因此要盡量減少在頁面中直接進行圖片縮放。
5.減少 DOM 元素數量和深度HTML 中標簽元素越多,標簽的層級越深,瀏覽器解析 DOM 并繪制到瀏覽器中所花的時間就越長,所以應盡可能保持 DOM 元素簡潔和層級較少。
6.盡量避免在選擇器末尾添加通配符
CSS 解析匹配到 渲染樹的過程是從右到左的逆向匹配,在選擇器末尾添加通配符至少會增加一倍多計算量。
7.減少使用關系型樣式表的寫法直接使用唯一的類名即可最大限度的提升渲染引擎繪制渲染樹等效率
8.盡量減少使用JS動畫JS 直接操作 DOM 極容易引起頁面的重排
9.CSS 動畫使用 translate、scale 代替 top、height盡量使用 CSS3 的 translate、scale 屬性代替 top、left 和 height、width,避免大量的重排計算
10.盡量避免使用