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

圖片

作者 | 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/535838.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/535838.shtml
英文地址,請注明出處:http://en.pswp.cn/news/535838.shtml

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

相關文章

日常問題——pdsh localhost Connection refused

問題描述&#xff1a; 本地安裝hadoop單機模式的時候需要啟動namenode時報錯 pdshxxx: localhost: connect: Connection refused解決方案&#xff08;過程&#xff09;&#xff1a; 原因是pdsh默認采用的是rsh登錄&#xff0c;修改成ssh登錄即可&#xff0c;在環境變量/etc/…

MIP技術進展月報第2期: 數據綁定,異步腳本加速

一、 功能更新 1. mip-bind 上線&#xff0c;實現復雜交互 MIP bind 雙向綁定機制和組件上線&#xff0c;提供雙向綁定的特性&#xff1b;能夠允許頁面實現數據驅動功能&#xff0c;開發者可以在任意場景修改數據&#xff0c;并驅動頁面元素變動。 MIP 小姐姐畫外音&#xf…

Hadoop的安裝與配置——設置單節點群集

本篇博客將主要介紹如何設置和配置單節點Hadoop安裝&#xff0c;以便我們可以使用Hadoop 的MapReduce與HDFS快速執行簡單的操作。 零、先決條件 1、本系列以Ubuntu Linux作為開發和生產平臺 2、Linux所需的軟件包括&#xff1a; JAVA&#xff1a;必須安裝Java&#xff0c;配置…

MIP 腳本域名地址變更公告

尊敬的 MIP 開發者&#xff1a; MIP 團隊為了解決 MIP-Cache 頁面下 cookie 相互覆蓋問題&#xff0c;增強站點品牌露出&#xff0c;在 2017 年 8 月將 MIP 的腳本域名和 MIP-Cache 頁面域名進行了升級變更&#xff0c;詳見說明 MIP-Cache 域名升級。 在 12 月中旬&#xff0…

新手教程:不寫JS,在MIP頁中實現異步加載數據

從需求談起&#xff1a;在 MIP 頁中異步加載數據 MIP&#xff08;移動網頁加速器&#xff09; 的 加速原理 除了靠譜的 MIP-Cache CDN 加速外&#xff0c;最值得一提的就是組件系統。所有 JS 交互都需要使用 MIP 組件實現&#xff0c;保證頁面中所有 JS 都是最精簡高效的&…

日常問題———安裝新版zookeeper 出現Starting zookeeper ... FAILED TO START

問題描述 安裝新版zookeeper使用 /apache-zookeeper-3.6.1.tar.gz解壓后運行zoServer.sh文件時出現Starting zookeeper … FAILED TO START錯誤 解決方案&#xff08;過程&#xff09; 實際上應該是下載錯了文件。在官網上有兩個tar.gz文件&#xff0c;從3.5.5版本開始&…

Hadoop的安裝與配置——搭建完全分布式集群

一、搭建集群 1、準備服務器&#xff08;這里以我的3臺Centos7為例&#xff09; 1個主節點&#xff1a;Carlota1(192.168.33.21)&#xff0c;2個子節點&#xff1a;Carlota2(192.168.33.22)&#xff0c;Carlota3(192.168.33.23) 2、配置主節點名 在主節點命令行輸入&#x…

HTTP 視頻怎么在 MIP 頁面中使用?

在 MIP 中&#xff0c;一些資源的使用需要支持 HTTPS&#xff0c;視頻就是其中一種。但目前大部分站點的視頻資源都還是 HTTP 的資源&#xff0c;無法在百度 MIP 搜索結果中直接使用&#xff0c; mip-video 視頻組件針對 HTTP 的視頻資源采用跳到一個 HTTP 的播放頁面進行播放&…

MIP 組件庫升級公告

背景 為了方便廣大開發者們更好地使用組件&#xff0c;現對 MIP 組件庫統一進行升級&#xff0c;升級后將分為通用組件和自定義組件兩類&#xff0c;方便開發。 通用組件&#xff0c;即考慮了組件通用性方便所有開發者參考使用的組件&#xff0c;將存放于 mip-extensions 倉庫…

騰訊云服務器 ubuntu 設置允許root用戶登錄和禁用ubuntu用戶

最近購買了騰訊云服務器&#xff0c;使用了 Ubuntu Server 18.04.1 LTS 64位操作系統&#xff0c;發現默認用戶為ubuntu,而無法用root用戶進行ssh登陸&#xff0c;本篇就記錄一下開通root和禁用ubuntu的過程。 1、設置允許root用戶登錄 使用用戶名ubuntu登錄sudo passwd root…

Ubuntu 修改 hostname

1、vi /etc/cloud/cloud.cfg 2、將preserve_hostname: false修改為preserve_hostname: true 3、hostnamectl set-hostname 主機名 4、reboot重啟系統生效

MIP 技術月報(4月):支持熊掌號登錄;優化頁面懸浮元素

之前由MIP團隊維護的《移動 Web 加速技術月報》從本期開始&#xff0c;正式升級為《MIP 技術月報》&#xff0c;與以往不同的是&#xff0c;《MIP 技術月報》將會與大家分享包含移動加速技術以外的其他移動應用開發的技術&#xff0c;從移動用戶體驗、開發體驗出發來分享 MIP 的…

Ubuntu18.04安裝最新版Docker

卸載舊的docker版本apt-get remove docker docker-engine docker.io containerd runc更新軟件列表apt-get update.允許apt命令可以使用HTTPS訪問Docker repositoryapt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common添加Docker…

MIP 問題解決方案大全(2018-06更新)

在 MIP 推出后&#xff0c;我們收到了一些站長的疑問。現將常見問題整理出來&#xff0c;幫助大家了解 MIP 的知識。 一、MIP 認知類問題二、改造前準備三、前端改造&#xff0c;組件使用四、提交生效五、MIPCache六、更多學習資源 一、MIP 認知類問題 1.1 MIP 化的收益是什…

Ubuntu18使用docker快速安裝oracle 11g

1、安裝docker環境&#xff0c;參照Ubuntu18.04安裝最新版Docker 2、下載oracle鏡像docker pull deadok22/docker-oracle-xe-11g 3、下載完成后&#xff0c;啟動oracle鏡像作為容器&#xff1a;docker run -h "oracle" --name "oracle" -d -p 49160:22 -p …

ubuntu新建用戶后,終端下方向鍵和tab鍵不可用的解決方法

問題描述&#xff1a; 用adduser命令新增了用戶之后&#xff0c;發現在該新建用戶下的命令終端&#xff0c;使用方向鍵無法調出歷史命令&#xff0c;同時tab鍵也無法補全輸入命令。 問題解決&#xff1a; 在/etc/passwd中發現&#xff0c;該新建用戶使用的shell為/bin/sh&…

移動Web體驗月報(6月):MIP 核心代碼升級,增加基于 Vue 開發能力

原創&#xff1a; BrilliantOpenWeb OpenWeb開發者 7月6日 作者 | Brilliant Open Web 團隊 編輯 | Daisy 升級與重要進展 歷時2個月&#xff0c;MIP團隊完成了核心代碼重構與核心功能升級&#xff0c;MIP新版本核心代碼&#xff08;V2&#xff09;在實現向下完全兼容當前代…

騰訊云ubuntu18安裝圖形化界面

0、apt-get update 1、sudo apt-get install xinit 2、sudo apt-get install gdm3 3、apt-get install ubuntu-desktop

2017 到 2018,PWA 技術到底經歷了什么

高磊 OpenWeb開發者 1周前 在 GMTC 2018 全球大前端會議舉辦期間&#xff0c;高磊擔任主題演講嘉賓&#xff0c;并擔任 PWA 專場出品人。作為有近 10 年 Web 前端技術開發、管理經驗的開發者&#xff0c;高磊一直關注著 PWA 技術的發展。 2017年 6月10日&#xff0c;GMTC 201…

CentrOS7靜默安裝oracle11g

最近要做一個用ogg實現oracle到kafka的增量數據實時同步&#xff0c;但是Oracle就讓我裝了好久&#xff0c;這里來記錄一下安裝oracle過程。 1.建立swap分區 創建充當swap分區的文件&#xff0c;文件大小就是要增加的swap大小&#xff0c;of是文件位置&#xff0c;bs為單位&a…