2在服務(wù)端合并和壓縮JavaScript和CSS文件
Web性能優(yōu)化最佳實踐中最重要的一條是減少HTTP請求,它也是YSlow中比重最大的一條規(guī)則。減少HTTP請求的方案主要有合并JavaScript和CSS文件、CSS Sprites、圖像映射(Image Map)和使用Data URI來編碼圖片。CSS Sprites和圖像映射現(xiàn)在已經(jīng)隨處可見了,但由于IE6和IE7不支持Data URI以及性能問題,這項技術(shù)尚未大量使用。目前大部分網(wǎng)頁中的JavaScript和CSS文件數(shù)量和開發(fā)時一致,少量的網(wǎng)頁會根據(jù)實際情況采取本地合并,這些合并中相當多的是有選擇地手動完成,每次新的合并都需要重新在本地完成并上傳到服務(wù)器,比較的隨意和繁瑣,同樣文件的壓縮也有類似的情況。而利用服務(wù)端的合并和壓縮,我們就可以按照開發(fā)的邏輯盡可能讓文件的顆粒度變小,利用網(wǎng)頁中URL的規(guī)則來自動實現(xiàn)文件的合并和壓縮,這會相當?shù)撵`活和高效。
YUI Combo Handler
2008年7月YUI Team宣布在YAHOO! CDN上對YUI JavaScript組件提供Combo Handler服務(wù)。Combo Handler是Yahoo!開發(fā)的一個Apache模塊,它實現(xiàn)了開發(fā)人員簡單方便地通過URL來合并JavaScript和CSS文件,從而大大減少文件請求數(shù)。比如在頁面上使用YUI2的Rich Text Editor組件需要引入多個JavaScript文件,常用方式如下:
<script src="http://yui.yahooapis.com/2.8.0r4/build/yahoo-dom-event/yahoo-dom-event.js"></script> <script src="http://yui.yahooapis.com/2.8.0r4/build/container/container_core-min.js"></script> <script src="http://yui.yahooapis.com/2.8.0r4/build/menu/menu-min.js"></script> <script src="http://yui.yahooapis.com/2.8.0r4/build/element/element-min.js"></script> <script src="http://yui.yahooapis.com/2.8.0r4/build/button/button-min.js"></script> <script src="http://yui.yahooapis.com/2.8.0r4/build/editor/editor-min.js"></script>
而使用Combo Handler服務(wù)之后,則上述的代碼可以寫為:
<script src="
除了代碼的可讀性稍稍有一點點降低外,使用Combo Handler服務(wù)大大的降低了HTTP請求數(shù),同時也減少了URL代碼量,這對于Web性能優(yōu)化來講至關(guān)重要。所以,隨后YUI從2.6.0開始,其核心組件YUI Loader內(nèi)置了Combo Handling功能,即使用YUI Loader時,通過配置combine屬性就可以把要加載的多個JavaScript或CSS文件按照使用Combo Handler服務(wù)的形式合并起來,這時只要靜態(tài)文件的服務(wù)器支持Combo Handler就行了。在YUI中當combine配置為true時,CDN默認是使用Yahoo! CDN(http://yui.yahooapis.com),所以沒有任何問題。這正是YUI最迷人的地方之一。
遺憾的是http://yui.yahooapis.com在中國的速度并不佳,本來中國雅虎提供http://cn.yui.yahooapis.com/ ,但尚未提供Combo Handler服務(wù),同時因種種原因,其更新在YUI 2.7.0之后就停滯了。更糟糕的是Yahoo!開發(fā)的支持Combo Handler的Apache模塊雖然據(jù)傳有計劃開源,但至少現(xiàn)在依舊是私有技術(shù),要使用就需要自己實現(xiàn)類似功能,所以國內(nèi)類似技術(shù)的應(yīng)用并不太多。
出處:隨網(wǎng)之舞
責任編輯:bluehearts
上一頁 下一頁 服務(wù)端合并和壓縮JS和CSS文件 [2]
◎進入論壇網(wǎng)頁制作、WEB標準化版塊參加討論,我還想發(fā)表評論。
|