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 不同模式下都會節省大量流量。科技博客 GigaOM 曾報道,谷歌的 Chrome 網上應用商店采用 WebP 格式圖片后,每天可以節省幾 TB 的帶寬;Google+ 移動應用采用 WebP 圖片格式后,每天節省了 50TB 數據存儲空間。

(2)速度方面

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

2. 兼容性

目前來說,WebP 的支持程度也在不斷上升,據 2017年10月12日在 can i use 上的查詢顯示,全球 WebP 的支持程度已經達到 73.64%,如下圖所示。
這里寫圖片描述
而也正是因為這種天然的圖片體積優勢和發展趨勢,MIP 團隊也決定進行初步的實踐嘗試,以提升頁面用戶體驗。

三、WebP 實踐經驗

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

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

(1)HTML5 picture

這種方法不進行 WebP 支持程度的判斷,而是利用 html5 picture 元素的特性,允許開發者列舉出多個圖片地址,瀏覽器根據順序展示出第一個能夠展現的圖片元素,如
這里寫圖片描述
上面的示例在瀏覽器不支持 WebP 圖片的情況下自動回退到 jpg 格式進行展示,但 picture 的支持程度還不是很完善,開發者可以根據需求決定是否進行使用。
這里寫圖片描述

(2)嗅探

嗅探的方式是指直接向瀏覽器中插入一段 base64 的 WebP 圖片,檢測圖片是否能夠正常加載,依據該方法進而判斷支持程度,如官方給出的嗅探函數:
這里寫圖片描述
其中包含了對有損、無損、透明圖、動圖等 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 團隊,我們將不斷迭代前行,致力于打造極致的用戶體驗。

Brilliant Open Web

BOW(Brillant Open Web)團隊,是一個專門的Web技術建設小組,致力于推動 Open Web 技術的發展,讓Web重新成為開發者的首選。

BOW 將依托于【Open Web 開發者】公眾號,為大家提供設計、開發、安全等 Web 相關知識和案例。同時,也非常歡迎有志于改變世界的你加入我們!

關注 OpenWeb開發者,回復“加群”,讓我們一起推動 OpenWeb技術的發展!

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

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

相關文章

Redis(六):Set集合數據類型詳解

Redis 的 Set 是 String 類型的無序集合。集合成員是唯一的,這就意味著集合中不能出現重復的數據。 Redis 中集合是通過哈希表實現的,所以添加,刪除,查找的復雜度都是 O(1)。 集合中最大的成員數為 232 - 1 (4294967295, 每個集…

百度主任架構師譚待:如何讓不帶團隊的程序員負責重大項目?

演講 | 譚待 整理 | 趙新龍、尾尾 譚待,百度主任架構師、百度搜索公司技術委員會聯席主席。主要研究領域在分布式系統和搜索引擎,是百度BVC代理計算和Matrix私有云的主要設計者,兩獲百度最高獎。主持設計了百度新一代搜索架構,在…

Redis(七):Hash哈希數據類型詳解

Redis hash 是一個 string 類型的 field 和 value 的映射表,hash 特別適合用于存儲對象。 Redis 中每個 hash 可以存儲 232 - 1 鍵值對(40多億)。 實例: 127.0.0.1:6379> HMSET runoobkey name "redis tutorial"…

Chrome Dev Summit 2017參會筆記

作者 | 高磊 編輯 | 尾尾 為期兩天的 Chrome Dev Summit 2017 于 10月23日~24日在美國舊金山舉辦。由于我們近期和Google的合作較多,對Google的動作也比較關注,所以受邀參加了這次的Chrome Dev Summit (CDS)。本文是我在現場做的…

Redis(八):Zset有序集合數據類型詳解

Redis 有序集合和集合一樣也是string類型元素的集合,且不允許重復的成員。 不同的是每個元素都會關聯一個double類型的分數。redis正是通過分數來為集合中的成員進行從小到大的排序。 有序集合的成員是唯一的,但分數(score)卻可以重復。 集合是通過哈希表實現的,…

Redis(九):Redis特殊類型之geospatial

朋友的定位,附近的人,位置共享,打車距離 redis在3.2就已經推出了geospatial!兩地之間的距離,方圓幾里的人!都可以用它實現 這個需要把你所在地的經緯度輸進去,我們可以在http://www.jsons.cn/ln…

九個案例簡述Web設計原則:簡潔清晰

作者 | 百度搜索用戶體驗中心 《Web設計指南》分為設計原則、基礎規范兩方面主要內容,同時會提供相應的實際案例及資源下載。歡迎關注OpenWeb開發者,訂閱《Web設計指南》。 前言 《Web設計指南》是專門為廣大Web內容生態提供一套簡單實用的設計指南&a…

Redis(十):Redis特殊類型之Hyperloglog基數統計

redis 2.8.9版本就更新了Hyperloglog數據結構! Hyperloglog:基數統計算法!0.81%的錯誤率,不過統計大量數據可以忽略! 在 Redis 里面,每個 HyperLogLog 鍵只需要花費 12 KB 內存,就可以計算接近 …

W3C近期要聞:與Mozilla MDN合作聯合開發Web平臺文檔

作者 | W3C中國 「OpenWeb開發者」依托于BOW(Brillant Open Web)團隊,是一個專門的 Web 技術建設小組,致力于推動 Open Web 技術的發展,將不定期為讀者同步W3C要聞。 注:由于微信不支持外鏈,了解…

Redis(十一):Redis特殊類型之Bitmap位圖

1、位存儲 只有0和1兩種狀態! Bitmap 位圖:數據結構,都是操作二進制位來進行記錄 登錄/未登錄 活躍/不活躍 打卡 兩個狀態的都可以使用Bitmap! 2、常用命令 2.1、用Bitmap來記錄 周一到周日的登陸情況 127.0.0.1:6379> …

移動Web加速技術月報第2期

作者 | Brilliant Open Web 團隊breezet、shdong 編輯 | 尾尾 為推進Web技術的發展,Brilliant Open Web團隊特推出每月一期的《移動Web加速技術月報》,該月報將整理較流行的移動Web加速技術,并跟進各項技術的進展和發展方向,以期…

Redis(十二):Redis事務的基本操作

1、Redis事務概念 Redis 事務的本質是一組命令的集合。事務支持一次執行多個命令,一個事務中所有命令都會被序列化。在事務執行過程,會按照順序串行化執行隊列中的命令,其他客戶端提交的命令請求不會插入到事務執行命令序列中。 總結說&…

大型網站HTTPS 實踐(一)| HTTPS 協議和原理

作者 | 百度HTTPS技術支持團隊 百度已經上線了全站 HTTPS 的安全搜索,默認會將 HTTP 請求跳轉成 HTTPS。本文就著重介紹了 HTTPS 協議涉及到的重要知識點和平時不太容易理解的盲區,希望能對大家理解 HTTPS 協議有幫助。百度 HTTPS 性能優化涉及到大量內容…

MongoDB(一):簡介

1、MongoDB概述 MongoDB 是由C語言編寫的,是一個基于分布式文件存儲的開源數據庫系統。在高負載的情況下,添加更多的節點,可以保證服務器性能。MongoDB 旨在為WEB應用提供可擴展的高性能數據存儲解決方案。 MongoDB 是一款流行的開源文檔型…

大型網站HTTPS實踐:HTTPS對性能的影響

作者 | 百度HTTPS技術支持團隊 百度已經上線了全站 HTTPS 的安全搜索,默認會將 HTTP 請求跳轉成 HTTPS。百度 HTTPS性能優化涉及到大量內容,從前端頁面、后端架構、協議特性、加密算法、流量調度、架構和運維、安全等方面都做了大量工作。本系列的文章將…

Redis(十三):Redis實現樂觀鎖

1、悲觀鎖與樂觀鎖 樂觀鎖和悲觀鎖是一種程序設計思想,而不是具體的代碼。樂觀鎖和悲觀鎖應用的場景有很多,在數據庫和多線程等等都會用到。 悲觀鎖:總是假設最壞的情況,每次去拿數據的時候都認為別人會修改,所以每次…

PWA將帶來新一輪大前端技術洗牌?

作者 | 彭星 編輯 | 尾尾 一、回顧歷史:移動時代之初,Web遭遇兩大枷鎖 Web 在移動時代遭遇兩大枷鎖1.Web 在移動時代遭遇兩大枷鎖 當 Web 自信滿滿,步入移動時代之時,它還沒有做好充足的準備。 回顧 2014 到 2015 年那段時間…

Redis(十四):Jedis

Jedis是Redis官方推薦的Java連接開發工具。要在Java開發中使用好Redis中間件&#xff0c;必須對Jedis熟悉才能寫成漂亮的代碼&#xff01; 1、新建Maven工程&#xff0c;導入對應依賴 <dependencies><dependency><groupId>redis.clients</groupId>&l…

高級精致智能快捷的Web設計原則案例

作者 | 百度搜索用戶體驗中心 《Web設計指南》分為設計原則、基礎規范兩方面主要內容&#xff0c;同時會提供相應的實際案例及資源下載。關注OpenWeb開發者&#xff0c;回復“設計指南”&#xff0c;即可獲取已發布資源。 設計原則之高級精致 簡潔并不等于粗糙沒有細節&#x…

Linux系列(一):簡介與目錄結構

1、Linux簡介 1.1、起源 Linux出現于1991年&#xff0c;是由芬蘭赫爾辛基大學學生Linus Torvalds和后來加入的眾多愛好者共同開發完成 1.2、Linux特點 多用戶&#xff0c;多任務&#xff0c;豐富的網絡功能&#xff0c;可靠的系統安全&#xff0c;良好的可移植性&#xff0c;…