減少HTTP請求之合併圖片詳解(大型網站優化技術)

發表於2015-11-26

一、相關知識講解

看過雅虎的前端優化35條建議,都知道優化前端是有多麼重要。頁面的載入速度直接影響到使用者的體驗。80%的終端使用者響應時間都花在了前端上,其中大部分時間都在下載頁面上的各種元件:圖片,樣式表,指令碼,Flash等等。

減少元件數必然能夠減少頁面提交的HTTP請求數。這是讓頁面更快的關鍵。減少頁面元件數的一種方式是簡化頁面設計。但有沒有一種方法可以在構建複雜的頁面同時加快響應時間呢?嗯,確實有魚和熊掌兼得的辦法。

這裡我們就拿雅虎的第一條建議:儘量減少HTTP請求數裡的減少圖片請求數量 進行講解。

我們都知道,一個網站的一個頁面可能有很多小圖示,例如一些按鈕、箭頭等等。當載入html文件時,只要遇到有圖片的,都會自動建立起HTTP請求下載,然後將圖片下載到頁面上,這些小圖片可能也就是十幾K大甚至1K都不到,假如我們的一個頁面有一百個小圖示,我們在載入頁面時,就要傳送100個HTTP請求,如果你的網站訪問量很大併發量也很高,假如上百萬訪問量,那發起的請求就是千萬級別了,伺服器是有一定的壓力的,並且一個使用者的一個頁面要發起那麼多請求,是很耗時的。

所以,我們優化的方案就是:將這些十幾K、幾K的小圖示合併在一張圖片裡,然後用CSS的background-imagebackground-position屬性來定位要顯示的部分。

、程式碼實現

1、思路:

將一個資料夾裡的圖示,自動生成在一張圖片裡面,同時自動生成對應的css檔案,我們只要在HTML裡的標籤中新增相應的屬性值就能顯示圖片了。

2、實現過程:

呼叫以上程式碼,我們的瀏覽器是這樣顯示的:

然後css目錄生成了Pink.css檔案:

img目錄下生成了Pink.png檔案:

看看生成的背景圖是長啥樣子:

 

接下來我們再看一下所生成的圖片大小與Pink資料夾裡所有小圖片總和的大小,對它們做個比較:

 

從上圖可以看出,我們生成的圖片的大小明顯小於資料夾所有圖片的大小,所以在將100個小圖示下載下來的速度 會明顯小於 將背景圖下載下來和將CSS下載下來的速度。

當訪問量大時,或者小圖片的量大時,會起到很明顯的優化效果!!!

程式碼中的每一個點都基本上有註釋,很方便大家去理解,只要大家用心去看,肯定能將這一網站優化技術用到自己的專案中。

本次博文就寫到這!!!

如果此博文中有哪裡講得讓人難以理解,歡迎留言交流,若有講解錯的地方歡迎指出。

如果您覺得您能在此博文學到了新知識,請為我頂一個,如文章中有解釋錯的地方,歡迎指出。

  互相學習,共同進步!

相關文章