当前位置:首页 > 科技  > 软件

veImageX 演进之路:Web 图片加载提速50%

来源: 责编: 时间:2023-10-10 18:30:17 318观看
导读背景说明火山引擎veImageX演进之路主要介绍了veImageX在字节内部从2012年随着字节成长过程中逐步演进的过程,演进中包括V1、V2、V3版本并最终面向行业输出;整个演进过程中包括服务端、客户端、网络库、业务场景与优化等

图片图片XEb28资讯网——每日最新资讯28at.com

方案架构.pngXEb28资讯网——每日最新资讯28at.com

如图所示,图片加载部分支持分辨率、格式自适应以及懒加载、稳定性布局等特性,其中涉及到图片处理部分基于火山引擎veImageX 服务实现,如图片转码、缩放、压缩等。SDK 侧生成当前环境下最佳的图片格式和分辨率,从服务获取相应的图片 URL,借助云端处理能力在运行时动态生成所需的图片。XEb28资讯网——每日最新资讯28at.com

数据监控部分可分为加载耗时监控、图片详情监控、画质评估、大图监控、云控配置几部分,监控 SDK 收集相关数据,根据云端下发的配置上报数据,火山引擎veImageX 服务对数据做清洗后可在控制台侧查看数据大盘。XEb28资讯网——每日最新资讯28at.com

模块详细介绍

图片加载

图片格式自适应

常见的图片格式有 PNG、JPEG、GIF、WebP、AVIF、HEIC 等,其中 WebP、AVIF、HEIC 等高压缩率图片格式可显著减小图片体积。但由于不同浏览器对高压缩率格式的支持情况不同,因此在应用时需要考虑图片加载的环境。三种高压缩率格式在 Web 侧的兼容性如下:XEb28资讯网——每日最新资讯28at.com

  1. WebP

图片图片XEb28资讯网——每日最新资讯28at.com

  1. AVIF

图片图片XEb28资讯网——每日最新资讯28at.com

  1. HEIC

图片图片XEb28资讯网——每日最新资讯28at.com

在 APP 端,对于不支持的图片格式可采用 SDK 软解的方式进行解码、渲染,Native 侧的性能可保证图片解码的耗时和流量的节省都能有不错的收益。在 Web 侧,由于浏览器性能限制,veImageX 内部性能测试表明,SDK 软解在图片整体耗时方面的收益并不明显,尤其是多图场景下,因此在 Web 侧更适合走格式自适应的方案,即根据浏览器的支持性加载相对最优的图片格式。XEb28资讯网——每日最新资讯28at.com

常见的做法是采用标签以实现格式的自适应,标签有相对不错的兼容性,支持包含零或多个元素和一个  元素来为不同的浏览器环境提供图片版本,浏览器会自上而下选择可以被渲染的图片,若没有匹配的,则选择  元素当中的图片作为兜底。加载 SDK 最初也采用了该方案,如下:XEb28资讯网——每日最新资讯28at.com

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

但由于浏览器版本众多,在实际应用中,可能会出现很多预期以外的情况,比如:XEb28资讯网——每日最新资讯28at.com

  • 会同时加载多个图片资源,造成带宽的浪费;
  • 并非完全支持 WebP 的所有特性,存在加载失败的场景;
  • 只支持 AVIF 静图格式,不支持动图;
  • ...

为了保证图片加载成功率,因此在实际应用中无法直接使用标签,加载 SDK 目前采用格式探测 +相结合的方式来解决该问题。同时,由于 HEIC 支持率太低,格式自适应目前只做了 WebP 和 AVIF 的自适应,同等质量下,WebP 相比 JPEG 可减少 30% 的图片体积,AVIF 则可在 WebP 的基础上再减少 20%;XEb28资讯网——每日最新资讯28at.com

图片分辨率自适应

分辨率自适应指的是客户端根据实际渲染的宽高获取相应分辨率的图片,从而减小图片体积。常见的做法是我们可以借助 HTML 中原生的 srcset 属性来定义图像集,以及每个图像应用的场景。由以下三部分组成:XEb28资讯网——每日最新资讯28at.com

  • 文件名
  • 空格
  • 图像描述符,有两种描述方式
  • 宽度描述符 w,描述图像的固有宽度,以像素为单位。比如 480w 表示当浏览器需要 480 像素宽的图像时应该使用的图像资源
  • 像素密度描述符 x,描述了显示器的像素密度和图片资源之间的对应关系,通过window.devicePixelRatio可查询显示器像素密度

sizes 则定义了一组媒体条件,比如:屏幕宽度。并且指明当媒体条件为真时最佳的图片尺寸。每个条件由以下三部分组成:XEb28资讯网——每日最新资讯28at.com

  • 一个媒体条件,比如max-width:480px,表示可视窗口的宽度不超过480像素时
  • 空格
  • 当媒体条件为真时,应该选用的图片大小

可以将标签和 srcset 属性相结合,实现格式和分辨率的自适应,如下:XEb28资讯网——每日最新资讯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>

然而在实际中又会面临一些问题,如:XEb28资讯网——每日最新资讯28at.com

  • 指定多个 srcset 会增加 HTML 文件大小,尤其是当中存在多个的场景;
  • 媒体查询条件只能是屏幕宽度和像素密度,不能准确反映真实的图片渲染情况;
  • srcset 配合 sizes 使用,理解成本相对较高;
  • ...

在实际应用中,某些情况下可以提前知道图片渲染大小或者图片所在区域的大小,结合方案内置的几种布局方式以及设备像素密度等信息,加载 SDK 内部可以分析并选择出当前模块渲染的最佳分辨率。XEb28资讯网——每日最新资讯28at.com

图片稳定性布局

Web 侧通常基于 CLS(Cumulative Layout Shift,累积布局偏移)指标用于衡量页面布局的视觉稳定性。当可见元素的位置在页面生命周期内发生了变化时,就会产生布局偏移。XEb28资讯网——每日最新资讯28at.com

导致布局偏移的因素有很多(如:动态插入元素、iframe加载),无尺寸的图片是影响 CLS 指标的重要因素之一。例如下面两个页面中,右侧指定了图片宽高的页面要比左侧没有指定图片宽高的页面稳定性更好。XEb28资讯网——每日最新资讯28at.com

图片图片XEb28资讯网——每日最新资讯28at.com

数据监控.pngXEb28资讯网——每日最新资讯28at.com

数据监控的整体链路为:XEb28资讯网——每日最新资讯28at.com

  1. 监听全局的 Load 和 Error 事件,并筛选出属于图片的部分;
  2. 基于 PerformanceObserver 监听图片资源加载,该事件回调中可拿到图片加载耗时相关的指标,如 DNS、TCP、SSL、请求、下载各个阶段的耗时,并且可以基于该 API 监听 CSS 中图片资源的加载;
  3. 对于图片格式、状态码、画质打分等信息则依赖 Response Header,而拿到 Response Header 仅有 request 资源这一种方式,因此在资源加载后再去 request 本地缓存中的信息,同时为避免并发请求影响其他类型的 HTTP 请求,SDK 会根据采样率、当前请求量等信息在空闲时读取需要上报的图片的缓存;
  4. 整合所有原始数据,根据采样率上报至 veImageX 数据服务,由数据服务对原始数据做清洗;
  5. 经过后端服务处理后最终即可在 veImageX 质量监控大盘查看,具体支持的指标及维度如下图所示:
  1. 下行网络监控

图片图片XEb28资讯网——每日最新资讯28at.com

  1. 客户状态监控

图片图片XEb28资讯网——每日最新资讯28at.com

方案演进

方案致力于为 Web 场景提供极致的图片加载体验,同时在稳定性和场景覆盖上也在不断提升。XEb28资讯网——每日最新资讯28at.com

更低的错误率

上面提到在某些浏览器下会存在部分 WebP、AVIF 图片加载失败的场景,在监控到此类场景后加载 SDK 基于格式探测的方式最低成本的解决了此类问题,同时保证了性能。XEb28资讯网——每日最新资讯28at.com

例如:在 iOS 14.3 & 14.4 版本下的 Safari 浏览器加载部分的 WebP 失败,而标签并不会对 WebP 的支持性做检测,其对于传入的 WebP 格式是全盘接收的,且 SDK 也无法对所有传入的图片做检测,因此只能通过构造特定图片,在业务图片加载前对其进行检测从而规避该问题,如下:XEb28资讯网——每日最新资讯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 做了分层的设计,将核心的 Core 层抽离出来给到各个框架使用,并对各项能力做了插件化。XEb28资讯网——每日最新资讯28at.com

场景覆盖.png场景覆盖.pngXEb28资讯网——每日最新资讯28at.com

小结

随着方案的迭代,我们也在尝试覆盖更多的业务场景,比如:加密图渲染、Hybrid HEIC 渲染等,火山引擎veImageX 希望给客户带来全面、稳定、流畅的图片体验,同时给业务带来极致的成本收益。XEb28资讯网——每日最新资讯28at.com

我们将如上能力封装成简单的webSDK,向行业输出,并可以免费获取和使用此SDK,更高级的能力也可以配合veImageX来使用;XEb28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-12676-0.htmlveImageX 演进之路:Web 图片加载提速50%

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 图形编辑器开发:属性显示与格式转换

下一篇: 一篇文章带你了解JavaScript 数值方法(上篇)

标签:
  • 热门焦点
  • 卢伟冰长文解析K60至尊版 对Redmi有着里程碑式的意义

    在今天的Redmi后性能时代战略发布会结束之后,Redmi总经理卢伟冰又带来了一篇长文,详解了为什么 Redmi 要开启后性能时代?为什么选择和 MediaTek、Pixelworks 深度合作?以及后性
  • 一篇聊聊Go错误封装机制

    %w 是用于错误包装(Error Wrapping)的格式化动词。它是用于 fmt.Errorf 和 fmt.Sprintf 函数中的一个特殊格式化动词,用于将一个错误(或其他可打印的值)包装在一个新的错误中。使
  • 多线程开发带来的问题与解决方法

    使用多线程主要会带来以下几个问题:(一)线程安全问题  线程安全问题指的是在某一线程从开始访问到结束访问某一数据期间,该数据被其他的线程所修改,那么对于当前线程而言,该线程
  • 微信语音大揭秘:为什么禁止转发?

    大家好,我是你们的小米。今天,我要和大家聊一个有趣的话题:为什么微信语音不可以转发?这是一个我们经常在日常使用中遇到的问题,也是一个让很多人好奇的问题。让我们一起来揭开这
  • 最“俊美”淘宝卖家,靠直播和短视频圈粉,上架秒光,年销3000万

    来源 | 电商在线文|易琬玉编辑|斯问受访店铺:Ringdoll戒之人形图源:微博@御座的黄山、&ldquo;Ringdoll戒之人形&rdquo;淘宝店铺有关外貌的评价,黄山已经听累了。生于1985年的他,哪
  • “又被陈思诚骗了”

    作者|张思齐 出品|众面(ID:ZhongMian_ZM)如今的国产悬疑电影,成了陈思诚的天下。最近大爆电影《消失的她》票房突破30亿断层夺魁暑期档,陈思诚再度风头无两。你可以说陈思诚的
  • 年轻人的“职场羞耻感”,无处不在

    作者:冯晓亭 陶 淘 李 欣 张 琳 马舒叶来源:燃次元&ldquo;人在职场,应该选择什么样的着装?&rdquo;近日,在网络上,一个与着装相关的帖子引发关注,在该帖子里,一位在高级写字楼亚洲金
  • 阿里瓴羊One推出背后,零售企业迎数字化新解

    作者:刘旷近年来随着数字经济的高速发展,各式各样的SaaS应用服务更是层出不穷,但本质上SaaS大多局限于单一业务流层面,对用户核心关切的增长问题等则没有提供更好的解法。在Saa
  • 三星显示已开始为AR设备研发硅基LED微显示屏

    7月18日消息,据外媒报道,随着苹果首款头显产品Vision Pro在6月份正式推出,AR/VR/MR等头显产品也就将成为各大公司下一个重要的竞争领域,对显示屏这一关
Top