文章摘要
Servo 0.4.0版本发布,包含558项代码变更,新增了attr()函数、媒体查询特性、SharedWorker等多项Web平台功能,旨在为开发者提供轻量高效的嵌入式Web技术替代方案。
文章总结
好的,这是根据您的要求,对原文主要内容进行的中文重述,保留了关键细节,并删减了与主题无关的内容(如详细的贡献者列表、捐赠信息等)。
标题:Servo 六月进展:真实世界兼容性、媒体查询、SharedWorker 等!
Servo 0.4.0 版本包含了六月份的所有变更,共计创纪录的 558 次提交。该版本修复了多个安全漏洞,包括更新 SpiderMonkey JavaScript 运行时以修复若干安全缺陷,以及修复了 SubtleCrypto 中 RSA 和 ML-DSA 操作的时间侧信道攻击漏洞。此外,还修复了一个影响文件目录列表的 HTML 注入(XSS)漏洞。
新功能与 Web 平台特性:
- CSS 功能: 实现了实验性的
attr()函数(可在content属性之外使用);支持image(<color>)函数以及ellipse()和circle()中的closest-corner和farthest-corner关键字;calc()等数学表达式现在可以在解析后(如sign(1em - 32px))再求值;支持@font-face中的font-feature-settings属性。 - 媒体查询: 新增了对
device-width、device-height、height、aspect-ratio、orientation、pointer、any-pointer、hover和any-hover等媒体查询特性及其min-和max-变体的支持。 - DOM API: 新增了
SharedWorker、console.dir()、CustomElementRegistry(包括initialize()和构造函数)、Request/Response/Blob上的textStream()、Element上的指针捕获和触摸事件相关方法,以及crypto.subtle.digest()和crypto.subtle.getPublicKey()对特定加密算法的支持。
真实世界兼容性:
- 由于改进了对可变字体的处理,
lichess.org、Zulip和Speedtest等网站的布局正确性和可读性得到了显著提升。 Google Photos和Cash Converters等网站在 0.4.0 版本中运行良好。Google Maps和OpenStreetMap渲染正常,但交互性仍存在一些问题。
进行中的工作:
- 正在实现功能更强大的
attr()函数(需启用实验性偏好)。 - WebGPU 支持得到改进,包括
copyExternalImageToTexture()、createQuerySet()和resolveQuerySet()等 API。 - 正在推进无障碍支持、可见的文本选择功能以及 Web Animations 的实现。
- 开始设计一个包装 C API,以便将 Servo 作为预构建的共享库嵌入到其他应用程序中。
嵌入 API:
- 新增了
WebView::rendering_context方法。 - 移除了内部方法
WebView::send_error。 - 改进了多个 API 类型的文档。
用户与开发者体验:
- Servo Shell: Android 版本现在要求 Android 13+;桌面版支持拖放文件打开;标签栏在标签过多时可水平滚动;全屏模式现在会正确进入窗口所在的显示器;
<select multiple>元素在所有桌面平台上均可交互;地址栏和命令行现在支持localhost:<port>隐式使用http://协议。 - Firefox DevTools: 控制台标签页现在能正确报告未捕获的异常;控制台和调试器标签页支持检查嵌套数组和 Map 对象;调试器的“作用域”面板现在能显示未初始化的变量、
this的值以及全局作用域。 - 开发者工具: 新增了
mach test-wpt --update-expectations命令,可一次性运行 Web 平台测试并更新预期结果。
Web 平台改进:
- 为提升滚动性能,
wheel事件现在默认不可取消,除非存在非passive的监听器。 - 点线、虚线和波浪线文本装饰现在能跨元素边界连续显示。
- 改进了
<dialog>、<iframe sandbox>、<input minlength/maxlength>、CSS 渐变、@font-face中的font-style和unicode-range、FontFaceSet、IntersectionObserver、URL.createObjectURL()以及 SubtleCrypto 中 ECDSA 和 Ed25519 的符合性。 - 修复了与
<input hidden>、animation-delay、clip-path、box-shadow: inset、click事件、load事件、error事件以及document.getElementById()相关的多个错误。
垃圾回收安全:
- 为了更安全地处理垃圾回收,引入了新的
safe_borrow_mut()方法和NoGC标记类型。这要求代码在可能发生垃圾回收的路径上证明其安全性,从而利用 Rust 的类型系统来防止因DomRefCell借用冲突导致的崩溃。
性能与稳定性:
NoGC机制还带来了性能优化,通过避免在某些代码区域中为 JavaScript 对象进行根标记,减少了布局和HTMLCollection的开销。- 内存使用得到改善,
BoxFragment大小减少了 17%。 - 修复了页面重载和 2D 画布中的内存泄漏问题。
- 2D 画布的功耗降低了 23%,并避免了重复光栅化相同的 SVG。
- Servo 现在异步解码和填充图像缓存,为脚本线程腾出更多时间。
- 改进了增量布局,并减少了
IntersectionObserver的重排。 - 开始对堆叠上下文树进行增量更新,使某些布局微基准测试速度提升高达 10%。
- 通过模糊测试修复了 16 个崩溃错误,涉及
<iframe>、<slot>、动画、clip-path、transition等多个方面。
评论总结
根据评论内容,主要观点如下:
1. 对Servo实用性的质疑
- 评论1直接质疑Servo的实际用途:“Does anyone actually use Servo for anything?”(有人真的用Servo做点什么吗?)
- 评论3反映构建困难:“The last few times I've tried to build Servo it's failed for me.”(最近几次尝试构建Servo都失败了。)
2. 对浏览器竞争的支持
- 评论2表达积极态度:“Anything that creates more competition in the browser space has my support.”(任何增加浏览器领域竞争的事物我都支持。)
- 同时提及对Ladybird项目的失望:“their recent adoption of LLMs and going source-available only has put a bit of a dent in it.”(他们最近采用LLM并转为仅源代码可用,让我有些失望。)
3. 技术实现问题
- 评论3指出Servo是少数构建失败的Rust项目之一:“It's also one the very few rust projects that have ever failed to build for me.”(这也是少数几个我构建失败的Rust项目。)
总结:评论呈现两极分化——部分用户质疑Servo的实用性和构建稳定性,另一部分则肯定其推动浏览器竞争的价值,同时提及对Ladybird项目转向的失望。