【作者信息】
Nikolas Zimmermann,其博客可查看文章、进行搜索以及了解关于他的信息。
【核心事件:降低LBSE图层开销】
2026年7月14日发布的文章,阅读时长15分钟。作者上一次撰写关于基于图层的SVG引擎(LBSE)的内容是在2021年秋季,当时发布了技术设计文档。目前该引擎已集成到WebKit中,但不是默认选项,需通过切换运行时设置(在MiniBrowser中)来启用。
【LBSE发展历程】
2021年秋季至2022年末,LBSE在上游逐步开发,添加了对构成SVG的所有独立构建块的支持。工作停滞几个月后,在2023年年中恢复,一直持续到2024年4月,得益于Wix的支持,实现了大多数高级绘制功能。之后工作再次暂停,因项目需持续资金支持。
【LBSE的意义与挑战】
LBSE的意义在于将SVG置于与HTML和CSS相同的架构上,使其能继承优势并受益于未来改进。但共享架构有代价,旧版引擎经过二十年优化,LBSE需集成到共享代码中且不能降低性能。此外,部分共享架构需重新设计,要为SVG创建特殊快速路径,同时不能降低HTML性能。
【LBSE需达标准及现状改变】
LBSE需在日常普通渲染方面与旧版引擎竞争,满足此标准后,硬件加速及HTML/CSS引擎的改进才能视为成功。2026年初,Igalia对LBSE进行一次性投资,开展新一轮开发。这篇文章是关于2026年上半年的两篇文章中的第一篇,介绍当前进展及项目发展情况。
【快速回顾之前工作】
设计LBSE时,核心思路是让SVG复用HTML和CSS已使用的RenderLayer树,早期每个SVG渲染器都有自己的RenderLayer,虽浪费资源,但能验证想法可行性,之后可完善设计。
【确保正确性是首要任务】
恢复开发时,先确保引擎正常工作。解决了文本渲染、崩溃问题、实际渲染错误等。春季对滤镜方面进行大量改进,但最重要的滤镜更改尚未完成,一个待处理的拉取请求可解决LBSE下大量滤镜测试失败问题。
【真正的目标:性能】
LBSE核心目标是性能,潜在运行速度可能比旧版引擎快。但早期捷径使每个渲染器都有图层,在包含数千个形状的场景中产生额外开销。因此要仅在元素需要时创建图层,先移除经过变换的叶子元素的图层,经过裁剪的元素暂时保留图层。
【条件图层创建】
移除图层是有风险的工作,需先应用一系列准备性补丁。前期准备包括将SVG数据移到新结构体,缓存变换到渲染器本身,构建按DOM顺序的绘制路径和点击测试路径等。2026年6月,条件图层创建功能正式完成,核心思想是仅当元素因内在原因需要时才创建RenderLayer。简单2D变换的叶子元素不再强制创建图层,但经过变换的容器元素仍保留图层。有了该功能后,LBSE可按需创建图层,但合成内容出现问题,下一篇文章将探讨解决方案。
【致谢】
作者衷心感谢参与验证LBSE工作的苹果开发者们,包括Simon、Said、Karl和Ahmad。