首页 > 其他分享 >Chrome 中的合成技术

Chrome 中的合成技术

时间:2024-01-03 23:00:42浏览次数:33  
标签:渲染 Chrome 合成 技术 图层 图片 绘制 页面

通常页面的组成是非常复杂的,有的页面里要实现一些复杂的动画效果,比如点击菜单时弹出菜单的动画特效,滚动鼠标滚轮时页面滚动的动画效果,当然还有一些炫酷的 3D 动画特效。如果没有采用分层机制,从布局树直接生成目标图片的话,那么每次页面有很小的变化时,都会触发重排或者重绘机制,这种“牵一发而动全身”的绘制策略会严重影响页面的渲染效率。

为了提升每帧的渲染效率,Chrome 引入了分层和合成的机制。那该怎么来理解分层和合成机制呢?

你可以把一张网页想象成是由很多个图片叠加在一起的,每个图片就对应一个图层,Chrome 合成器最终将这些图层合成了用于显示页面的图片。如果你熟悉 PhotoShop 的话,就能很好地理解这个过程了,PhotoShop 中一个项目是由很多图层构成的,每个图层都可以是一张单独图片,可以设置透明度、边框阴影,可以旋转或者设置图层的上下位置,将这些图层叠加在一起后,就能呈现出最终的图片了。

在这个过程中,将素材分解为多个图层的操作就称为分层,最后将这些图层合并到一起的操作就称为合成。所以,分层和合成通常是一起使用的。

考虑到一个页面被划分为两个层,当进行到下一帧的渲染时,上面的一帧可能需要实现某些变换,如平移、旋转、缩放、阴影或者 Alpha 渐变,这时候合成器只需要将两个层进行相应的变化操作就可以了,显卡处理这些操作驾轻就熟,所以这个合成过程时间非常短。

在 Chrome 的渲染流水线中,分层体现在生成布局树之后,渲染引擎会根据布局树的特点将其转换为层树(Layer Tree),层树是渲染流水线后续流程的基础结构。

层树中的每个节点都对应着一个图层,下一步的绘制阶段就依赖于层树中的节点。绘制阶段其实并不是真正地绘出图片,而是将绘制指令组合成一个列表,比如一个图层要设置的背景为黑色,并且还要在中间画一个圆形,那么绘制过程会生成|Paint BackGroundColor:Black | Paint Circle|这样的绘制指令列表,绘制过程就完成了。

有了绘制列表之后,就需要进入光栅化阶段了,光栅化就是按照绘制列表中的指令生成图片。每一个图层都对应一张图片,合成线程有了这些图片之后,会将这些图片合成为“一张”图片,并最终将生成的图片发送到后缓冲区。这就是一个大致的分层、合成流程。

需要重点关注的是,合成操作是在合成线程上完成的,这也就意味着在执行合成操作时,是不会影响到主线程执行的。这就是为什么经常主线程卡住了,但是 CSS 动画依然能执行的原因。

如果说分层是从宏观上提升了渲染效率,那么分块则是从微观层面提升了渲染效率

通常情况下,页面的内容都要比屏幕大得多,显示一个页面时,如果等待所有的图层都生成完毕,再进行合成的话,会产生一些不必要的开销,也会让合成图片的时间变得更久。

因此,合成线程会将每个图层分割为大小固定的图块,然后优先绘制靠近视口的图块,这样就可以大大加速页面的显示速度。不过有时候, 即使只绘制那些优先级最高的图块,也要耗费不少的时间,因为涉及到一个很关键的因素——纹理上传,这是因为从计算机内存上传到 GPU 内存的操作会比较慢。

为了解决这个问题,Chrome 又采取了一个策略:在首次合成图块的时候使用一个低分辨率的图片。比如可以是正常分辨率的一半,分辨率减少一半,纹理就减少了四分之三。在首次显示页面内容的时候,将这个低分辨率的图片显示出来,然后合成器继续绘制正常比例的网页内容,当正常比例的网页内容绘制完成后,再替换掉当前显示的低分辨率内容。这种方式尽管会让用户在开始时看到的是低分辨率的内容,但是也比用户在开始时什么都看不到要好。

所以,如果涉及到一些可以使用合成线程来处理 CSS 特效或者动画的情况,就尽量使用 will-change 来提前告诉渲染引擎,让它为该元素准备独立的层。但是凡事都有两面性,每当渲染引擎为一个元素准备一个独立层的时候,它占用的内存也会大大增加,因为从层树开始,后续每个阶段都会多一个层结构,这些都需要额外的内存,所以你需要恰当地使用 will-change。

标签:渲染,Chrome,合成,技术,图层,图片,绘制,页面
From: https://blog.51cto.com/key3feng/9090185

相关文章

  • 构建高效外卖配送系统:技术要点与实际代码示例
    随着外卖服务需求的不断增长,构建一个智能化、高效的外卖配送系统成为餐饮业务成功的关键。在本文中,我们将重新审视外卖配送系统,着重思考技术架构,并提供一些实际代码示例,以展示系统中一些先进的技术要点。技术架构设计一个现代的外卖配送系统应该具备以下关键特性:实时配送调度、智能......
  • 构建高效外卖配送系统:技术要点与示例代码
    随着外卖服务的普及,构建一个高效的外卖配送系统成为餐饮业务成功的关键。在这篇文章中,我们将探讨外卖配送系统的关键技术要点,并提供一些示例代码,演示其中的一些实现方法。1.订单处理与管理在外卖配送系统中,订单处理是一个核心环节。以下是一个简化的订单类的示例代码,用Python语言......
  • 协议转换器技术白皮书:网络通信的桥梁
    在这个数字化迅速发展的时代,网络通信充当着信息传递的重要角色。随着技术的不断进步和网络环境的日趋复杂,不同的网络设备和系统之间需要有效沟通。协议转换器便是这样一种设备,它能够使得本不兼容的网络能够顺畅地进行数据交换和通信,促进了不同设备和系统之间的互操作性。一、协议转......
  • 串口光猫技术解析:高效数据传输的关键
    在数字通信的世界中,串口光猫技术以其高效的数据传输能力,已成为现代信息社会的关键组成部分。这项技术将传统的串行通信方式与现代的光纤通信技术相结合,为用户提供了一个高速且可靠的网络连接解决方案。一、串口光猫的核心作用串口光猫(光纤猫),全称为光纤网络终端,是一种用于将光信号转......
  • SDI光端机技术探讨:专业视频传输的优化方案
    SDI光端机技术探讨:专业视频传输的优化方案在现代数字化媒体和广播行业,高质量的视频传输技术是制胜的关键。SDI光端机作为专业视频传输的优化方案,在行业内广泛应用,以其高带宽、远距离传输能力和卓越的信号稳定性,为广播电视和专业影视制作提供了坚实的技术支撑。一、SDI光端机的核心......
  • AI的突破与融合:2024年中国智能技术的新纪元_光点科技
    随着人工智能领域的不断突破,2024年注定将成为中国智能技术发展的一个新纪元。当下,AI技术不仅在理论研究上取得了重大进展,其在商业应用、社会服务等领域的融合也日益深入。本文将结合近期网络上的AI热点,展望中国在AI技术方面的发展趋势和应用前景。AI技术的商业化突破近期,中国AI领域......
  • 探索云原生技术在自动化运维中的应用
    探索云原生技术在自动化运维中的应用摘要随着技术的不断发展,云原生技术成为了当前互联网行业的热门话题之一。本文将深入探讨云原生技术在自动化运维领域的应用,结合大数据和数据库等相关技术,为中级及以上技术人员提供实操性的建议。通过提升文章易读性,力求让读者在阅读过程中更好地......
  • 技术文档指南:版本说明、网站文案、FAQ、案例研究与内容优化
    ReleaseNotes和产品公告ReleaseNotes通常是软件文档的一部分,是在新产品发布时提供给用户的简短、高级摘要。它们包含有关更新的重要信息,包括新功能、增强功能、错误修复,通常还包括已知问题。每个版本说明与特定软件版本相关联,并帮助用户了解该特定版本中可以期待的哪些更改或......
  • Firefox 110, Chrome 110, Chromium 110 官网离线下载 (macOS, Linux, Windows)
    MozillaFirefox,GoogleChrome,Chromium,AppleSafari作者主页:www.sysin.org天下只剩三种(主流)浏览器:AppleSafariMozillaFirefoxGoogleChrome(Chromium)【国外各种(MicrosoftEdge、Opera…),国产各种…】Safari下载:AppleSafari16.3-macOS专属浏览器(独立安装包下载)如何屏......
  • chrome去除安全设置
    选择桌面的谷歌图标,右键-属性,在目标内添加–disable-web-security--user-data-dir=E:\MyChromeDevUserData示例:“C:\ProgramFiles\Google\Chrome\Application\chrome.exe”--disable-web-security--user-data-dir=E:\chrome_tmp_data说明:其中E:\chrome_tmp_data是新建的文件夹......