Hacker News 中文摘要

RSS订阅

Servo 六月更新:真实世界兼容性、媒体查询、SharedWorker 等 -- June in Servo: real world compat, media queries, SharedWorker, and more

文章摘要

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-cornerfarthest-corner 关键字;calc() 等数学表达式现在可以在解析后(如 sign(1em - 32px))再求值;支持 @font-face 中的 font-feature-settings 属性。
  • 媒体查询: 新增了对 device-widthdevice-heightheightaspect-ratioorientationpointerany-pointerhoverany-hover 等媒体查询特性及其 min-max- 变体的支持。
  • DOM API: 新增了 SharedWorkerconsole.dir()CustomElementRegistry(包括 initialize() 和构造函数)、Request/Response/Blob 上的 textStream()Element 上的指针捕获和触摸事件相关方法,以及 crypto.subtle.digest()crypto.subtle.getPublicKey() 对特定加密算法的支持。

真实世界兼容性:

  • 由于改进了对可变字体的处理,lichess.orgZulipSpeedtest 等网站的布局正确性和可读性得到了显著提升。
  • Google PhotosCash Converters 等网站在 0.4.0 版本中运行良好。Google MapsOpenStreetMap 渲染正常,但交互性仍存在一些问题。

进行中的工作:

  • 正在实现功能更强大的 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-styleunicode-rangeFontFaceSetIntersectionObserverURL.createObjectURL() 以及 SubtleCrypto 中 ECDSA 和 Ed25519 的符合性。
  • 修复了与 <input hidden>animation-delayclip-pathbox-shadow: insetclick 事件、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-pathtransition 等多个方面。

评论总结

根据评论内容,主要观点如下:

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项目转向的失望。