Web性能優(yōu)化:圖片優(yōu)化
HTTP Archieve有個(gè)統計,圖片內容已經(jīng)占到了互聯(lián)網(wǎng)內容總量的62%,也就是說(shuō)超過(guò)一半的流量和時(shí)間都用來(lái)下載圖片。從性能優(yōu)化的角度看,圖片也絕對是優(yōu)化的熱點(diǎn)和重點(diǎn)之一,Google PageSpeed或者Yahoo的14條性能優(yōu)化規則無(wú)不把圖片優(yōu)化作為重要的優(yōu)化手段,本文覆蓋了Web圖片優(yōu)化的方方面面,從基本的圖片格式選擇、到尚未被廣泛支持的響應式圖片均有所提及。西安做網(wǎng)站推薦閱讀>>> 網(wǎng)站性能優(yōu)化之CSS無(wú)圖片技術(shù),
Google Web Fundamentals的說(shuō)法我很喜歡:
圖片優(yōu)化既是一門(mén)藝術(shù),也是一門(mén)科學(xué),圖片優(yōu)化是一門(mén)藝術(shù),是因為單個(gè)圖片的壓縮不存在最好的特定性方案,而圖片優(yōu)化之所以是一門(mén)科學(xué),是因為許多開(kāi)發(fā)得很出色的方法和算法可以明顯減小圖片的大小。要找到圖片的最優(yōu)設置,需要按照許多維度進(jìn)行認真分析:格式能力、編碼數據內容、像素尺寸等。
真的要用圖片嗎?
要實(shí)現需要的效果,真的需要圖片嗎?這是首先要問(wèn)自己的問(wèn)題。瀏覽器和Web標準的發(fā)展速度極快,記得數年前我在用微軟Silverlight 1.0寫(xiě)視頻播放器的時(shí)候,中文還不能使用自定義字體顯示,所以那時(shí)候寫(xiě)了很多糟糕的代碼把需要的文字在服務(wù)器上生成圖片并緩存起來(lái)。用戶(hù)下載起來(lái)很慢,搜索引擎也完全無(wú)法檢索這些文字。
但是現在不一樣了,很多特效(漸變、陰影、圓角等等)都可以用純粹的HTML、CSS、SVG等加以實(shí)現,實(shí)現這些效果少則寥寥數行代碼,多則加載額外的庫(一張普通的照片比非常強大的效果庫也大了許多)。這些效果不但需要的空間很小,而且在多設備、多分辨率下都能很好的工作,在低級瀏覽器上也可以實(shí)現較好的功能降級。因此在存在備選技術(shù)的情況下,應該首先選擇這些技術(shù),只有在不得不使用圖片的時(shí)候才加入真正的圖片。
備選技術(shù)
CSS效果、CSS動(dòng)畫(huà)。提供與分辨率無(wú)關(guān)的效果,在任何分辨率和縮放級別都可以顯示得非常清晰,占用的空間也很小。
網(wǎng)絡(luò )字體?,F在連很多圖標庫都是用字體方式提供,保持文字的可搜索性同時(shí)擴展顯示的樣式。
前端工程師最好能和設計師、產(chǎn)品經(jīng)理保持溝通,幫助他們了解到什么樣的效果比較“簡(jiǎn)潔、高效、可維護”,畢竟對于CSS來(lái)說(shuō)改變圓角矩形的Radius可以實(shí)時(shí)看到效果,用圖片的話(huà)至少要重新生成圖片、切圖并替換資源。Retina、高分辨率屏幕、多尺寸的設備,這些都加快了非圖片特效的發(fā)展,想想在高分辨率屏幕下Windows 7的慘不忍睹,就知道原生的圖片資源絕對不是多多益善。
圖片格式的選擇
如果效果真的需要圖片來(lái)表現,那么選擇圖片格式是優(yōu)化的第一步。我們經(jīng)常聽(tīng)到的詞語(yǔ)包括矢量圖、標量圖、SVG、有損壓縮、無(wú)損壓縮等等,我們首先說(shuō)明各種圖片格式的特點(diǎn):
其中APNG和WebP格式出現的較晚,尚未被Web標準所采納,只有在特定平臺或瀏覽器環(huán)境可以預知的情況下加以采用,雖然均可以在不支持的環(huán)境中較好的功能降級,但本節暫不討論這兩種格式。圖片格式選擇過(guò)程如下:
顏色豐富的照片,JPG是通用的選擇
人眼的結構很適合查看JPG壓縮后的照片,可以充分的忽略并在腦中補齊細節
JPG在壓縮率不高時(shí)保留的細節還是不錯的
WebP能夠比JPG減少30%的體積,但目前兼容性較差
如果需要較通用的動(dòng)畫(huà),GIF是唯一可用的選擇
GIF支持的顏色范圍為256色,而且僅支持完全透明/完全不透明
GIF在顯示顏色豐富的動(dòng)畫(huà)時(shí)可能出現顏色不全、邊緣鋸齒等問(wèn)題
如果圖片由標準的幾何圖形組成,或需要使用程序動(dòng)態(tài)控制其顯示特效,可以考慮SVG格式
SVG是使用XML定義的矢量圖形,生成的圖片在各種分辨率下均可自由放縮
SVG中可以通過(guò)JavaScript等接口自由變換圖片特效,可以完成其中部分元素的自由旋轉、移動(dòng)、變換顏色等
如果需要清晰的顯示顏色豐富的圖片,PNG比較好
PNG-8能夠顯示256種顏色,但能夠同時(shí)支持256階透明,因此顏色數較少但需要半透明的情景(如微信動(dòng)畫(huà)大表情)可以考慮PNG-8
PNG-24可以顯示真彩色,但不支持透明,顏色豐富的圖片推薦使用(如屏幕截圖、界面設計圖)
PNG-32可以顯示真彩色,同時(shí)支持256階透明,效果最好但尺寸也最大
圖片尺寸的選擇
尺寸,曾經(jīng)是最不需要討論的話(huà)題,但自從Retina出現之后世界就變得復雜多了。
這里只說(shuō)我們關(guān)心的部分和結論,我們需要分清不同類(lèi)型的像素:CSS像素和設備像素。一個(gè) CSS像素可能包含多個(gè)設備像素。對于圖片來(lái)說(shuō),在高DPI的屏幕上需要使用分辨率更高的圖片,如果我們討論的是Retina,那么就需要2倍分辨率(幾乎4倍尺寸)的圖片。這幾乎沒(méi)有取巧的空間,屏幕就是那么大,需要的圖片也就是那么大。(鴿子為什么那么大?^_^)
我們能夠控制的地方是“恰好”顯示所需尺寸的圖片。例如在屏幕中通過(guò)CSS或者
標簽的wihth/height屬性,將一副200x200的圖片調整為100x100大小,那么這其中就有(200x200)-(100x100)=30000個(gè)像素是浪費的,這占到了圖片尺寸的75%!西安網(wǎng)站建設推薦閱讀>>> 圖片優(yōu)化技巧八點(diǎn)建議,
之所以有這么大的浪費,是因為圖片的尺寸與面積基本成正比,與寬高的平方成正比。因此良好的計算客戶(hù)端實(shí)際顯示的圖片尺寸,能夠大大減小圖片的大小。即使只有長(cháng)和寬都只有10px被浪費,但是當圖片足夠大時(shí),這部分也將產(chǎn)生很大影響。
響應式圖片
上面提到“恰好”顯示客戶(hù)端所需大小的圖片,聽(tīng)上去很容易不是嗎?但當響應式布局出現后,這就變得極其困難。我們要支持上至1920寬度,下至320寬度的無(wú)數種設備,如果使用1920寬度的圖片,那么在小型設備(這類(lèi)設備往往對網(wǎng)速和流量更加敏感)上每個(gè)用戶(hù)都要付出額外的帶寬和等待時(shí)間,如果使用320寬度的圖片,那么在1920的屏幕上就像是在高清屏上使用DOS那么讓人難以接受。
很自然的,我們需要圖片也能“響應式”加載,根據所在設備的不同,加載不同尺寸的圖片。響應式圖片尚沒(méi)有寫(xiě)入Web標準,實(shí)現起來(lái)也有諸多不便和兼容性限制。
響應式圖片雖然尚未成為標準,但這是Web圖片優(yōu)化的一柄利器,一旦被廣泛支持,再沒(méi)有比縮小圖片尺寸更有效的優(yōu)化方法了。
優(yōu)化JPG和PNG
選擇了正確的圖片格式,按照正確的大小生成了圖片后,我們還需要對圖片進(jìn)行進(jìn)一步優(yōu)化,這種優(yōu)化一般分兩步進(jìn)行:
有損優(yōu)化,刪除沒(méi)有出現或極少出現過(guò)的顏色,合并相鄰的相近顏色。這一步并不必須,如PNG格式就直接進(jìn)入下一步
無(wú)損優(yōu)化,壓縮數據,刪除不必要的信息
JPG和PNG格式的圖片生成后,一般還有進(jìn)一步優(yōu)化的空間,例如JPG格式的照片中,可能攜帶有相機的Exif信息,PNG格式的圖片中可能帶有Fireworks等軟件的圖層信息等。去除這些額外信息后,還可以通過(guò)減小圖片的調色板,去除沒(méi)有出現過(guò)的顏色,以及合并相鄰的相同顏色等手段來(lái)進(jìn)行優(yōu)化。原理性的內容這里不再贅述,僅介紹工程中可用的優(yōu)化工具。
不同格式的圖片有一系列工具,這些工具有有更多種參數調節方案,常見(jiàn)的幾種調節工具有:
如果你真的需要追求各種圖片的極限壓縮,可以參閱這些工具的文檔,但是對于一般的Web應用,面對的圖片種類(lèi)多樣,幾乎不可能在工程中實(shí)現對每種工具的獨立配置,因此推薦使用以下工具來(lái)進(jìn)行優(yōu)化。這些工具往往使用了上表中的一種或幾種優(yōu)化工具。
ImageOptim (Mac)
主頁(yè):https://imageoptim.com/
Mac平臺下非常贊的圖片優(yōu)化工具,只需要把需要優(yōu)化的圖片拖拽進(jìn)ImageOptim,就能夠完成對圖片的優(yōu)化。設置選擇的也很豐富,目前支持JPG和PNG的優(yōu)化。這是我在寫(xiě)文章時(shí)最常用到的工具,把網(wǎng)站用到的圖片拖進(jìn)去,優(yōu)化就完成了~
Kraken (Web)
主頁(yè):https://kraken.io/
在免費模式下可以上傳圖片,優(yōu)化后打包下載,很多國外企業(yè)也選擇了它的收費服務(wù)。親自測試Kraken的圖片優(yōu)化結果比ImageOptim一般要小3%左右,效果不錯,當然價(jià)格也不錯。適合偶爾有圖片優(yōu)化需求,或者不在開(kāi)發(fā)機上沒(méi)有優(yōu)化軟件可以使用的情況。西安做網(wǎng)站推薦閱讀>>> 在seo網(wǎng)站建設讓圖片替你的網(wǎng)站“說(shuō)話(huà)”,
智圖 (Web)
主頁(yè):http://zhitu.tencent.com/
騰訊ISUX團隊有篇文章介紹智圖:http://isux.tencent.com/zhitu.html
國貨當自強,騰訊的智圖工具推出不久,但實(shí)測效果很好,而且提供了Gulp的自動(dòng)化支持,這部分會(huì )在后面自動(dòng)優(yōu)化章節介紹。只想建議一句,Kraken的首頁(yè)比智圖美好幾百倍…… 而且把壓縮前的PNG和壓縮后的JPG放在一起對比大小,真的沒(méi)關(guān)系么~
優(yōu)化SVG
所有較新的瀏覽器都支持可縮放矢量圖(SVG),SVG是基于XML的圖片格式,適用于二維圖片??梢詫VG標記直接嵌入網(wǎng)頁(yè),也可以作為外部資源嵌入??梢酝ㄟ^(guò)大多數基于矢量的繪圖軟件創(chuàng )建SVG文件。這是一段簡(jiǎn)單的SVG圖形:
這個(gè)圓形輪廓為黑色,背景為紅色,從Adobe Illustrator直接導出??梢詮闹锌吹酱罅吭獢祿?,例如圖層信息、注釋和XML名稱(chēng)空間等等,在瀏覽器中呈現資源時(shí),通常不需要這些數據。因此我們需要使用一些工具去除這些不必要的元數據,僅保留必須的標記。
SVGO工具可以縮減SVG文件的體積,在這個(gè)的例子中,SVGO能夠將Illustrator生成的SVG文件大小減小58%,從470字節縮減到199字節。
由于SVG是基于XML的格式,本質(zhì)上是純文本,所以,還可以采用GZIP壓縮來(lái)減小傳輸大小,當然這需要一些服務(wù)器配置,例如在apache服務(wù)器中設置:
AddType image/svg+xml .svgAddOutputFilterByType DEFLATE image/svg+xml
來(lái)對SVG文件啟用GZip壓縮(當然你還需要先加載deflate模塊并進(jìn)行適當配置,GZip的配置超出了本文的范疇,這部分內容請自行Google)
優(yōu)化GIF和APNG
GIF有很多好處,在顏色數較低的時(shí)候能夠大幅減小圖片體積,而且他也是唯一能夠較為通用的展示動(dòng)畫(huà)的圖片格式。關(guān)于GIF格式的優(yōu)化原理我并不熟悉,只是在工程中直接使用成型的壓縮工具,在后文自動(dòng)優(yōu)化章節的Grunt中,會(huì )介紹通過(guò)Grunt Task進(jìn)行自動(dòng)優(yōu)化的方法。
關(guān)于A(yíng)PNG,目前瀏覽器對他的支持還不夠好,不過(guò)在支持HTML5的場(chǎng)景中,有成熟的開(kāi)源工具apng-canvas可以用于支持APNG。
騰訊ISUX團隊有篇文章介紹iSparta工具:http://isux.tencent.com/introduction-of-apng.html。這是目前幾乎唯一能夠批量處理APNG文件的工具,感興趣的同學(xué)可以在那篇文章里得到更多地了解。
自動(dòng)優(yōu)化
前面說(shuō)了太多關(guān)于如何優(yōu)化各種不同格式圖片的方法和工具,優(yōu)化圖片需要大量重復性的勞動(dòng),作為工程師顯然不會(huì )忍受這一點(diǎn),因此也產(chǎn)生出了很多工具對圖片進(jìn)行自動(dòng)優(yōu)化,這里主要介紹CDN、Grunt/Gulp、Google PageSpeed三種方式。
自動(dòng)優(yōu)化:CDN
使用CDN對圖片自動(dòng)進(jìn)行優(yōu)化,我在國外的CDN提供商處很少見(jiàn)到這類(lèi)服務(wù),倒是國內的兩大新秀CDN七牛和又拍在這方面都做了大量工作。其工作方式為,向CDN請求圖片的URL參數中包含了圖片處理的參數(格式、寬高等),CDN服務(wù)器根據請求生成所需的圖片,發(fā)送到用戶(hù)瀏覽器。西安做網(wǎng)站推薦閱讀>>> 圖片背景網(wǎng)頁(yè)在網(wǎng)站建設中的運用,
七牛云存儲的圖片處理接口極其豐富,覆蓋了圖片的大部分基本操作,例如:
圖片裁剪,支持多種裁剪方式(如按長(cháng)邊、短邊、填充、拉伸等)
圖片格式轉換,支持JPG, GIF, PNG, WebP等,支持不同的圖片壓縮率
圖片處理,支持圖片水印、高斯模糊、重心處理等
七牛云存儲的圖片處理接口使用并不復雜,例如下面這張原圖:
我們通過(guò)如下URL請求,裁剪正中部分,等比縮小生成200x200縮略圖:
http://upload.chinaz.com/2014/1222/1419227799432.jpg?imageView2/1/w/200/h/200
自動(dòng)優(yōu)化:Grunt/Gulp
這里介紹用于圖片優(yōu)化的Grunt組件:grunt-image。前端工程師的重復性工作,例如合并靜態(tài)資源、壓縮JS和CSS文件、編譯SASS等都可以使用Grunt等自動(dòng)化工具批量完成,圖片優(yōu)化也是如此。
grunt-image非常強大,按照作者的介紹,其內部加載的圖片優(yōu)化工具包括了pngquant, optipng, advpng, zopflipng, pngcrush, pngout, mozjpeg, jpegRecompress, jpegoptim, gifsicle和svgo。支持批量自動(dòng)優(yōu)化PNG, JPG, SVG和GIF,速度也不錯,配置方式支持單圖片優(yōu)化和全目錄優(yōu)化:
自動(dòng)優(yōu)化:Google PageSpeed
Google做事風(fēng)格比較徹底,看見(jiàn)哪個(gè)軟件不好用就拿來(lái)直接fork出新版本或者干脆重寫(xiě),對于Web優(yōu)化,Google發(fā)布了了Google PageSpeed這個(gè)服務(wù)器模塊,可以在apache或ngnix中加載,通過(guò)在服務(wù)器配置文件中進(jìn)行設置來(lái)進(jìn)行自動(dòng)化的優(yōu)化。對于圖片格式轉換、圖片優(yōu)化甚至圖片LazyLoad都有相關(guān)選項。這部分展開(kāi)會(huì )非常長(cháng),請感興趣的同學(xué)參考Google的手冊。
--wizcabbit的博客
相關(guān)文章:
-
西安網(wǎng)站建設_西安做網(wǎng)站_西安網(wǎng)站制作——西安網(wǎng)絡(luò )公司...
-
從企業(yè)建站角度講,最便捷、最適合企業(yè)的建站系統莫過(guò)于自助建站系統,市場(chǎng)上可供選擇的自助建站平臺也是一搜一大把。這些自助建站平臺采用傻瓜式建站風(fēng)格,容易上手,操作簡(jiǎn)單方便...
-
現在想做一個(gè)網(wǎng)站成本很低了,買(mǎi)個(gè)域名,買(mǎi)個(gè)幾十塊空間,弄個(gè)網(wǎng)站建設程序就可以開(kāi)始你的玩耍了,如果你還想找成本更低的,可以看下面的分享。 如何創(chuàng )建網(wǎng)站一直都是很多朋友想要知...
-
商城網(wǎng)站建設如何將吸引力提升 在信息如此豐富多樣的今天,商城網(wǎng)站建設如何才能夠在眾多的同類(lèi)當中脫穎而出,獲得大眾的吸引和青睞呢?這其實(shí)是相關(guān)網(wǎng)站建設人員一直在思考的一個(gè)問(wèn)...
-
現在越來(lái)越多的企業(yè)重視網(wǎng)站的運營(yíng)推廣,那怎樣推廣效果更好呢?西安蟠龍網(wǎng)絡(luò )小編認為沒(méi)用永恒不變得,而且要根據企業(yè)的具體情況選擇合適的推廣方式才是最好的,如果你又運營(yíng)推廣的...
-
隨著(zhù)互聯(lián)網(wǎng)的發(fā)展,人們每時(shí)每刻已經(jīng)離不開(kāi)網(wǎng)絡(luò ),而網(wǎng)站是網(wǎng)絡(luò )的基本組成部分,可以這么說(shuō),網(wǎng)絡(luò )是由各種各樣的網(wǎng)站組成的,當下,網(wǎng)站是每個(gè)企業(yè)的標配,很多個(gè)人都有自己的網(wǎng)站,...
-
網(wǎng)站現在是一個(gè)企業(yè)的標配,很多沒(méi)有網(wǎng)站的企業(yè)不清楚網(wǎng)站對企業(yè)有什么作用,那么今天西安蟠龍小編總結一下網(wǎng)站對企業(yè)都有哪些好處,希望看完之后您對網(wǎng)站有更深一層的認識。 一、低...
-
現在網(wǎng)站對一個(gè)企業(yè)越來(lái)越重要了,網(wǎng)站不僅是一個(gè)公司必備的名片,而且有利于提升企業(yè)的品牌形象,低成本擴大公司銷(xiāo)售的一個(gè)重要渠道,可以將公司的業(yè)務(wù)和產(chǎn)品推向全國,那么公司想...
-
在互聯(lián)網(wǎng)發(fā)展至今天,網(wǎng)站對于一個(gè)企業(yè)越來(lái)越重要,網(wǎng)站不僅能有效的提升企業(yè)品牌知名度,企業(yè)形象,也是一個(gè)企業(yè)的有力的銷(xiāo)售渠道,網(wǎng)絡(luò )營(yíng)銷(xiāo)推廣做好了可以做全國的業(yè)務(wù),那一個(gè)企...
-
隨著(zhù)互聯(lián)網(wǎng)發(fā)展的迅猛,網(wǎng)站建設市場(chǎng)競爭越來(lái)越大,魚(yú)龍混雜,出現智能建站、模板建站、定制建站等服務(wù),很多朋友搞不清楚他們的區別,以及定制型網(wǎng)站有什么優(yōu)勢,今天西安蟠龍小編...