WebP 在減少圖片體積和流量上的效果如何?—— WebP 技術實踐分享

作者 | Jackson
編輯 | 尾尾

不論是 PC 還是移動端,圖片一直占據著頁面流量的大頭,在圖片的大小和質量之間如何權衡,成為了長期困擾開發者們的問題。而 WebP 技術的出現,為解決該問題提供了好的方案。本文將為大家詳細介紹 WebP 技術,同時也會分享該技術在 MIP 項目)中的實踐。

一、什么是 WebP ?

WebP 是由 Google 收購 On2 Technologies 后發展出來的圖片格式,以BSD授權條款發布。目前已經在不同廠商之間進行了嘗試,如Google、Facebook、ebay、百度、騰訊、淘寶等。

二、為什么選擇 WebP?

1. WebP 的優勢

WebP 在支持有損、無損、透明圖片壓縮的同時,大大減少了圖片的體積。據統計,WebP 無損壓縮后比 PNG 圖片體積減少了 26%,有損圖片比同類 JPEG 圖像體積減少了 25%~34%,下面總結 WebP 在不同指標上所能獲得的提升對比。

(1)體積和流量方面

根據業界給出的改造數據可知,改造 WebP 之后圖片體積會降低很多,具體可參照 WebP 體積測試鏈接,同時也可參照下圖。

圖片

在 MIP 項目)中,通過我們的本地測試獲得的數據如下圖所示。

圖片

從以上測試可知,如果將體積換算成帶寬,WebP 不同模式下都會節省大量流量。科技博客 Gig???aOM 曾報道,谷歌的 Chrome 網上應用商店采用 WebP 格式圖片后,每天可以節省幾 TB 的帶寬;Google+ 移動應用采用 WebP 圖片格式后,每天節省了 50TB 數據存儲空間。

(2)速度方面

圖片的加載速度還要取決于網絡時間,所以我們沒有測試確定的數據,不過可以參考業界的數據:科技博客 Gig???aOM 曾報道,YouTube 的視頻略縮圖采用 WebP 格式后,網頁加載速度提升了 10%;谷歌的 Chrome 網上應用商店采用 WebP 格式圖片后,頁面平均加載時間大約減少 1/3。

2. 兼容性

目前來說,WebP 的支持程度也在不斷上升,據 2017年10月12日在 can i use 上的查詢顯示,全球 WebP 的支持程度已經達到 73.64%,如下圖所示。

WebP 支持程度圖解

而也正是因為這種天然的圖片體積優勢和發展趨勢,MIP 團隊也決定進行初步的實踐嘗試,以提升頁面用戶體驗。

三、WebP 實踐經驗

1. 如何判斷瀏覽器支持程度?

WebP 的判斷方法在官方文檔中進行了總結,大致分為 HTML5 picture、嗅探和Request Header三種方式,下面展開介紹這三種方式。

(1)HTML5 picture

這種方法不進行 WebP 支持程度的判斷,而是利用 html5 picture 元素的特性,允許開發者列舉出多個圖片地址,瀏覽器根據順序展示出第一個能夠展現的圖片元素,如

<picture><source type="image/webp" srcset="images/webp.webp"><img src="images/webp.jpg" alt="webp image">
</picture>復制代碼

上面的示例在瀏覽器不支持 WebP 圖片的情況下自動回退到 jpg 格式進行展示,但 picture 的支持程度還不是很完善,開發者可以根據需求決定是否進行使用。

圖片

(2)嗅探

嗅探的方式是指直接向瀏覽器中插入一段 base64 的 WebP 圖片,檢測圖片是否能夠正常加載,依據該方法進而判斷支持程度,如官方給出的嗅探函數:

// check_webp_feature:
//   'feature' can be one of 'lossy', 'lossless', 'alpha' or 'animation'.
//   'callback(feature, result)' will be passed back the detection result (in an asynchronous way!)
function check_webp_feature(feature, callback) {var kTestImages = {lossy: "UklGRiIAAABXRUJQVlA4IBYAAAAwAQCdASoBAAEADsD+JaQAA3AAAAAA",lossless: "UklGRhoAAABXRUJQVlA4TA0AAAAvAAAAEAcQERGIiP4HAA==",alpha: "UklGRkoAAABXRUJQVlA4WAoAAAAQAAAAAAAAAAAAQUxQSAwAAAARBxAR/Q9ERP8DAABWUDggGAAAABQBAJ0BKgEAAQAAAP4AAA3AAP7mtQAAAA==",animation: "UklGRlIAAABXRUJQVlA4WAoAAAASAAAAAAAAAAAAQU5JTQYAAAD/AABBTk1GJgAAAAAAAAAAAAAAAAAAAGQAAABWUDhMDQAAAC8AAAAQBxAREYiI/gcA"};var img = new Image();img.onload = function () {var result = (img.width > 0) && (img.height > 0);callback(feature, result);};img.onerror = function () {callback(feature, false);};img.src = "data:image/webp;base64," + kTestImages[feature];
}復制代碼

其中包含了對有損、無損、透明圖、動圖等 WebP 圖片的嗅探,這是一種最為保險的方法。不過缺點也很明顯,在圖片類型不一且量級較大的情況下,前端并不能知道哪些圖片是有損,無損,亦或是透明的,也沒有辦法對其中一種特定類型做特定策略,所以即使知道不支持該類型的 WebP,然而我們也沒有辦法主觀的去做容錯。所以這種方法只適合于圖片類型單一的情況,如開發者知道所有圖片都是有損的,或是動圖等,有針對性的去處理。

同時在處理的過程中,為了提高嗅探效率,嗅探之后可以將結果以本地存儲的方式進行保存,如cookie ,方便下次直接進行調用。

(3)Request Header

這種方式是較為符合標準的解決方案,瀏覽器在支持 WebP 圖片格式的情況下,會在請求的 http header accept 中攜帶 webp/image 的字段,后端接收到請求之后可以按照該形式來判斷是否返回 WebP 圖片內容。

MIP 在實踐中采用的是該方法,當用戶訪問 MIP Cache 上的頁面時,不需要開發者替換圖片,MIP Cache 根據 http header 自動決定是否返回 WebP 圖片內容。

不過這個過程也依然有坑——國內瀏覽器層出不群,大部分都向標準化的方向靠近,但仍然需要一定的時間來跟進。所以,在實踐過程中我們就發現了這樣的問題:雖然 http header accept 中包含了 webp/image 的字段,但實際上是不支持 WebP 格式的(華為 MT7 自帶瀏覽器),具體體現在動圖(animation)的 feature 上。而相應的解決方案其實也很簡單,就是在 WebP 圖片加載失敗后發起原圖請求,讓圖片能夠正確的展示在頁面上,具體方式是通過 img onerror 函數執行對應邏輯。

2. WebP轉換工具

WebP 的轉換工具很多,主要包含了命令行和可視化界面兩種:

(1)命令行

官方對于每一種 WebP 格式也分別提供了對應的轉換工具,主要包含了cwebp、dwebp、vwebp、webpmux、gif2webp 等幾種,開發者可以擇優選擇。

(2)可視化

頁面也提供了不同可視化的軟件進行 WebP 格式圖片轉換,如:iSparta。

四、總結

WebP 作為一種新型圖片格式,不但能夠節省流量,減少圖片體積,一定程度上也可以優化用戶體驗。MIP 項目對于 WebP 支持目前已上線,大家可以瀏覽 MIP 頁面進行體驗。同時作為關注速度優化的 MIP 團隊,我們將不斷迭代前行,致力于打造極致的用戶體驗。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/280113.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/280113.shtml
英文地址,請注明出處:http://en.pswp.cn/news/280113.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

chrome 固定縮放比例_您如何調整Google Chrome瀏覽器的用戶界面縮放比例?

chrome 固定縮放比例Everything can be going along nicely until a program gets a new update that suddenly turns everything into a visual mess, like scaling up the UI, for example. Is there a simple solution? Today’s SuperUser Q&A post has some helpful …

樹莓派 Raspberry Pi 更換國內源

http://www.shumeipaiba.com/wanpai/jiaocheng/16.html轉載于:https://www.cnblogs.com/Baronboy/p/9185849.html

優雅告別 2022 年,2023 年主題:敢想,就敢做!

自從工作之后&#xff0c;每年春節我都會花一天時間&#xff0c;一個人待在一個小房間&#xff0c;思考自己今年做了什么具備階段性成果的事情。然后&#xff0c;寫下明年需要執行的計劃。會寫在一個 XMind 文件里&#xff0c;記錄每一年將要執行的計劃&#xff0c;且未完成的計…

純js上傳文件 很好用

<!DOCTYPE html> <html> <head> <meta charset"utf-8"> <meta name"viewport" content"widthdevice-width, initial-scale1.0"> <title>參數設置</title> <meta name"keywords&q…

買臺電腦,不行!去旅游一下,不行!論程序員怎么實現財務自由!

“最近讀了一本不是編程的程序員技能書《軟技能-代碼之外的生存指南》&#xff0c;全書分為 7 個篇章&#xff0c;分別是職業、自我營銷、學習、生產力、理財、健身和精神。在讀完職業、自我營銷和理財這三個篇章后&#xff0c;讓我感觸很深&#xff0c;也讓我很意外。本來以為…

java發送gmail_如何在Gmail中輕松通過電子郵件發送人群

java發送gmailMailing lists are an old tool in the email arsenal, but their implementation in Gmail isn’t immediately intuitive. Read on as we show you how to email groups using your Gmail account. 郵件列表是電子郵件庫中的一個舊工具&#xff0c;但是在Gmail中…

移動web開發相關筆記(三)

1.推薦以sublime插件的排名官網:https://packagecontrol.io/&#xff08;sublime插件官網&#xff09;2.時間算法【//總秒數var totalSecond 3671;//獲取里面的小時var hoursMath.floor(totalSecond/3600);//獲取剩下的分鐘var minuteMath.floor(totalSecond%3600/60);//獲取剩…

互聯網和IT行業越來越嚴峻,前景幾何?

楔子新冠疫情反反復復&#xff0c;互聯網和IT行業一路下滑。硅谷裁員高達10萬人。前景該何處何從呢&#xff1f;春江水暖豬先知IT行業如此的不景氣&#xff0c;自然是一些在風口上被吹起來的豬首先感受到了。他們進行的自救其實就一條:裁員&#xff0c;大量的裁員。裁員可以解決…

Asp.net MVC使用Model Binding解除Session, Cookie等依賴

上篇文章"Asp.net MVC使用Filter解除Session, Cookie等依賴"介紹了如何使用Filter來解除對于Session, Cookie的依賴。其實這個也可以通過Model Binding來達到同樣的效果。 什么是Model Binding? Model Binding的作用就是將Request請求中包含的散亂參數&#xff0c;根…

C++回聲服務器_4-UDP connect版本客戶端

針對UDP套接字調用connect函數不會與對方UDP套接字建立連接&#xff0c;只是向UDP套接字注冊目標IP和端口信息。 修改客戶端代碼 服務器代碼不需要修改&#xff0c;只需修改客戶端代碼。調用connect函數之后&#xff0c;可以調用write函數和read函數來發送、接收數據&#xff0…

如何在路由綁定中使用 IParsable

IParsable 是 .Net 7 中新增的接口&#xff0c;它可以將字符串轉換為對應的實體。在 Controller 的 Route 綁定中可以使用 IParsable 來綁定復雜的實體。實驗背景 假設有一個需要將 route "report/{month}-{day}" 綁定到 MyDate 對象上的場景。在 .Net 7 之前&#x…

火狐 新增標簽 一直加載_在Firefox的新標簽頁中加載最后標簽頁的URL

火狐 新增標簽 一直加載Yeah, you’re pretty sure that you’re the master of all things Firefox. I mean, why else would you be reading this article? So, we’ve got to ask, have you ever seen this one before? 是的&#xff0c;您很確定自己是Firefox的所有人。 …

ptyhon【遞歸練習】

轉載于:https://www.cnblogs.com/LTEF/p/9187287.html

Iterator 和 for...of 循環

本系列屬于阮一峰老師所著的ECMAScript 6 入門學習筆記 Iterator(遍歷器) JavaScript表示“集合”的數據結構&#xff0c;除了Array 、Object &#xff0c;ES6又新增了Map 和Set 。 遍歷器&#xff08;Iterator&#xff09;是一種統一的接口機制&#xff0c;用來處理所有不同的…

JAVA常量

2019獨角獸企業重金招聘Python工程師標準>>> 常量就是一個固定值。它們不需要計算&#xff0c;直接代表相應的值。 常量指不能改變的量。 在Java中用final標志&#xff0c;聲明方式和變量類似&#xff1a; final double PI 3.1415927; 雖然常量名也可以用小寫&…

基于Docker托管Azure DevOps代理

Azure DevOps非常好用&#xff0c;但是為代理準備單獨的服務器經常會顯得性價比不高&#xff1a;配置低了&#xff0c;前端構建時會教會你做人&#xff0c;配置太高又有點浪費資源&#xff0c;代理數量少了各團隊構建要打架。對于既想享受DevOps的美妙之處但是資源捉襟見肘的小…

微軟 word轉換pdf_如何將行轉換為Microsoft Word表中的列

微軟 word轉換pdfYou’ve created a table in Word and started to enter your data. Then, you realize that the table should be transposed, meaning the rows should be columns and vice versa. Rather than recreating the table and manually entering the data again,…

pycharm中如何正確配置pyqt5

網上看了幾個文章&#xff0c;不成功。這樣做才是正確姿勢&#xff1a; /Users/mac/anaconda3/bin/Designer.app /Users/mac/anaconda3/bin$ProjectFileDir$ pyuic5 $FileName$ -o $FileNameWithoutExtension$.py $ProjectFileDir$ 其它細節懶得說。 轉載于:https://www.cnblog…

JS常用的設計模式

持續更新JS常用的設計模式以及應用場景*以下內容為個人簡單理解以及摘抄部分網上demo組成&#xff0c;有錯誤請在下方評論指出?*# 何謂設計模式沒必要被高大上的名詞所嚇倒&#xff0c;日常coding中或許一個不了解各種設計模式的程序員可能自己其實已經用到了很多拋開官方的定…

如何在Photoshop中制作雙曝光圖像

Double exposure images are popular at the moment. Taylor Swift’s Style music video and the True Detective opening theme both used the effect. It’s a technique where two separate photos—typically a portrait and a landscape—are blended together into one …