日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

veImageX 演進之路:Web 圖片加載提速50%

來源: 責編: 時間:2023-10-10 18:30:17 226觀看
導(dǎo)讀背景說明火山引擎veImageX演進之路主要介紹了veImageX在字節(jié)內(nèi)部從2012年隨著字節(jié)成長過程中逐步演進的過程,演進中包括V1、V2、V3版本并最終面向行業(yè)輸出;整個演進過程中包括服務(wù)端、客戶端、網(wǎng)絡(luò)庫、業(yè)務(wù)場景與優(yōu)化等

圖片圖片4it28資訊網(wǎng)——每日最新資訊28at.com

方案架構(gòu).png4it28資訊網(wǎng)——每日最新資訊28at.com

如圖所示,圖片加載部分支持分辨率、格式自適應(yīng)以及懶加載、穩(wěn)定性布局等特性,其中涉及到圖片處理部分基于火山引擎veImageX 服務(wù)實現(xiàn),如圖片轉(zhuǎn)碼、縮放、壓縮等。SDK 側(cè)生成當前環(huán)境下最佳的圖片格式和分辨率,從服務(wù)獲取相應(yīng)的圖片 URL,借助云端處理能力在運行時動態(tài)生成所需的圖片。4it28資訊網(wǎng)——每日最新資訊28at.com

數(shù)據(jù)監(jiān)控部分可分為加載耗時監(jiān)控、圖片詳情監(jiān)控、畫質(zhì)評估、大圖監(jiān)控、云控配置幾部分,監(jiān)控 SDK 收集相關(guān)數(shù)據(jù),根據(jù)云端下發(fā)的配置上報數(shù)據(jù),火山引擎veImageX 服務(wù)對數(shù)據(jù)做清洗后可在控制臺側(cè)查看數(shù)據(jù)大盤。4it28資訊網(wǎng)——每日最新資訊28at.com

模塊詳細介紹

圖片加載

圖片格式自適應(yīng)

常見的圖片格式有 PNG、JPEG、GIF、WebP、AVIF、HEIC 等,其中 WebP、AVIF、HEIC 等高壓縮率圖片格式可顯著減小圖片體積。但由于不同瀏覽器對高壓縮率格式的支持情況不同,因此在應(yīng)用時需要考慮圖片加載的環(huán)境。三種高壓縮率格式在 Web 側(cè)的兼容性如下:4it28資訊網(wǎng)——每日最新資訊28at.com

  1. WebP

圖片圖片4it28資訊網(wǎng)——每日最新資訊28at.com

  1. AVIF

圖片圖片4it28資訊網(wǎng)——每日最新資訊28at.com

  1. HEIC

圖片圖片4it28資訊網(wǎng)——每日最新資訊28at.com

在 APP 端,對于不支持的圖片格式可采用 SDK 軟解的方式進行解碼、渲染,Native 側(cè)的性能可保證圖片解碼的耗時和流量的節(jié)省都能有不錯的收益。在 Web 側(cè),由于瀏覽器性能限制,veImageX 內(nèi)部性能測試表明,SDK 軟解在圖片整體耗時方面的收益并不明顯,尤其是多圖場景下,因此在 Web 側(cè)更適合走格式自適應(yīng)的方案,即根據(jù)瀏覽器的支持性加載相對最優(yōu)的圖片格式。4it28資訊網(wǎng)——每日最新資訊28at.com

常見的做法是采用標簽以實現(xiàn)格式的自適應(yīng),標簽有相對不錯的兼容性,支持包含零或多個元素和一個  元素來為不同的瀏覽器環(huán)境提供圖片版本,瀏覽器會自上而下選擇可以被渲染的圖片,若沒有匹配的,則選擇  元素當中的圖片作為兜底。加載 SDK 最初也采用了該方案,如下:4it28資訊網(wǎng)——每日最新資訊28at.com

<picture>  <source srcset="image1.webp" type="image/webp" />  <img src="image1.jpg" decoding="async" loading="lazy"/></picture>

但由于瀏覽器版本眾多,在實際應(yīng)用中,可能會出現(xiàn)很多預(yù)期以外的情況,比如:4it28資訊網(wǎng)——每日最新資訊28at.com

  • 會同時加載多個圖片資源,造成帶寬的浪費;
  • 并非完全支持 WebP 的所有特性,存在加載失敗的場景;
  • 只支持 AVIF 靜圖格式,不支持動圖;
  • ...

為了保證圖片加載成功率,因此在實際應(yīng)用中無法直接使用標簽,加載 SDK 目前采用格式探測 +相結(jié)合的方式來解決該問題。同時,由于 HEIC 支持率太低,格式自適應(yīng)目前只做了 WebP 和 AVIF 的自適應(yīng),同等質(zhì)量下,WebP 相比 JPEG 可減少 30% 的圖片體積,AVIF 則可在 WebP 的基礎(chǔ)上再減少 20%;4it28資訊網(wǎng)——每日最新資訊28at.com

圖片分辨率自適應(yīng)

分辨率自適應(yīng)指的是客戶端根據(jù)實際渲染的寬高獲取相應(yīng)分辨率的圖片,從而減小圖片體積。常見的做法是我們可以借助 HTML 中原生的 srcset 屬性來定義圖像集,以及每個圖像應(yīng)用的場景。由以下三部分組成:4it28資訊網(wǎng)——每日最新資訊28at.com

  • 文件名
  • 空格
  • 圖像描述符,有兩種描述方式
  • 寬度描述符 w,描述圖像的固有寬度,以像素為單位。比如 480w 表示當瀏覽器需要 480 像素寬的圖像時應(yīng)該使用的圖像資源
  • 像素密度描述符 x,描述了顯示器的像素密度和圖片資源之間的對應(yīng)關(guān)系,通過window.devicePixelRatio可查詢顯示器像素密度

sizes 則定義了一組媒體條件,比如:屏幕寬度。并且指明當媒體條件為真時最佳的圖片尺寸。每個條件由以下三部分組成:4it28資訊網(wǎng)——每日最新資訊28at.com

  • 一個媒體條件,比如max-width:480px,表示可視窗口的寬度不超過480像素時
  • 空格
  • 當媒體條件為真時,應(yīng)該選用的圖片大小

可以將標簽和 srcset 屬性相結(jié)合,實現(xiàn)格式和分辨率的自適應(yīng),如下:4it28資訊網(wǎng)——每日最新資訊28at.com

<picture>  <source         srcset="image1.webp 200w,              image2.webp 600w"      sizes="100vw"      type="image/webp"   />   <img       srcset="image1.jpg 200w,              image2.jpg 600w"      sizes="100vw"      decoding="async"      loading="lazy"   /></picture>

然而在實際中又會面臨一些問題,如:4it28資訊網(wǎng)——每日最新資訊28at.com

  • 指定多個 srcset 會增加 HTML 文件大小,尤其是當中存在多個的場景;
  • 媒體查詢條件只能是屏幕寬度和像素密度,不能準確反映真實的圖片渲染情況;
  • srcset 配合 sizes 使用,理解成本相對較高;
  • ...

在實際應(yīng)用中,某些情況下可以提前知道圖片渲染大小或者圖片所在區(qū)域的大小,結(jié)合方案內(nèi)置的幾種布局方式以及設(shè)備像素密度等信息,加載 SDK 內(nèi)部可以分析并選擇出當前模塊渲染的最佳分辨率。4it28資訊網(wǎng)——每日最新資訊28at.com

圖片穩(wěn)定性布局

Web 側(cè)通?;?CLS(Cumulative Layout Shift,累積布局偏移)指標用于衡量頁面布局的視覺穩(wěn)定性。當可見元素的位置在頁面生命周期內(nèi)發(fā)生了變化時,就會產(chǎn)生布局偏移。4it28資訊網(wǎng)——每日最新資訊28at.com

導(dǎo)致布局偏移的因素有很多(如:動態(tài)插入元素、iframe加載),無尺寸的圖片是影響 CLS 指標的重要因素之一。例如下面兩個頁面中,右側(cè)指定了圖片寬高的頁面要比左側(cè)沒有指定圖片寬高的頁面穩(wěn)定性更好。4it28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片4it28資訊網(wǎng)——每日最新資訊28at.com

數(shù)據(jù)監(jiān)控.png4it28資訊網(wǎng)——每日最新資訊28at.com

數(shù)據(jù)監(jiān)控的整體鏈路為:4it28資訊網(wǎng)——每日最新資訊28at.com

  1. 監(jiān)聽全局的 Load 和 Error 事件,并篩選出屬于圖片的部分;
  2. 基于 PerformanceObserver 監(jiān)聽圖片資源加載,該事件回調(diào)中可拿到圖片加載耗時相關(guān)的指標,如 DNS、TCP、SSL、請求、下載各個階段的耗時,并且可以基于該 API 監(jiān)聽 CSS 中圖片資源的加載;
  3. 對于圖片格式、狀態(tài)碼、畫質(zhì)打分等信息則依賴 Response Header,而拿到 Response Header 僅有 request 資源這一種方式,因此在資源加載后再去 request 本地緩存中的信息,同時為避免并發(fā)請求影響其他類型的 HTTP 請求,SDK 會根據(jù)采樣率、當前請求量等信息在空閑時讀取需要上報的圖片的緩存;
  4. 整合所有原始數(shù)據(jù),根據(jù)采樣率上報至 veImageX 數(shù)據(jù)服務(wù),由數(shù)據(jù)服務(wù)對原始數(shù)據(jù)做清洗;
  5. 經(jīng)過后端服務(wù)處理后最終即可在 veImageX 質(zhì)量監(jiān)控大盤查看,具體支持的指標及維度如下圖所示:
  1. 下行網(wǎng)絡(luò)監(jiān)控

圖片圖片4it28資訊網(wǎng)——每日最新資訊28at.com

  1. 客戶狀態(tài)監(jiān)控

圖片圖片4it28資訊網(wǎng)——每日最新資訊28at.com

方案演進

方案致力于為 Web 場景提供極致的圖片加載體驗,同時在穩(wěn)定性和場景覆蓋上也在不斷提升。4it28資訊網(wǎng)——每日最新資訊28at.com

更低的錯誤率

上面提到在某些瀏覽器下會存在部分 WebP、AVIF 圖片加載失敗的場景,在監(jiān)控到此類場景后加載 SDK 基于格式探測的方式最低成本的解決了此類問題,同時保證了性能。4it28資訊網(wǎng)——每日最新資訊28at.com

例如:在 iOS 14.3 & 14.4 版本下的 Safari 瀏覽器加載部分的 WebP 失敗,而標簽并不會對 WebP 的支持性做檢測,其對于傳入的 WebP 格式是全盤接收的,且 SDK 也無法對所有傳入的圖片做檢測,因此只能通過構(gòu)造特定圖片,在業(yè)務(wù)圖片加載前對其進行檢測從而規(guī)避該問題,如下:4it28資訊網(wǎng)——每日最新資訊28at.com

const checkWebP = () => {  const pro: Promise<boolean> = new Promise<boolean>((resolve) => {    if(typeof window === 'undefined') resolve(false);    if (window['__support_webp__'] !== undefined) {      resolve(!!window['__support_webp__']);    } else {      const img = new Image();      img.onload = () => {        window['__support_webp__'] = true;        resolve(true);      };      img.onerror = () => {        window['__support_webp__'] = false;        resolve(false);      };      img.src = 'error image';    }  });  return pro;};

更多的場景覆蓋

目前方案支持了 React、Vue2、Vue3 以及小程序,為了保證體驗的一致性、降低維護成本,加載 SDK 做了分層的設(shè)計,將核心的 Core 層抽離出來給到各個框架使用,并對各項能力做了插件化。4it28資訊網(wǎng)——每日最新資訊28at.com

場景覆蓋.png場景覆蓋.png4it28資訊網(wǎng)——每日最新資訊28at.com

小結(jié)

隨著方案的迭代,我們也在嘗試覆蓋更多的業(yè)務(wù)場景,比如:加密圖渲染、Hybrid HEIC 渲染等,火山引擎veImageX 希望給客戶帶來全面、穩(wěn)定、流暢的圖片體驗,同時給業(yè)務(wù)帶來極致的成本收益。4it28資訊網(wǎng)——每日最新資訊28at.com

我們將如上能力封裝成簡單的webSDK,向行業(yè)輸出,并可以免費獲取和使用此SDK,更高級的能力也可以配合veImageX來使用;4it28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-12676-0.htmlveImageX 演進之路:Web 圖片加載提速50%

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 圖形編輯器開發(fā):屬性顯示與格式轉(zhuǎn)換

下一篇: 一篇文章帶你了解JavaScript 數(shù)值方法(上篇)

標簽:
  • 熱門焦點
  • 鴻蒙OS 4.0公測機型公布:甚至連nova6都支持

    華為全新的HarmonyOS 4.0操作系統(tǒng)將于今天下午正式登場,官方在發(fā)布會之前也已經(jīng)正式給出了可升級的機型產(chǎn)品,這意味著這些機型會率先支持升級享用。這次的HarmonyOS 4.0支持
  • Raft算法:保障分布式系統(tǒng)共識的穩(wěn)健之道

    1. 什么是Raft算法?Raft 是英文”Reliable、Replicated、Redundant、And Fault-Tolerant”(“可靠、可復(fù)制、可冗余、可容錯”)的首字母縮寫。Raft算法是一種用于在分布式系統(tǒng)
  • 三言兩語說透設(shè)計模式的藝術(shù)-單例模式

    寫在前面單例模式是一種常用的軟件設(shè)計模式,它所創(chuàng)建的對象只有一個實例,且該實例易于被外界訪問。單例對象由于只有一個實例,所以它可以方便地被系統(tǒng)中的其他對象共享,從而減少
  • 微信語音大揭秘:為什么禁止轉(zhuǎn)發(fā)?

    大家好,我是你們的小米。今天,我要和大家聊一個有趣的話題:為什么微信語音不可以轉(zhuǎn)發(fā)?這是一個我們經(jīng)常在日常使用中遇到的問題,也是一個讓很多人好奇的問題。讓我們一起來揭開這
  • JVM優(yōu)化:實戰(zhàn)OutOfMemoryError異常

    一、Java堆溢出堆內(nèi)存中主要存放對象、數(shù)組等,只要不斷地創(chuàng)建這些對象,并且保證 GC Roots 到對象之間有可達路徑來避免垃 圾收集回收機制清除這些對象,當這些對象所占空間超過
  • 為什么你不應(yīng)該使用Div作為可點擊元素

    按鈕是為任何網(wǎng)絡(luò)應(yīng)用程序提供交互性的最常見方式。但我們經(jīng)常傾向于使用其他HTML元素,如 div span 等作為 clickable 元素。但通過這樣做,我們錯過了許多內(nèi)置瀏覽器的功能。
  • 華為Mate 60系列用上可變靈動島:正式版體驗將會更出色

    這段時間以來,關(guān)于華為新旗艦的爆料日漸密集。據(jù)此前多方爆料,今年華為將開始恢復(fù)一年雙旗艦戰(zhàn)略,除上半年推出的P60系列外,往年下半年的Mate系列也將
  • 2納米決戰(zhàn)2025

    集微網(wǎng)報道 從三強爭霸到四雄逐鹿,2nm的廝殺聲已然隱約傳來。無論是老牌勁旅臺積電、三星,還是誓言重回先進制程領(lǐng)先地位的英特爾,甚至初成立不久的新
  • iQOO Neo8 Pro評測:旗艦雙芯加持 最強性能游戲旗艦

    【Techweb評測】去年10月,iQOO推出了一款Neo7手機,該機搭載了聯(lián)發(fā)科天璣9000+,配備獨顯芯片Pro+,帶來了同價位段最佳的游戲體驗,一經(jīng)上市便受到了諸多用
Top 主站蜘蛛池模板: 宜兰市| 晋中市| 澳门| 盘锦市| 元氏县| 柳州市| 柏乡县| 康保县| 正阳县| 牡丹江市| 武胜县| 洪江市| 任丘市| 淮阳县| 巴塘县| 龙州县| 股票| 兴安县| 龙岩市| 芦山县| 莱州市| 连云港市| 西盟| 岳阳县| 成安县| 四平市| 法库县| 华亭县| 红河县| 隆安县| 洞口县| 鹰潭市| 吉安市| 永州市| 泽州县| 雷山县| 隆尧县| 琼中| 宝丰县| 彰化市| 阳春市|