1. Make fewer HTTP requests. 儘量少的發送HTTP請求。頁面有不少內嵌資源,這些內嵌資源的數量越少越好。每一次請求都是HTTP連接,每次連接服務器都會消耗,並且瀏覽器最多隻能同時下載6個文件
2. Reduce DNS lookup.減小DNS尋找時間(解析時間)。(瀏覽器中查看DNS解析時間:network-all-點擊連接-timing-DNS LOOKUP)(直接訪問IP而不是域名能夠減小DNS時間)
3. Avoid URL redirects.避免URL重定向。HTML中的內容要在重定向完成以後下載。同域:注意避免反斜槓 「/」 的跳轉;跨域:使用Alias或者mod_rewirte創建CNAME(保存域名與域名之間關係的DNS記錄)
4. Make AJAX caheable.Ajax是實時響應的,在瀏覽器接收到新的數據前,舊的數據被緩存,這樣可以更好的提升效率。「異步」並不意味着「即時」:Ajax並不能保證用戶不會在等待異步的JavaScript和XML響應上花費時間。
5. Reduce the number of DOM elements.頁面不要太複雜,頁面上的每一個元素叫作一個DOM元素,一個DOM元素能夠當作是一個標籤(`<p></p>`)的集合。
6. Avoid HTTP 404(not found) error.站點自己裏(非搜索結果)出現404頁面,無心義的404頁面會影響用戶體驗而且會消耗服務器資源。有些站點把404錯誤響應頁面改成「你是否是要找***」,這雖然改進了用戶體驗可是一樣也會浪費服務器資源(如數據庫等)。最糟糕的狀況是指向外部 JavaScript的連接出現問題並返回404代碼。首先,這種加載會破壞並行加載;其次瀏覽器會把試圖在返回的404響應內容中找到可能有用的部分看成JavaScript代碼來執行。
7. Reduce cookies size.減少cookies的體積。
8. Use cookies free domains.配置一些頁面上靜態資源文件的cookies,讓這些靜態資源文件(JS,css,圖片等)不帶cookies。好比圖片 CSS 等,Yahoo! 的靜態文件都在 yimg.com 上,客戶端請求靜態文件的時候,減小了 Cookie 的反覆傳輸對主域名 (yahoo.com) 的影響。
9. Put CSS at top.把CSS文件放在上面。瀏覽器渲染是從上往下渲染的,先下載CSS文件。避免出現頁面內容展現,但樣式混亂的現象。
10. Avoid CSS expressions.避免CSS表達式。CSS表達式會動態地修改CSS屬性,好比調整大小、下拉滾動條,屬性會動態進行計算,這樣會下降用戶的體驗。
11. Make JavaScript and CSS external.JS和CSS均可以寫在頁面上面,可是最好經過文件的方式去引用,由於引用的文件能夠被緩存起來。
12. Minify JavaScript and CSS.最小化JS和CSS文件,壓縮它們。
13. Remove duplicate JavaScript and CSS.刪掉重複的JS和CSS文件。避免重複執行。
14. Avoid AlphaImageLoader filter.不要使用濾鏡。
15. Do not scale images in HTML.頁面要求用多大的圖片就準備多大的圖片,不要後端提供大圖片,前端用CSS調整圖片大小。會產生性能損耗。
16. Make favicon smaill and cacheable.(重定向網頁頁籤左端的「R」標識就是favicon。)收藏夾圖標儘量小而且可緩存。
17. Put JavaScript at bottom.把JS文件放在底部。JS文件下載時是獨佔的,不能同時下載其餘類型的文件(如CSS)。
18. Use a content Delivery Network(CDN).使用靜態資源服務器。把圖片、JS、CSS等文件存放在靜態資源服務器上,而不是本身的服務器上,優化DNS尋找地址速度、緩存優化速度。
19. Avoid empty src and href.避免空的src和href。由於瀏覽器訪問到空src和href後會再一次訪問主頁,致使多一個訪問。
20. Add Expires headers.爲頭文件加過時時間。使內容具備緩存性。避免了接下來的頁面訪問中沒必要要的HTTP請求。
21. Compress components with gzip.讓服務器端返回gzip類型的文件,減少回包大小。
22. Configure entity tags(ETags).它用來判斷瀏覽器緩存裏的元素是否和原來服務器上的一致。比last-modified date更具備彈性,例如某個文件在1秒內修改了10次,Etag能夠綜合Inode(文件的索引節點(inode)數),MTime(修改時間)和Size來精準的進行判斷,避開UNIX記錄MTime只能精確到秒的問題。 服務器集羣使用,可取後兩個參數。使用ETags減小Web應用帶寬和負載。
23. Use GET for AJAX requests.儘可能用GET而不是POST作AJAX請求時。POST會分兩步請求。
----------
CDN理解
[參考這裏](https://www.zhihu.com/question/36514327?rf=37353035)
1. HTML中常有文件引用(如CSS和JS),文件引用分爲指向站點內的文件的引用和其餘站點文件的引用。
2. 在一個網站項目中會出現不少的引用,小型項目(應用服務器壓力不大的系統)通常會將資源文件和代碼放在一塊兒。這種方式的優勢是開發省力,發佈省力,對服務器要求小,省錢,沒有具體公網接入需求。
3. 當改小型項目訪問量變高,系統變慢時,資源服務器與應用服務器的分離是一種優化方式。
4. 須要在異地訪問站點時,部署緩存服務器+分發服務器,將資源同步到各個緩存服務器上,各個地點進行訪問站點時,就近跳轉至內容緩存服務器上進行訪問。
5. CDN工做流程
用戶發送請求->智能DNS進行解析->取得緩存服務器IP->緩存中有目標資源->把內容返回給用戶
用戶發送請求->智能DNS進行解析->取得緩存服務器IP->緩存中沒有目標資源->向源站點發起請求->把獲取的內容保存到緩存服務器->把內容返回給用戶css