轉(zhuǎn)帖|行業(yè)資訊|編輯:蔣永|2017-11-10 15:37:20.000|閱讀 692 次
概述:PC端優(yōu)化的策略很多,如 YSlow(YSlow 是 Yahoo 發(fā)布的一款 Firefox 插件,現(xiàn) Chrome 也可安裝,可以對網(wǎng)站的頁面性能進行分析,提出對該頁面性能優(yōu)化的建議)原則,或者 Chrome 自帶的 Audits 等,總結(jié)起來主要包括網(wǎng)絡(luò)加載類、頁面渲染類、CSS 優(yōu)化類、JavaScript 執(zhí)行類、緩存類、圖片類、架構(gòu)協(xié)議類等幾類,下面逐一介紹。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
PC端優(yōu)化的策略很多,如 YSlow(YSlow 是 Yahoo 發(fā)布的一款 Firefox 插件,現(xiàn) Chrome 也可安裝,可以對網(wǎng)站的頁面性能進行分析,提出對該頁面性能優(yōu)化的建議)原則,或者 Chrome 自帶的 Audits 等,總結(jié)起來主要包括網(wǎng)絡(luò)加載類、頁面渲染類、CSS 優(yōu)化類、JavaScript 執(zhí)行類、緩存類、圖片類、架構(gòu)協(xié)議類等幾類,下面逐一介紹。
在前端頁面中,通常建議盡可能合并靜態(tài)資源圖片、JavaScript 或 CSS 代碼,減少頁面請求數(shù)和資源請求消耗,這樣可以縮短頁面首次訪問的用戶等待時間。通過構(gòu)建工具合并雪碧圖、CSS、JavaScript 文件等都是為了減少 HTTP 資源請求次數(shù)。另外也要盡量避免重復(fù)的資源,防止增加多余請求。
除了減少 HTTP 資源請求次數(shù),也要盡量減小每個 HTTP 請求的大小。如減少沒必要的圖片、JavaScript、CSS 及 HTML 代碼,對文件進行壓縮優(yōu)化,或者使用 gzip 壓縮傳輸內(nèi)容等都可以用來減小文件大小,縮短網(wǎng)絡(luò)傳輸?shù)却龝r延。前面我們使用構(gòu)建工具來壓縮靜態(tài)圖片資源以及移除代碼中的注釋并壓縮,目的都是為了減小 HTTP 請求的大小。
style
或script
標(biāo)簽直接引入在 HTML 文件中引用外部資源可以有效利用瀏覽器的靜態(tài)資源緩存,但有時候在移動端頁面 CSS 或 JavaScript 比較簡單的情況下為了減少請求,也會將 CSS 或 JavaScript 直接寫到 HTML 里面,具體要根據(jù) CSS 或 JavaScript 文件的大小和業(yè)務(wù)的場景來分析。如果 CSS 或 JavaScript 文件內(nèi)容較多,業(yè)務(wù)邏輯較復(fù)雜,建議放到外部文件引入。
<code><link rel="stylesheet" href="//cdn.domain.com/path/main.css" > ... <script src="//cdn.domain.com/path/main.js"></script></code>
當(dāng)link
標(biāo)簽的 href 屬性為空,或script
、img
、iframe
標(biāo)簽的 src 屬性為空時,瀏覽器在渲染的過程中仍會將 href 屬性或 src 屬性中的空內(nèi)容進行加載,直至加載失敗,這樣就阻塞了頁面中其他資源的下載進程,而且最終加載到的內(nèi)容是無效的,因此要盡量避免。
<code><!--不推薦--> <img src="" alt="photo" > <a href="">點擊鏈接</a></code>
為 HTML 內(nèi)容設(shè)置 Cache-Control 或 Expires 可以將 HTML 內(nèi)容緩存起來,避免頻繁向服務(wù)器端發(fā)送請求。前面講到,在頁面 Cache-Control 或 Expires 頭部有效時,瀏覽器將直接從緩存中讀取內(nèi)容,不向服務(wù)器端發(fā)送請求。
<code><meta http-equiv="Cache-Control" content="max-age=7200"> <meta http-equiv="Expires" content="Mon,20Jul201623:00:00GMT"></code>
合理設(shè)置 Etag 和 Last-Modified 使用瀏覽器緩存,對于未修改的文件,靜態(tài)資源服務(wù)器會向瀏覽器端返回304,讓瀏覽器從緩存中讀取文件,減少 Web 資源下載的帶寬消耗并降低服務(wù)器負(fù)載。
<code><meta http-equiv="last-modified" content="Sun,05 Nov 2017 13:45:57 GMT"></code>
頁面每次重定向都會延長頁面內(nèi)容返回的等待延時,一次重定向大約需要200毫秒不等的時間開銷(無緩存),為了保證用戶盡快看到頁面內(nèi)容,要盡量避免頁面重定向。
瀏覽器在同一時刻向同一個域名請求文件的并行下載數(shù)是有限的,因此可以利用多個域名的主機來存放不同的靜態(tài)資源,增大頁面加載時資源的并行下載數(shù),縮短頁面資源加載的時間。通常根據(jù)多個域名來分別存儲 JavaScript、CSS 和圖片文件。
<code><link rel="stylesheet" href="//cdn1.domain.com/path/main.css" > ... <script src="//cdn2.domain.com/path/main.js"></script></code>
如果條件允許,可以利用 CDN 網(wǎng)絡(luò)加快同一個地理區(qū)域內(nèi)重復(fù)靜態(tài)資源文件的響應(yīng)下載速度,縮短資源請求時間。
CDN Combo 是在 CDN 服務(wù)器端將多個文件請求打包成一個文件的形式來返回的技術(shù),這樣可以實現(xiàn) HTTP 連接傳輸的一次性復(fù)用,減少瀏覽器的 HTTP 請求數(shù),加快資源下載速度。例如同一個域名 CDN 服務(wù)器上的 a.js,b.js,c.js 就可以按如下方式在一個請求中下載。
<code><script src="//cdn.domain.com/path/a.js,b.js,c.js"></script></code>
對于返回內(nèi)容相同的請求,沒必要每次都直接從服務(wù)端拉取,合理使用 AJAX 緩存能加快 AJAX 響應(yīng)速度并減輕服務(wù)器壓力。
<code>$.ajax({ url : url, type : 'get', cache : true, //推薦使用緩存 data : {}, success (){//...}, error (){//...} });</code>
使用 XMLHttpRequest 時,瀏覽器中的 POST 方法會發(fā)起兩次 TCP 數(shù)據(jù)包傳輸,首先發(fā)送文件頭,然后發(fā)送 HTTP 正文數(shù)據(jù)。而使用 GET 時只發(fā)送頭部,所以在拉取服務(wù)端數(shù)據(jù)時使用 GET 請求效率更高。
<code>$.ajax({ url : url, type : 'get', //推薦使用get完成請求 data : {}, success (){//...}, error(){//...} });</code>
HTTP 請求通常默認(rèn)帶上瀏覽器端的 Cookie 一起發(fā)送給服務(wù)器,所以在非必要的情況下,要盡量減少 Cookie 來減小 HTTP 請求的大小。對于靜態(tài)資源,盡量使用不同的域名來存放,因為 Cookie 默認(rèn)是不能跨域的,這樣就做到了不同域名下靜態(tài)資源請求的 Cookie 隔離。
有利于 favicon.ico 的重復(fù)加載,因為一般一個 Web 應(yīng)用的 favicon.ico 是很少改變的。
異步的 JavaScript 資源不會阻塞文檔解析,所以允許在瀏覽器中優(yōu)先渲染頁面,延后加載腳本執(zhí)行。例如 JavaScript 的引用可以如下設(shè)置,也可以使用模塊化加載機制來實現(xiàn)。
<code><script src="main.js" defer></script> <script src="main.js" async></script></code>
使用 async 時,加載和渲染后續(xù)文檔元素的過程和 main.js 的加載與執(zhí)行是并行的。使用 defer 時,加載后續(xù)文檔元素的過程和 main.js 的加載是并行的,但是 main.js 的執(zhí)行要在頁面所有元素解析完成之后才開始執(zhí)行。
對于頁面中加載時間過長的 CSS 或 JavaScript 文件,需要進行合理拆分或延后加載,保證關(guān)鍵路徑的資源能快速加載完成。
CSS 中的 @import
可以從另一個樣式文件中引入樣式,但應(yīng)該避免這種用法,因為這樣會增加 CSS 資源加載的關(guān)鍵路徑長度,帶有 @import
的 CSS 樣式需要在 CSS 文件串行解析到 @import
時才會加載另外的 CSS 文件,大大延后 CSS 渲染完成的時間。
<code><!--不推薦--> <style> @import "path/main.css"; </style> <!--推薦--> <link rel="stylesheet" href="//cdn1.domain.com/path/main.css" ></code>
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@fc6vip.cn