從Web前端優化網站性能。
1. 減少HTTP請求數
一個完整的請求都需要經過DNS存址、與服務器建立連接、發送數據、等待服務器響應、接收數據這樣一個漫長而復雜的過程。資源上由於每個請求都要攜帶數據,因此每個請求都需要占用帶寬。另外,由於浏覽器進行並發請求的請求數是有上限的,因此請求數多了以後,浏覽器需要分批進行請求,因此會增加用戶的等待時間,會給用戶造成站點速度慢這樣一個印象,即使可能用戶能看到的第一屏的資源都已經請求完了,但是浏覽器的進度條會一直存在。
減少HTTP請求數的主要途徑包括:
(1)從設計實現層面簡化頁面
如果你的頁面想百度首頁那樣簡單,那麼接下來的規則基本上都用不著了。
(2)合理設置HTTP緩存
緩存可以大大減少第二次訪問時的請求數,但是如果是F5刷新的話,請求數一樣。
怎樣才算合理設置?能緩存越多越好,能緩存越久越好。例如,很少變化的圖片資源可以直接通過HTTP Header中的Expires設置一個很長的過期頭;變化不頻繁而又可能會變的資源可以使用Last-Modified來做請求驗證。盡可能的讓資源能夠在緩存中待得更久。
(3)資源合並與壓縮
如果可以的話,盡可能的將外部的腳本、樣本進行合並,多個合為一個。另外,CSS、JavaScript、Image都可以用相應的工具進行壓縮,壓縮後往往能省下不少空間。
(4)CSS Sprites
合並CSS圖片,減少請求數的有一個好辦法。
(5)Inline Images
使用data:URL scheme的方式將圖片嵌入到頁面或者CSS中,如果不考慮資源管理上的問題,不失為一個好辦法。如果是嵌入頁面的話換來的是增大頁面的體積,而無法利用浏覽器緩存。使用在CSS中的圖片更為理想一些。
(6)Lazy Load Images
使頁面剛加載的時候只加載第一屏,當用戶繼續往後滾屏的時候才加載後續的圖片。
2. 將css文件放在head頭,JS腳本放在頁面信息後面
外鏈腳本會在加載時阻塞其他資源。
3. 異步執行inline腳本(保證腳本在頁面內容後面加載)
inline腳本在執行的時候一樣會阻塞並發請求。除此之外,由於浏覽器在頁面處理方面是單線程的,當inline腳本在頁面渲染之前執行時,頁面的渲染工作則會被推遲。
因此,建議將執行時間較長的inline腳本進行異步執行,例如使用setTimeout或者HTML5中的Web Worker。
4. Lazy Load JavaScript
(1)利用min版JS框架
(2)YUI,最初只加載核心模塊,其他模塊可以等到需要使用的時候才加載。
5. 將CSS放在Head中
使頁面在開始渲染之前先加載css資源
6. 異步請求callback
7. 減少不必要的HTTP挑轉
8. 避免重復的資源請求
9. 合並CSS屬性值
如border-style: solid;
border-width:1px;
border-color:red;
變成border: 1px solid red;
10. 為文件頭指定Expires或者Cache-Control