前端性能優(yōu)化之路——圖片篇证膨。

本人是一名前端開發(fā)者,在公司負責目前負責信息流服務鼓黔,為五大手機廠商和各大App提供服務央勒,每天的請求就是以億計算,加上我們又做了SSP和DSP澳化,就是類似于百度廣告聯(lián)盟崔步,騰訊廣點通這種。接觸過的應該知道缎谷,所以前端優(yōu)化一直是我頭痛的問題井濒,不僅要注重用戶體驗,同時要兼顧收益列林,有時候必須犧牲一些用戶體驗瑞你,但是作為一名有思想的前端,還是努力規(guī)避掉希痴,希望能和從事相同業(yè)務的同學一起學習交流一下者甲,話不多說,就來分享我的性能優(yōu)化之路砌创,有什么不對的知識點过牙,麻煩大家指出批評甥厦。

  • 先附上基本的yahoo軍規(guī)——yahoo前端性能團隊總結的35條黃金定律
    image

yahoo軍規(guī)把大部分的前端優(yōu)化都提到了纺铭,而在js優(yōu)化這一塊如果有興趣的額寇钉,推薦大家去看《高性能javascript》,書里講的非常詳細。https://segmentfault.com/a/1190000008481413

  • web前端優(yōu)化之圖片優(yōu)化

Media Queries 調用高清背景圖

國內手機發(fā)展迅速舶赔,用 retina顯示屏的越來越多扫倡,假如現(xiàn)在有一張圖片,有兩部手機竟纳,一部是普通顯示屏撵溃,一部是高清顯示屏,在同樣大小的屏幕上锥累,高清顯示屏中的位圖會被放大缘挑,圖片會變得模糊。

通過 devicePixelRatio的值桶略,就可以區(qū)分普通顯示屏和高清屏语淘,當devicePixelRatio值等于1時(也就是最小值),那么它普通顯示屏际歼,當devicePixelRatio值大于1(通常是1.5惶翻、2.0),那么它就是高清顯示屏鹅心。這時候我們可以讓UI準備2套圖片吕粗,甚至是3套圖片,不同像素的圖利用媒體查詢結合 devicePixelRatio 可以區(qū)分普通顯示屏和高清顯示屏旭愧,并給出了如下CSS設計方案:

.css{/* 普通顯示屏(設備像素比例小于等于1.3)使用1倍的圖 */ 
    background-image: url(img_1x.png);
}
@media only screen and (-webkit-min-device-pixel-ratio:1.5){
.css{/* 高清顯示屏(設備像素比例大于等于1.5)使用2倍圖  */
    background-image: url(img_2x.png);
  }
}

也可以用less或者sass

bg-image($url)
  background-image: url($url + "@2x.png")
  @media (-webkit-min-device-pixel-ratio: 3),(min-device-pixel-ratio: 3)
    background-image: url($url + "@3x.png")

如果省時間通用性高颅筋,就像我們是服務端用nginx對圖片進行處理,想要什么樣尺寸的圖片自己裁切,我們提供了按比例縮放和自定尺寸的裁切方法输枯,地址后拼接字符串就行议泵。

http://image.uczzd.cn/12046251381056834816.jpg?id=0&from=export&width=800&height=600

  • 使用更小更快更強,新一代圖片格式 WebP

WebP是谷歌在10年推出一種新型圖片格式用押,最早也是應用在谷歌產品中肢簿,谷歌發(fā)布的Android Studio 2.3正式版中就包括對WebP支持的更新,在實測中蜻拨,webp 格式比 jpg 格式減小約 20%池充。這對優(yōu)化用戶體驗,減少CDN帶寬消耗有很好的效果缎讼,但并不是所有瀏覽器都支持 webp 收夸,所以為了使用 webp,需要做一點兼容性的工作血崭。

與其他圖片格式相比卧惜,在肉眼無法分辨圖片質量差異的情況下厘灼,WebP的空間占用是最小的,目前國內外各大互聯(lián)網公司都已經開始應用這一圖片格式咽瓷。比如美團


image

想實現(xiàn)首先是判斷设凹,即識別單次訪問的來源瀏覽器是否支持 webp 格式,其次是執(zhí)行茅姜,如果該瀏覽器支持闪朱,則將原圖替換為 webp 格式,并返回钻洒。如果不支持奋姿,則顯示原格式圖片。http://caniuse.mojijs.com/Home/Html/item/key/webp/index.html

image

在識別階段素标,我們有兩種方法:

1. Server 處理

  • 通過 UAString 判斷瀏覽器支持情況

只要有請求称诗,服務端就能拿到你的User-Agent信息,通過對瀏覽器進行分類头遭,支持webp放在白名單里寓免,不支持的則為黑名單。判斷為白名單任岸,則直接調用再榄,返回webp格式圖片;反之享潜,則顯示原圖困鸥。這種方式的優(yōu)點在于,只需定期維護白名單即可剑按,邏輯簡單疾就;缺點則在于不可擴展、不可測試艺蝴、UA判斷會出現(xiàn)不準確的情況猬腰。

  • 讀取 JavaScript 種下的 cookie 判斷瀏覽器支持情況

Server處理中的另一種方式是通過讀取 JavaScript 種下的 cookie來實現(xiàn)判斷。這種方式的優(yōu)點是表現(xiàn)穩(wěn)定猜敢,訪問速度更快姑荷,切換無壓力。但缺點是缩擂,頁面靜態(tài)化會導致用戶切換瀏覽器時不能自主更新鼠冕,圖片服務失效。比如用戶用支持webp的瀏覽器A請求頁面胯盯,這時緩存的靜態(tài)頁面均使用webp圖片懈费,但當該用戶使用不支持webp的瀏覽器B時,訪問網頁則會出現(xiàn)請求不到圖片的報錯博脑。

  • Client 處理

Client 處理憎乙,是美團云為美團主站提供的處理方式票罐。在這種處理方式中,瀏覽器端發(fā)送的beacon webp 請求后泞边,通過檢測其加載情況來判定 webp 支持情況该押,然后瀏覽器寫一個cookie。之后通過讀取瀏覽器cookie判斷是否支持webp繁堡,就可以進行下一步替換操作了沈善。

2.替換圖片過程中也是有兩種處理方式:

  • Server 處理

在 server 端處理的優(yōu)點是對下游開發(fā)者透明,缺點是靜態(tài)頁面的緩存數(shù)量會翻倍椭蹄。

替換方式如下:

  1. 生成 URL 的函數(shù)( 比如 $deal->getImageUrl ) ,通過運行函數(shù)中直接實現(xiàn)替換
  2. 對 varnish 靜態(tài)化的頁面净赴,首先識別瀏覽器請求頭類型绳矩,然后將webp 和傳統(tǒng) jpg 的各緩存一份兩份待處理。然后在生成 URL 的地方做替換玖翅。
  • Client 處理

在 client 端處理可以比較好地應對頁面靜態(tài)化的情況翼馆,主要針對懶加載(非首屏)的圖片進行處理,直接通過修改懶加載器來實現(xiàn)金度。
對非懶加載的圖片暫時沒有特別好的辦法应媚。目前,可用替換路徑的方式來處理猜极。

Client 處理實際上效果也是不錯的中姜,美團頁面里90%以上的圖片都是懶加載的,基本上都可以滿足需求跟伏。對于大多數(shù)用戶來說丢胚,采用Client 處理實現(xiàn)webp轉換是個不錯的選擇。

  • tracking Pixel(像素追蹤)精準追蹤數(shù)據(jù)

既然提到圖片這一塊受扳,我有忍不住想扯寫些題外的tracking Pixel(像素追蹤)携龟,幾乎所有網站都會做數(shù)據(jù)的采集,上報統(tǒng)計勘高。特別是我們做SSP峡蟋、DSP廣告這塊需要獲取例如

  • 用戶使用的瀏覽器、操作系統(tǒng)华望、分辨率等蕊蝗。
  • 用戶瀏覽行為記錄,比如用戶網站上的點擊行為立美、購買行為等匿又。
  • 用戶在APP、WEB中停留時間建蹄、是否活躍等

數(shù)據(jù)永遠說的是實話碌更,數(shù)據(jù)證明一切可能裕偿。如facebook廣告投放的跨境電商朋友都會使用facebook Pixel(像素追蹤)以獲得各環(huán)節(jié)的精準數(shù)據(jù)。這樣追蹤數(shù)據(jù)后痛单,我們才能投放廣告后銷量上去了嘿棘,哪個才是效果最好的,哪個效果不好旭绒,進而通過多個數(shù)據(jù)對比鸟妙,對廣告進行合理的調整優(yōu)化。

國內搜狗挥吵、百度重父、360、新浪都是用這種tracking Pixel方法忽匈,實際就是利用1px 的圖片房午,在圖片地址后綴拼接你需要的信息參數(shù),瀏覽器在請求任何資源的時候會發(fā)送當前系統(tǒng)的數(shù)據(jù)丹允,比如瀏覽器信息郭厌,操作系統(tǒng)信息,作為http請求頭送過去雕蔽,他們就能統(tǒng)計了折柠。

為什么不用js請求統(tǒng)計?

并不是所有的頁面都支持JS的批狐!NoJSStats的實現(xiàn)機制就是網站分析中點擊流數(shù)據(jù)獲取的方式之一——Web Beacons扇售,即在頁面中嵌入一個1像素的透明圖片,當該頁面被瀏覽時贾陷,圖片就會被請求加載缘眶,于是在后端的服務器日志中就會記錄該圖片的請求日志,這樣就可以獲得日志記錄髓废。

image

例如百度:

這是百度1px圖片地址: http://wn.pos.baidu.com/adx.php?

var url = ["http://eclick.baidu.com/se.jpg?", "type=fatalError", "data=1220", "mes=" + encodeURIComponent(e)].join("&"),    
img = new Image;    
img.src = url
百度在地址欄后拼接了很多參數(shù)巷懈,后端按照圖片后綴名生成對應的數(shù)據(jù)報表。

本文引用@美團云 提供的webP方法慌洪,感謝顶燕。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市冈爹,隨后出現(xiàn)的幾起案子涌攻,更是在濱河造成了極大的恐慌,老刑警劉巖频伤,帶你破解...
    沈念sama閱讀 218,386評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件恳谎,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機因痛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評論 3 394
  • 文/潘曉璐 我一進店門婚苹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人鸵膏,你說我怎么就攤上這事膊升。” “怎么了谭企?”我有些...
    開封第一講書人閱讀 164,704評論 0 353
  • 文/不壞的土叔 我叫張陵廓译,是天一觀的道長。 經常有香客問我债查,道長非区,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,702評論 1 294
  • 正文 為了忘掉前任攀操,我火速辦了婚禮院仿,結果婚禮上,老公的妹妹穿的比我還像新娘速和。我一直安慰自己,他們只是感情好剥汤,可當我...
    茶點故事閱讀 67,716評論 6 392
  • 文/花漫 我一把揭開白布颠放。 她就那樣靜靜地躺著,像睡著了一般吭敢。 火紅的嫁衣襯著肌膚如雪碰凶。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,573評論 1 305
  • 那天鹿驼,我揣著相機與錄音欲低,去河邊找鬼。 笑死畜晰,一個胖子當著我的面吹牛砾莱,可吹牛的內容都是我干的。 我是一名探鬼主播凄鼻,決...
    沈念sama閱讀 40,314評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼腊瑟,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了块蚌?” 一聲冷哼從身側響起闰非,我...
    開封第一講書人閱讀 39,230評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎峭范,沒想到半個月后财松,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 45,680評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡纱控,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,873評論 3 336
  • 正文 我和宋清朗相戀三年辆毡,在試婚紗的時候發(fā)現(xiàn)自己被綠了菜秦。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,991評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡胚迫,死狀恐怖喷户,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情访锻,我是刑警寧澤褪尝,帶...
    沈念sama閱讀 35,706評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站期犬,受9級特大地震影響河哑,放射性物質發(fā)生泄漏。R本人自食惡果不足惜龟虎,卻給世界環(huán)境...
    茶點故事閱讀 41,329評論 3 330
  • 文/蒙蒙 一璃谨、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧鲤妥,春花似錦佳吞、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至贡耽,卻和暖如春衷模,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蒲赂。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評論 1 270
  • 我被黑心中介騙來泰國打工阱冶, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人滥嘴。 一個月前我還...
    沈念sama閱讀 48,158評論 3 370
  • 正文 我出身青樓木蹬,卻偏偏與公主長得像,于是被迫代替她去往敵國和親氏涩。 傳聞我的和親對象是個殘疾皇子届囚,可洞房花燭夜當晚...
    茶點故事閱讀 44,941評論 2 355

推薦閱讀更多精彩內容

  • 發(fā)現(xiàn) 關注 消息 iOS 第三方庫、插件是尖、知名博客總結 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 12,104評論 4 62
  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案意系? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標簽默認的外補...
    _Yfling閱讀 13,754評論 1 92
  • 濠濮之樂閱讀 159評論 0 3
  • **印象筆記超效率數(shù)字筆記術** 1. 把郵件和工作筆記捆綁在一起使用,訣竅是在郵箱中建立印象筆記郵箱饺汹。 2. 創(chuàng)...
    屠海良閱讀 847評論 0 8
  • 在我的閨蜜當中蛔添,閨蜜們都說我是四個人當中最理性的一個。 其實沒有誰是天生理性的,我也是慢慢有意識訓練出來的迎瞧。比如說...
    營養(yǎng)私教西西閱讀 218評論 0 1