Java Web 前端高性能優(yōu)化(一)

Web 發(fā)展的速度讓許多人嘆為觀止碑韵,層出不窮的組件撬讽、技術(shù)蕊连,只需要合理的組合悬垃、恰當(dāng)?shù)脑O(shè)置游昼,就可以讓 Web 程序性能不斷飛躍。所有 Web 的思想都是通用的尝蠕,它們也可以運(yùn)用到 Java Web烘豌。這一系列的文章,主要講解網(wǎng)頁前端性能優(yōu)化看彼,是與用戶最直接接觸的廊佩。事實(shí)證明,與其消耗大量時間在服務(wù)器端靖榕,在前端進(jìn)行的優(yōu)化更易獲得用戶的肯定标锄。

一.引言

前端的高性能部分,主要是指減少請求數(shù)茁计、減少傳輸?shù)臄?shù)據(jù)以及提高用戶體驗(yàn)料皇,在這個部分,圖片的優(yōu)化顯得至關(guān)重要星压。許多網(wǎng)站的美化践剂,都是靠絢麗的圖片達(dá)到的,圖片恰恰是占用帶寬的元兇娜膘。每個 img 標(biāo)簽逊脯,瀏覽器都會試圖發(fā)起一個下載請求。本文就詳細(xì)介紹了圖片優(yōu)化的幾種方式竣贪,介紹了使用的工具以及優(yōu)化后的結(jié)果军洼。

二.圖片壓縮

減少圖片的大小,可以明顯的提高性能演怎,而對于已有圖片歉眷,要想減少圖片的大小,只能改變圖片的格式颤枪,這里推薦的是 PNG8 的格式汗捡,它可以在基本保持清晰度的情況下,減少圖片的大小。知道這個原理以后扇住,可以用 Windows 的畫圖工具春缕、以及 PhotoShop 工具逐個的改變。但是這樣做的缺點(diǎn)是單張?zhí)幚硭姨#侍簟1疚耐扑]一個在線轉(zhuǎn)換工具 Smush.it,可以批量的進(jìn)行壓縮與轉(zhuǎn)換女阀。它的地址是:www.smushit.com/ysmush.it 打開后效果如下圖所示宅荤。

圖 1. Yahoo 提供的在線壓縮工具

Java Web 前端高性能優(yōu)化(一)

我們上傳了一張大小為 3790K 的圖片,待在線程序處理完畢后浸策,點(diǎn)擊 Download Smushed Images 下載查看結(jié)果冯键。下載界面如下圖所示。

圖 2. 壓縮后的結(jié)果

Java Web 前端高性能優(yōu)化(一)

打開下載下來的壓縮包,查看結(jié)果可以看到,圖片從 3790 減少到了 3344套啤,就如下圖所示。對于大批量的圖片網(wǎng)站改化,這個方法會幫助快速實(shí)現(xiàn)批量圖片壓縮。

圖 3. 壓縮后的結(jié)果

Java Web 前端高性能優(yōu)化(一)
三.圖像合并實(shí)現(xiàn) CSS Sprites

CSS Sprites 是一個吸引人的技術(shù)枉昏,它其實(shí)就是把網(wǎng)頁中一些背景圖片整合到一張圖片文件中陈肛,再利用 CSS 的「background-image」,「background- repeat」兄裂,「background-position」的組合進(jìn)行背景定位句旱,background-position 可以用數(shù)字能精確的定位出背景圖片的位置。

利用CSS Sprites 能很好地減少網(wǎng)頁的 HTTP 請求懦窘,從而大大的提高了頁面的性能前翎,這也是 CSS Sprites 最大的優(yōu)點(diǎn),也是其被廣泛傳播和應(yīng)用的主要原因畅涂。

CSS Sprites 能減少圖片的字節(jié)港华,由于圖像合并后基本信息不用重復(fù),那么多張圖片合并成 1 張圖片的字節(jié)往往總是小于這些圖片的字節(jié)總和午衰。同時 CSS Sprites 解決了網(wǎng)頁設(shè)計(jì)師在圖片命名上的困擾立宜,只需對一張集合的圖片上命名就可以了,不需要對每一個小元素進(jìn)行命名臊岸,從而提高了網(wǎng)頁的制作效率橙数。更換風(fēng)格方便,只需要在一張或少張圖片上修改圖片的顏色或樣式帅戒,整個網(wǎng)頁的風(fēng)格就可以改變灯帮。維護(hù)起來更加方便崖技。同時,由于將圖片合并到一張圖片钟哥,因此圖片的請求數(shù)就被縮減到 1 個迎献。其他的請求都可以用到本地緩存,不需要訪問服務(wù)器腻贰。下圖是一個合并以后的圖片吁恍。它將很多小圖標(biāo)都拼到了一起。

圖 4. 合并后的圖片

Java Web 前端高性能優(yōu)化(一)

這里介紹一個小工具 ---「CSS Sprites 樣式生成工具 2.0」播演,可以從這里下載冀瓦。這是一個簡單免費(fèi)的小工具,用該工具打開上面的圖片写烤,選中圖片中的某塊翼闽。如下圖的「綠色大拇指」部分,工具會計(jì)算出這個部分的長顶霞、寬肄程、距離左上角的距離锣吼。勾選復(fù)制類名选浑、復(fù)制寬、復(fù)制高玄叠,再點(diǎn)擊「復(fù)制當(dāng)前樣式」按鈕古徒。這樣生成的樣式會被復(fù)制到剪切板上。

圖 5. 小工具的使用

Java Web 前端高性能優(yōu)化(一)

生成的 CSS 代碼如清單 1 所示读恃。

清單 1. 小工具生成的 CSS 代碼

<pre>
.div_6148{width:18px;height:20px;background-position:-17px -209px;}
</pre>

將這段代碼運(yùn)用在網(wǎng)頁上隧膘,

清單 2. 測試 CSS Sprites 代碼

<html>
 <head> 
     <style> 
           .div_6148 
           { 
              width:18px; 
              height:20px; 
              background-image:url(css-sprites-source.gif); 
              background-position:-17px -209px; 
   } 
     </style> 
 </head> 
 <body> 
 <div class="div_6148"></div> 
 </body> 
 </html>

打開測試網(wǎng)頁顯示結(jié)果如下圖所示。

圖 6. 測試網(wǎng)頁效果

Java Web 前端高性能優(yōu)化(一)

可以看到寺惫,網(wǎng)頁只顯示工具選擇的「綠色大拇指」部分疹吃,這樣的代碼可以運(yùn)用在網(wǎng)頁的多個部分,而圖片只需要下載一次西雀,這就是該技術(shù)的最大優(yōu)勢萨驶,減少了因?yàn)樾D片引起的多個請求。

四.多域名請求

有時候艇肴,圖片數(shù)據(jù)太多腔呜,一些公司的解決方法是將圖片數(shù)據(jù)分到多個域名的服務(wù)器上,這在一方面是將服務(wù)器的請求壓力分到多個硬件服務(wù)器上再悼。另一方面核畴,是利用了瀏覽器的特性。一般來說冲九,瀏覽器對于相同域名的圖片谤草,最多用 2-4 個線程并行下載。不同瀏覽器的并發(fā)下載數(shù),都是不同的丑孩,并發(fā)數(shù)如下清單 3 所示泳炉。

清單 3. 各瀏覽器的并發(fā)下載數(shù)
<pre>
Browsers HTTP/1.1 HTTP/1.0
IE6,7 2 4
IE8 6 6
FireFox 2 2 8
FireFox 3 6 6
Safari 3,4 4 4
Chrome 1,2 6 ?
Chrome 3 4 4
Opera 9.63,10.00alpha 4 4
</pre>

而相同域名的其他圖片,則要等到其他圖片下載完后才會開始下載嚎杨。 這里我做了一個測試花鹅,選擇了多個相同域名的圖片在同一網(wǎng)頁上。代碼如清單 4 所示枫浙。

清單 4. 單域名的多圖片下載

<html> 
 <body> 
 ![](http://upload-images.jianshu.io/upload_images/670102-2dfab3262eefa029.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)<br> 
 ![](http://img1.gtimg.com/news/pics/hv1/87/235/804/52340112.jpg)<br> 
 ![](http://upload-images.jianshu.io/upload_images/670102-8759f1e2c0ea0bf1.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)<br> 
 ![](http://upload-images.jianshu.io/upload_images/670102-ca6162d563011be8.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)<br> 
 ![](http://upload-images.jianshu.io/upload_images/670102-6657a57577f66636.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)<br> 
 ![](http://upload-images.jianshu.io/upload_images/670102-143762829154d40d.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 
 </body> 
 </html>

接下來刨肃,使用 FireFox 的 Firebug 插件監(jiān)控網(wǎng)絡(luò)(Firebugde 使用請參考Firebug,Debugger javascript 調(diào)試?yán)?附下載地址)。結(jié)果如下圖所示箩帚。

圖 7. 單域名多圖片的監(jiān)控效果

可以看到真友,相同域名的多張圖片,它們下載的起始點(diǎn)是存在延遲的紧帕。它們并不是并行下載盔然。當(dāng)我們將其中的 3 張圖片換成別的域名圖片。如清單 5 所示是嗜。

清單 5. 多域名多圖片下載

<html> 
 <body> 
 ![](http://upload-images.jianshu.io/upload_images/670102-2dfab3262eefa029.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)<br> 
 ![](http://img1.gtimg.com/news/pics/hv1/87/235/804/52340112.jpg)<br> 
 ![](http://upload-images.jianshu.io/upload_images/670102-8759f1e2c0ea0bf1.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)<br> 
 ![](http://upload-images.jianshu.io/upload_images/670102-fd3d845b871d6a02.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)<br> 
 ![](http://upload-images.jianshu.io/upload_images/670102-3a88f9cecd775a78.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)<br> 
 ![](http://upload-images.jianshu.io/upload_images/670102-962718b663de9e03.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 
 </body> 
 </html>

再次查看網(wǎng)絡(luò)監(jiān)控愈案,可以看到,這些圖片是并行下載的鹅搪。

圖 8. 多域名多圖片測試結(jié)果

Java Web 前端高性能優(yōu)化(一)

多域名的下載固然很好站绪,但是太多域名并不太好,一般在 2-3 個域名下載就差不多丽柿。

五.如何確定慢加載

上文介紹的主要是如何對圖片進(jìn)行優(yōu)化合并恢准,但是我們不可能對每個頁面的每個圖片都進(jìn)行上面的操作,所以甫题,如何獲知當(dāng)前頁面的慢加載圖片則尤為重要馁筐。

Browser Insight 主要是OneAPM開發(fā)的一款針對于前端頁面監(jiān)控以及前端性能優(yōu)化的工具,功能維度很豐富坠非,本文主要介紹的是其慢加載的瀑布流圖功能敏沉。

圖9.Browser Insight 頁面響應(yīng)時間

Java Web 前端高性能優(yōu)化(一)

圖10.資源列表-時序圖

Java Web 前端高性能優(yōu)化(一)

參考上面兩個圖片,我們可以在 Browser Insight 的「訪問頁面」的「慢加載追蹤」模塊進(jìn)入「資源列表時序圖」頁面麻顶,我們可以在這個頁面及其詳細(xì)的看到拖慢整個頁面加載的圖片赦抖、腳本、css 等辅肾,進(jìn)而進(jìn)行有針對性的優(yōu)化
(備注:本文轉(zhuǎn)載自 IBM 社區(qū)队萤,由 OneAPM 產(chǎn)品運(yùn)營編譯整理。)

Browser Insight 是一個基于真實(shí)用戶的Web前端性能監(jiān)控平臺矫钓,能夠幫大家定位網(wǎng)站性能瓶頸要尔,網(wǎng)站加速效果可視化舍杜;支持瀏覽器、微信赵辕、App瀏覽HTML和HTML5頁面既绩。想閱讀更多技術(shù)文章,請?jiān)L問 OneAPM 官方博客还惠。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末饲握,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子蚕键,更是在濱河造成了極大的恐慌救欧,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,454評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件锣光,死亡現(xiàn)場離奇詭異笆怠,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)誊爹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評論 3 385
  • 文/潘曉璐 我一進(jìn)店門蹬刷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人频丘,你說我怎么就攤上這事办成。” “怎么了椎镣?”我有些...
    開封第一講書人閱讀 157,921評論 0 348
  • 文/不壞的土叔 我叫張陵诈火,是天一觀的道長兽赁。 經(jīng)常有香客問我状答,道長,這世上最難降的妖魔是什么刀崖? 我笑而不...
    開封第一講書人閱讀 56,648評論 1 284
  • 正文 為了忘掉前任惊科,我火速辦了婚禮,結(jié)果婚禮上亮钦,老公的妹妹穿的比我還像新娘馆截。我一直安慰自己,他們只是感情好蜂莉,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,770評論 6 386
  • 文/花漫 我一把揭開白布蜡娶。 她就那樣靜靜地躺著,像睡著了一般映穗。 火紅的嫁衣襯著肌膚如雪窖张。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,950評論 1 291
  • 那天蚁滋,我揣著相機(jī)與錄音宿接,去河邊找鬼赘淮。 笑死,一個胖子當(dāng)著我的面吹牛睦霎,可吹牛的內(nèi)容都是我干的梢卸。 我是一名探鬼主播,決...
    沈念sama閱讀 39,090評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼副女,長吁一口氣:“原來是場噩夢啊……” “哼蛤高!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起碑幅,我...
    開封第一講書人閱讀 37,817評論 0 268
  • 序言:老撾萬榮一對情侶失蹤襟齿,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后枕赵,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體猜欺,經(jīng)...
    沈念sama閱讀 44,275評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,592評論 2 327
  • 正文 我和宋清朗相戀三年拷窜,在試婚紗的時候發(fā)現(xiàn)自己被綠了开皿。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,724評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡篮昧,死狀恐怖赋荆,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情懊昨,我是刑警寧澤窄潭,帶...
    沈念sama閱讀 34,409評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站酵颁,受9級特大地震影響嫉你,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜躏惋,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,052評論 3 316
  • 文/蒙蒙 一幽污、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧簿姨,春花似錦距误、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至域仇,卻和暖如春刑然,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背殉簸。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評論 1 266
  • 我被黑心中介騙來泰國打工闰集, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留沽讹,地道東北人。 一個月前我還...
    沈念sama閱讀 46,503評論 2 361
  • 正文 我出身青樓武鲁,卻偏偏與公主長得像爽雄,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子沐鼠,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,627評論 2 350

推薦閱讀更多精彩內(nèi)容