前端|加載的圖片太多或太大如何優(yōu)化(上)

摘要

web性能的終極目標(biāo)是減少資源到客戶端的延遲,但是我們在HTTP1.0/HTTP1.1協(xié)議中經(jīng)常會遇到加載的圖片太多或者太大導(dǎo)致頁面加載完成慢的問題:圖片太多導(dǎo)致向服務(wù)器請求的次數(shù)太多,圖片太大導(dǎo)致每次請求的時間過長.

本篇將針對圖片太多或者太大總結(jié)幾種優(yōu)化方案.

一.當(dāng)圖片太多時

方案一:將圖片服務(wù)和應(yīng)用服務(wù)分離(從架構(gòu)師的角度思考)

對于這個方案對于經(jīng)驗(yàn)尚淺的我來說是考慮不多的,通過跟leader溝通,了解到這一點(diǎn),此方案是架構(gòu)師在架構(gòu)過程中必須要考慮到的.

對于服務(wù)器來說,圖片始終是最消耗系統(tǒng)資源的,如果將圖片服務(wù)和應(yīng)用服務(wù)放在同一服務(wù)器的話,應(yīng)用服務(wù)器很容易會因?yàn)閳D片的高I/O負(fù)載而崩潰,所以當(dāng)網(wǎng)站存在大量的圖片讀寫操作時,建議使用圖片服務(wù)器.

(注:圖片服務(wù)器是專門為圖片讀寫操作優(yōu)化的獨(dú)立服務(wù)器,運(yùn)行網(wǎng)站的服務(wù)器稱為應(yīng)用服務(wù)器)

另外瀏覽器在同一時間對同一域名下的資源的并發(fā)請求數(shù)目是有限制的,一般在2-6之間,超過限制數(shù)目的請求就會被阻塞.一些主流瀏覽器對 HTTP1.1 和 HTTP 1.0 的最大并發(fā)連接數(shù)目框仔,可以參考如下圖一:


圖一(來源于網(wǎng)絡(luò))

把圖片服務(wù)器與應(yīng)用服務(wù)器分開,圖片服務(wù)器采用獨(dú)立域名 ,css、js和圖片就可以并發(fā)請求了

方案二:簡單粗暴的壓縮方案

我們可以借助一些第三方軟件來進(jìn)行壓縮,比如https://tinypng.com/,壓縮后分辨率不變,肉眼看不失真


圖二

方案三:圖片懶加載

像淘寶或者京東這樣的APP頁面上有很多圖片,當(dāng)我們滑到下一屏?xí)r下一屏的圖片才會加載,這就采用了圖片懶加載的方式.

圖片懶加載,簡單來說就是在頁面渲染過程中,圖片不會一次性全部加載,會在需要的時候加載,比如當(dāng)滾動條滾動到某一個位置時觸發(fā)事件加載圖片,如下代碼:

通過js將img標(biāo)簽的data-src屬性賦值給src屬性

方案四:css Sprites

當(dāng)網(wǎng)站或者APP有大量小icon,如果上傳到圖片服務(wù)器比如CDN, 要加載所有這些小icon將增加大量請求,而CDN是按流量收費(fèi)的,這無疑將增加很多成本.

CSS Sprites 技術(shù)早已不新鮮,就是將這些小icon合并成一張圖片,只需要加載一次,每次通過background-position來控制顯示icon,這樣就可以節(jié)約大量請求,節(jié)約成本.

此方案是將網(wǎng)站上的一些小logo拼合成一個大圖,如圖


圖三(圖片來源于網(wǎng)絡(luò))

不過這也有一定的缺點(diǎn):在長期開發(fā)多人合作的項(xiàng)目中,會不好維護(hù)這些sprites,每次對icon做修改,都得相應(yīng)的改動css里background-position的值,相當(dāng)繁瑣.

方案五:將圖片壓縮成base64格式來節(jié)約請求

將圖片壓縮成base64,隨html或者css一起下載到瀏覽器,不需要額外的請求,這樣就節(jié)約了請求.

我們知道圖片在傳輸過程中是流傳輸,如果將圖片轉(zhuǎn)換成base64,實(shí)際上是變大了,并且瀏覽器在decode? base64編碼的圖片時需要耗費(fèi)很多時間的,所以如果我們選擇此種方案的話,最好選擇一些小圖片,不然得不償失,在webpack中可以設(shè)置最大多少byte的圖片壓縮成base64


圖四

針對decode base64編碼的圖片比較慢的問題,我們可以選擇使用canvas來加速.當(dāng)向canvas發(fā)出繪畫命令時,瀏覽器直接將指令發(fā)到圖形加速器而不需要開發(fā)者更多的干預(yù),硬件圖形加速器則以難以執(zhí)行的運(yùn)算速度實(shí)時繪畫和渲染圖形.因此,我們可以使用canvas來渲染base64編碼后的圖片

具體代碼如下: (代碼出處:? http://www.reibang.com/p/ea7c0ee8aa64)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市冰蘑,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖蛹尝,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異悉尾,居然都是意外死亡突那,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進(jìn)店門构眯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來愕难,“玉大人,你說我怎么就攤上這事∶ㄧ裕” “怎么了葱弟?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長猜丹。 經(jīng)常有香客問我芝加,道長,這世上最難降的妖魔是什么射窒? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任藏杖,我火速辦了婚禮,結(jié)果婚禮上脉顿,老公的妹妹穿的比我還像新娘蝌麸。我一直安慰自己,他們只是感情好艾疟,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布祥楣。 她就那樣靜靜地躺著,像睡著了一般汉柒。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上责鳍,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天碾褂,我揣著相機(jī)與錄音,去河邊找鬼历葛。 笑死正塌,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的恤溶。 我是一名探鬼主播乓诽,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼咒程!你這毒婦竟也來了鸠天?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤帐姻,失蹤者是張志新(化名)和其女友劉穎稠集,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體饥瓷,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡剥纷,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了呢铆。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片晦鞋。...
    茶點(diǎn)故事閱讀 38,064評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出悠垛,到底是詐尸還是另有隱情线定,我是刑警寧澤,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布鼎文,位于F島的核電站渔肩,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏拇惋。R本人自食惡果不足惜周偎,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望撑帖。 院中可真熱鬧蓉坎,春花似錦、人聲如沸胡嘿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽衷敌。三九已至勿侯,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間缴罗,已是汗流浹背助琐。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留面氓,地道東北人兵钮。 一個月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像舌界,于是被迫代替她去往敵國和親掘譬。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,802評論 2 345

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

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,510評論 25 707
  • 網(wǎng)站優(yōu)化離不開前后端的互相協(xié)作呻拌,但是對于前端工程師來說葱轩,在保證后端技術(shù)方案不變時,能不能只利用前端技術(shù)來優(yōu)化網(wǎng)站呢...
    留七七閱讀 6,305評論 0 31
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理藐握,服務(wù)發(fā)現(xiàn)酿箭,斷路器,智...
    卡卡羅2017閱讀 134,599評論 18 139
  • 圍繞前端的性能多如牛毛趾娃,涉及到方方面面缭嫡,以我我們將圍繞PC瀏覽器和移動端瀏覽器的優(yōu)化策略進(jìn)行羅列注意,是羅列不是展...
    流動碼文閱讀 674評論 0 0
  • 我是范雨素(原文鏈接在界面網(wǎng)站上已經(jīng)沒有了) 一位來自農(nóng)村打工婦女的自述耕突。每個人都有自己的生活,從她的文字中评架,你讀...
    來自西界閱讀 178評論 0 0