# 2026年8月Ladybird动态 - Ladybird
来源:https://ladybird.org/newsletter/2026-08-31/
朋友们好!
8月里,Ladybird新增了在Twitch上的视频播放功能,YouTube支持了更多视频格式,加入了CSS滚动吸附、开发者工具中的JavaScript调试、可暂停恢复的下载功能以及会话恢复。本月,引擎性能从偶尔关注转变为持续重点投入:推出了新样式引擎、布局缓存,并将CSS动画移出主线程。我们为存储在JavaScript值中的单元格指针添加了笼式管理,CSS解析和绘制管线也迁移到Rust实现。
Ladybird完全依靠企业和个人对开放网络的支持进行资金支持。本月,我们很高兴地欢迎以下新赞助者:
- Arnav Guleria 赞助5000美元
您可以在我们的[赞助者页面](https://ladybird.org/#sponsors)查看当前所有支持项目的人士,我们对此深表感谢。如有兴趣赞助,请[联系我们](mailto:
[email protected])。
### Twitch视频支持与YouTube更多格式
我们的媒体源扩展实现新增了对分段MP4的支持,以及AVC(H.264)、HEVC(H.265)、AV1和AAC编解码器,支持查询现在能准确反映实际能力([#11251](https://github.com/LadybirdBrowser/ladybird/pull/11251))。这使得我们能在包括Twitch和Plex在内的更多网站播放自适应码率视频。YouTube在Ladybird中原本就已工作,因为所有视频都以VP9/Opus WebM格式提供,但一些较旧/较冷门的视频仅提供多质量级别的AVC版本,而较高质量(尤其是8K)通常仅以AV1提供。
我们还修复了一批播放错误:悬停YouTube视频卡片预览不再导致崩溃([#10992](https://github.com/LadybirdBrowser/ladybird/pull/10992)),使用`preload="none"`的播放器不再卡住([#11454](https://github.com/LadybirdBrowser/ladybird/pull/11454)),基于HLS.js的播放器开始正常播放([#11480](https://github.com/LadybirdBrowser/ladybird/pull/11480))。
### CSS滚动吸附
滚动吸附功能已上线([#10944](https://github.com/LadybirdBrowser/ladybird/pull/10944)):包括`scroll-snap-type`、`scroll-snap-align`和`scroll-snap-stop`。滚轮、键盘、滚动条拖拽、触控板轻拂以及程序化调用`scrollTo()`均支持吸附,布局变化时内容会重新吸附。(`scrollIntoView()`暂不支持吸附。)
轮播图和全页滚动器即基于此构建。
### 开发者工具中的JavaScript调试
您现在可以在Ladybird中调试JavaScript:设置断点、单步执行代码行、计算监视表达式([#11128](https://github.com/LadybirdBrowser/ladybird/pull/11128)),该功能基于我们JavaScript引擎中新实现的断点支持([#10936](https://github.com/LadybirdBrowser/ladybird/pull/10936))。Wasm调试和DOM变更断点暂未实现,但核心工作流程已可用。(此前同,Firefox开发者工具前端在我们构建自有前端前作为临时方案使用。)
### 可暂停恢复的下载
下载现在支持暂停和恢复,并在服务器支持时可在浏览器重启后继续([#10932](https://github.com/LadybirdBrowser/ladybird/pull/10932))。我们还会在可能的情况下通过四个并行连接进行下载。
### 会话恢复
使用`Ctrl+Shift+T`重新打开已关闭标签页时,过去仅恢复URL。现在会恢复标签页的完整会话历史,包括前进/后退状态,且该状态在浏览器重启后仍保持([#11178](https://github.com/LadybirdBrowser/ladybird/pull/11178))。“复制标签页”功能也会复制会话历史([#11286](https://github.com/LadybirdBrowser/ladybird/pull/11286))。我们暂不持久化表单提交数据;这需要先谨慎处理。
### 浏览器界面
- **`mailto:`链接**会打开您的邮件客户端,其他外部URL方案会提示确认,并防范危险方案及递归启动([#10846](https://github.com/LadybirdBrowser/ladybird/pull/10846))。
- **JavaScript对话框不再阻塞整个浏览器**:`alert()`、`confirm()`和`prompt()`现在是Qt界面中的页面内覆盖层,而非模态系统对话框,因此`while (true) alert("lol")`不会让您无法操作。您可以切换标签页,或直接关闭标签页([#11264](https://github.com/LadybirdBrowser/ladybird/pull/11264))。
- **崩溃恢复**不再向您的会话历史注入假页面;您会看到崩溃屏幕,且真实历史记录得以保留。重新加载可从崩溃中断处继续([#11402](https://github.com/LadybirdBrowser/ladybird/pull/11402))。
- **在URL栏输入`localhost:8000`或`127.0.0.1`**现在会通过`http`访问,而不会失败([#11007](https://github.com/LadybirdBrowser/ladybird/pull/11007))。
- **大量Wayland修复**:地址栏保持位置([#10862](https://github.com/LadybirdBrowser/ladybird/pull/10862)、[#11149](https://github.com/LadybirdBrowser/ladybird/pull/11149)),Tab键正确循环页面焦点([#10868](https://github.com/LadybirdBrowser/ladybird/pull/10868)),滚动条拖拽超出窗口不再丢失鼠标释放事件(此修复适用于所有Linux,[#11343](https://github.com/LadybirdBrowser/ladybird/pull/11343))。
### 站点兼容性规则
一些网站根据User-Agent嗅探向Ladybird提供损坏的内容。我们现在通过运行时加载的声明式站点兼容性规则处理此问题,而非在浏览器中硬编码每个站点的策略([#11327](https://github.com/LadybirdBrowser/ladybird/pull/11327))。规则为纯JSON格式,任何人都能看到我们针对哪些站点做了什么。首批用户是nytimes.com和cnn.com,当我们在User-Agent字符串中隐藏“Ladybird”时,两者均能正确渲染([#11333](https://github.com/LadybirdBrowser/ladybird/pull/11333))。
### 兼容性提升的网站
- **chatgpt.com**:修复了登录页面崩溃及三个布局问题([#11398](https://github.com/LadybirdBrowser/ladybird/pull/11398))。
- **vscode.dev**:打开新文件后几秒即崩溃。点击测试从错误元素读取`pointer-events`,VS Code空编辑器提示触发了该问题([#11342](https://github.com/LadybirdBrowser/ladybird/pull/11342))。
- **icloud.com**:在页面超过1KB处声明字符编码的网站不再显示为乱码([#11219](https://github.com/LadybirdBrowser/ladybird/pull/11219))。
- **strava.com**:两项独立修复分别将活动地图加载时间减半([#11133](https://github.com/LadybirdBrowser/ladybird/pull/11133)、[#11114](https://github.com/LadybirdBrowser/ladybird/pull/11114)),由于实现了`svg.getScreenCTM()`,图表弹出窗口现在跟随鼠标([#11177](https://github.com/LadybirdBrowser/ladybird/pull/11177)),一个曾不断增长直至内存耗尽的活动页面不再如此;其占用内存从17.8 GiB降至61 MiB([#11055](https://github.com/LadybirdBrowser/ladybird/pull/11055))。
- **outlook.com和Word**:修复了Outlook崩溃,Word登录现已可用([#11216](https://github.com/LadybirdBrowser/ladybird/pull/11216))。
- **milliondollarhomepage.com和xkcd**:`<map>`元素中的`<area>`图像映射链接现在可点击([#10863](https://github.com/LadybirdBrowser/ladybird/pull/10863))。
### CSS
- **3D变换**:一系列修复填补了3D渲染的重大缺失部分:在`transform-style: flat`边界处的扁平化([#11009](https://github.com/LadybirdBrowser/ladybird/pull/11009))、`backface-visibility`([#10960](https://github.com/LadybirdBrowser/ladybird/pull/10960)),以及使用BSP树对交叉3D平面进行正确的深度排序([#11045](https://github.com/LadybirdBrowser/ladybird/pull/11045))。深度排序针对[cssDOOM](https://cssdoom.wtf/)(一个用纯CSS 3D变换构建的DOOM渲染器)进行了测试:墙壁现在按正确顺序绘制,表面不再闪烁([#11466](https://github.com/LadybirdBrowser/ladybird/pull/11466))。
- **`overflow-wrap`**:长不可拆分单词现在会在字形边界处紧急换行,而非溢出其容器(RTL文本暂不紧急换行)([#11416](https://github.com/LadybirdBrowser/ladybird/pull/11416))。在Google翻译上效果显著提升。
- **从右到左滚动容器**现在朝正确方向滚动;此前部分内容不可达([#11023](https://github.com/LadybirdBrowser/ladybird/pull/11023))。
- **文本装饰**现在使用装饰框的颜色、粗细和字体几何进行绘制,这修复了BBC Weather上无条件下划线的问题([#10744](https://github.com/LadybirdBrowser/ladybird/pull/10744))。
这是Ladybird中cssDOOM第一关的运行效果:
以及`overflow-wrap`前后的Google翻译:
### 重视性能
我们持续针对master分支运行浏览器基准测试,并在[linegodown.lol](https://linegodown.lol/)跟踪结果。整个8月,我们的Speedometer 2分数从约47提升至约64,Speedometer 3从约2.5提升至约3.9,StyleBench从约3.5提升至约83。与成熟引擎相比,这些数字仍很温和,但进步是实实在在的。
三张图表展示了Ladybird 2026年8月在Linux上的基准测试分数:Speedometer 2从47升至64,Speedometer 3从2.5升至3.9,StyleBench从3.5升至83
部分推进是系统性的:我们针对其他浏览器对单个操作进行基准测试,找出我们显著较慢的操作,并追踪原因。一个比Chromium慢100倍的DOM操作通常并非因深刻原因而慢100倍;只是某些地方出了问题,找到它有助于实际页面。经过一个月努力,许多此类比率降低了一个数量级:canvas `fillStyle`解析从比Chromium慢约90倍降至约2倍([#11300](https://github.com/LadybirdBrowser/ladybird/pull/11300)),`replaceChildren()`从13倍降至4倍以下([#11306](https://github.com/LadybirdBrowser/ladybird/pull/11306)),列表插入和移除从超过120倍降至20倍以下([#11389](https://github.com/LadybirdBrowser/ladybird/pull/11389))。
JavaScript引擎也针对属性访问([#11175](https://github.com/LadybirdBrowser/ladybird/pull/11175))、展开运算([#11383](https://github.com/LadybirdBrowser/ladybird/pull/11383))、Promise组合器([#11374](https://github.com/LadybirdBrowser/ladybird/pull/11374))和`JSON.stringify`(现在在我们的基准测试中已接近V8的85%水平([#11329](https://github.com/LadybirdBrowser/ladybird/pull/11329)))获得了一系列快速路径优化。
最令人满意的修复:曾暂时变稀疏的数组现在会永远留在慢速哈希表存储中。30行代码改动后,Minecraft4k从10.2帧提升至14.5帧([#11423](https://github.com/LadybirdBrowser/ladybird/pull/11423))。
### 新样式引擎
我们用新引擎替换了选择器匹配、样式失效、层叠和计算样式保留([#11088](https://github.com/LadybirdBrowser/ladybird/pull/11088))。我们希望样式工作量与更改内容成比例,而非与可能更改的内容成比例。历史上,当某些内容更改时,浏览器引擎会标记所有可能受影响的内容,然后重新匹配和重新层叠所有内容。现代引擎通过失效集等技术缩小该集合,但模式相同,打开菜单仍可能使数千个元素失效以更改数十个元素的样式。
新引擎将DOM变更、状态更改和CSSOM编辑视为类型化变更流,将每个变更路由到依赖它的选择器,并在输出未改变时立即停止。用数据库术语说:选择器是持久化查询,计算样式是增量保持更新的物化视图。
正确性是难点。一个无缓存的简单评估器作为参考实现,每个快速路径都与其对照检查。引擎的输入流也可以从真实浏览会话中录制并确定性回放;在开发过程中,我们回放了真实网站的录制(每个包含数百万事件),并将任何输出差异视为失败。
在许多工作负载下,新引擎仍比该方法慢,且有许多调优工作待完成。但在衡量此类增量重样式的StyleBench上,我们现已进入主流引擎相同范围。
这是8月底在M3 MacBook Pro上的结果:
柱状图展示了2026年8月底在M3 MacBook Pro上的StyleBench分数:Firefox 232.8,Safari 129.5,Ladybird 116.3,Chrome 103.8
Firefox仍然大幅领先。但此引擎仅一个月大,仍有许多优化待挖掘。:)
### 缓存布局结果
在此之前,几乎所有更改都意味着从视口开始重新布局整个文档。我们在`position: absolute`和SVG周围有少数情况下的部分重排,仅此而已。完整重排是在年轻引擎中保持正确的简便方法,但在大型页面上,它会重复许多每次都产生相同结果的工作。
布局结果现在基于输入约束进行缓存和重用([#11113](https://github.com/LadybirdBrowser/ladybird/pull/11113))。格式化上下文运行以其父项传递的所有内容为键:上下文类型、尺寸约束及其根状态。当子树中没有任何内容更改时,整个运行(包括嵌套运行)会从缓存重放,且由于片段偏移量相对于包含块,缓存子树可在新位置重放。
阴影模式在每次缓存命中时重新运行真实布局,并在任何差异时恐慌。其余工作致力于提高缓存命中率。缓存最初基于所有块轴输入键控,因此解析高度的祖先会丢弃其下方所有缓存结果,即使大多数内容从不查看这些值;在嵌套弹性布局页面上,单个叶子节点在一次布局中可能被测量29次。现在我们记录框是否实际观察了这些输入,并忽略未观察的([#11346](https://github.com/LadybirdBrowser/ladybird/pull/11346))。DOM变更也停止重建整个布局子树,通过比较增量更新树与从零重建树的测试支持([#11126](https://github.com/LadybirdBrowser/ladybird/pull/11126))。
结合新样式引擎,此工作是上述基准测试进步的主要来源。
### 将CSS动画移出主线程
运行中的CSS动画过去每秒唤醒主线程60次以重新计算样式、重建绘制状态和记录新的显示列表,与JavaScript竞争同一线程,即使动画的整个时间线已从其关键帧得知。
现在,符合条件的不透明度和变换动画被一次性描述(作为其解析的关键帧、计时和缓动),并交给合成器,后者在自己的垂直同步上推进它们([#11470](https://github.com/LadybirdBrowser/ladybird/pull/11470))。动画运行期间主线程不参与。当脚本通过`getComputedStyle`、`currentTime`或`playState`询问动画时,我们按需采样,因此答案从不陈旧。有限动画在结束时恰好有一次唤醒计时器,以触发`animationend`。
即使在主线程忙于运行JavaScript时,动画现在也能保持流畅,充满动画的页面应消耗更少电量。关键帧中的自定义属性现在也能正确动画([#11477](https://github.com/LadybirdBrowser/ladybird/pull/11477))。