状态

所有系统运行正常更新于 2026年10月31日
console.log运行正常
90 天前每个有变化的帧调用一次,空闲时不调用。今天
console.clear很少使用
90 天前首帧、invalidate() 之后、堆叠 100 帧后进入空闲时,以及达到 300 帧时。今天
Yoga运行正常
90 天前WebAssembly flexbox 布局,pointScaleFactor 为 1。今天
Turbolog encoder运行正常
90 天前行哈希检查和 %c 游程编码。今天
DevTools Throttler已遵循
90 天前视口节流间隔为 50 ms。帧间隔至少为 66 ms。今天
textjs.org运行正常
90 天前文档、学习、Playground、博客和商店。今天

实时​基准测试

@textjs/core 流水线在此标签页的 100×32 仪表盘上运行,将帧写入内存中的控制台。

完整帧
—
布局 + 绘制 + 编码
输入
—
单行编辑
空闲帧
—
无变化
%c span
—
3,200 个单元格

页面空闲时自动开始。

性能历史

在每个里程碑于同一台机器(Apple M5 Pro · Bun 1.4.4)上运行 packages/core/test/perf.test.ts。取 1000 帧的平均值。

版本完整帧输入空闲%c span
0.1.02025年3月 · @textjs/core · 7c91cea0.194ms0.065ms0.043ms205
0.2.02025年7月 · textjs.org · 92437cc0.192ms0.067ms0.042ms205
0.3.02025年11月 · 10× input · 8c2d1b10.205ms0.065ms0.043ms146
0.3.02025年11月 · Mobile pass · e2e6e460.212ms0.067ms0.045ms146
0.4.02026年5月 · Zero-flash frames · f007ade0.184ms0.046ms0.028ms146
1.0.02026年10月 · Text.js 1.0 · 57968b60.163ms0.011ms0.000ms149

DevTools 前端

在 Chrome for Testing 中运行 bench/devtools:测量空白绘制、送达帧数和显示延迟,每次运行 5 秒。测量方法。

驱动方式FPS空白绘制已绘制 / 已发出延迟 p50
追加(已发布)151.0%74 / 7510.4ms
每帧清空1570.6%70 / 7560.4ms
追加,不限频率600.8%67 / 29531.2ms
每帧清空6081.1%45 / 3009.8ms

历史事件

最新事件在前。时间均为 UTC。

2026年10月

  • iOS Safari 中页面卡在页头下方10月27日 – 2026年10月28日 · 已解决
    1. 已解决

      此事件已解决。

    2. 监控中

      修复已部署。已关闭滚动锚定(overflow-anchor: none)。正在监控。

    3. 已定位

      向下滚动再向上滚动后,首屏标题仍可能卡在吸顶页头下方。Safari 的滚动锚定正在调整滚动位置。

    4. 监控中

      修复已部署。这些元素现在仅可横向滚动,scrollbar-gutter: stable 也仅用于鼠标设备。

    5. 已定位

      文件标签页、代码块和正文表格因当前标签的下划线产生了 1 px 的纵向溢出,因此可沿两个轴滚动,iOS 会将原本用于页面的纵向滑动交给这些元素处理。scrollbar-gutter: stable 还会导致 iOS 上首次滚动时跳动。

    6. 调查中

      有用户报告 textjs.org 页面在 iOS Safari 中无法滚回顶部,正在调查。

    此事件影响了:textjs.org。

    事后分析

    textjs.org 页面加载时不会发生偏移,因此滚动锚定无需修正位置。在 iOS Safari 中,滚动锚定将首屏区域固定在吸顶页头下方,阻止页面滚回顶部。现在,在 textjs.org 上使用 ?debug=scroll 可实时查看滚动、触摸和尺寸变化事件,以及每次程序化聚焦或滚动调用的调用方名称。

    修复: 297c5d7, 55da525, 8424fcd · 更新日志:1.0.0

  • Lint 规则测试在 CI 中失败2026年10月23日 · 已解决
    1. 已解决

      测试器现在延迟到测试调用 RuleTester.itOnly 时才读取 it.only。CI 已通过。

    2. 已定位

      设置了 CI 环境变量时,读取 it.only 会导致 Bun 抛出异常。规则测试器在导入时执行 RuleTester.itOnly = it.only,因此加载失败。

    3. 调查中

      eslint-plugin-textjs 测试套件在 CI 中尚未运行任何规则测试就已失败。本地运行通过。

    事后分析

    @typescript-eslint/rule-tester 通过 RuleTester 的静态属性接收测试函数。修复将 it.only 包装在函数中。没有包或页面受到影响。

    修复: eca3f78

  • /playground 和 /opencode 的布局偏移10月21日 – 2026年10月22日 · 已解决
    1. 已解决

      所有路由的累积布局偏移均为 0。

    2. 监控中

      修复已部署。两个页面共用一种面板布局,追加尺寸时不再移动“适配控制台”。正在监控。

    3. 已定位

      控制台尺寸控件在水合后将测得的尺寸追加到标签中(Fit console · 120×36),导致“适配控制台”文本节点移动。面板的顶部和底部行在两个页面中的高度也不同,因此切换页面时面板会重新居中。

    4. 调查中

      布局偏移审计报告显示,/playground 和 /opencode 的累积布局偏移为 0.0001。审计覆盖的其他路由均为 0。在这两个页面间切换时,聚焦面板也会移动。

    此事件影响了:textjs.org。

    事后分析

    面板现在使用固定高度的顶部和底部插槽,每个演示预留相同的行,因此切换页面或演示时不会发生移动。OpenCode 连接面板在所有状态下都显示一行状态信息,水合前显示骨架占位。apps/web/scripts/e2e-layout.mjs 会断言不同路由、演示、视口尺寸和连接状态下的元素边界框一致。

    修复: 8f22b9b · 更新日志:1.0.0

  • 文档侧边栏在长页面底部滚出视野10月16日 – 2026年10月17日 · 已解决
    1. 已解决

      此事件已解决。

    2. 监控中

      修复已部署。学习章节也将页脚渲染在内容列内。正在监控。

    3. 已定位

      学习章节的侧边栏也有同样的问题。

    4. 监控中

      修复已部署。文档页面将页脚渲染在内容列内,使布局延伸到页面底部。

    5. 已定位

      侧边栏在文档布局内使用 position: sticky,网站页脚则渲染在该布局之后。粘性元素仅在其包含块位于屏幕内时保持固定,因此页脚滚入时,侧边栏也会随之滚走。

    6. 调查中

      有用户报告文档侧边栏在长页面底部滚出视野,正在调查。

    此事件影响了:textjs.org。

    事后分析

    带吸附侧边栏的页面(文档和学习章节)在内容栏中渲染页脚。其他页面保留共享页脚。

    修复: 131ac96 · 更新日志:1.0.0

  • npm 上的包名 textjs 不可用10月14日 – 2026年10月15日 · 已解决
    1. 已解决

      此事件已解决。

    2. 监控中

      框架和 CLI 包现已更名为 @textjs/next,与 @textjs/core 和 @textjs/react 位于同一作用域。导入路径从 textjs 改为 @textjs/next。

    3. 已定位

      自 2016 年 3 月 25 日起,名称 textjs 就已属于另一个 npm 包。

    4. 调查中

      将框架包 textjs 发布到 npm 时失败,返回 403 Forbidden。

    事后分析

    从 Text.js 1.0 开始,应用从 @textjs/next 而非 textjs 导入,OpenCode 桥接命令为 bunx @textjs/app proxy,可在任意目录运行。

    Text.js 1.0:一次更名 · 更新日志:1.0.0

2026年9月

  • 换行处出现空绘制层9月15日 – 2026年9月16日 · 已解决
    1. 已解决

      此事件已解决。

    2. 监控中

      修复已部署。对于不延续连续段的换行,现在会先将 %c 重置为空样式,使 DevTools 输出普通换行。每帧带有一个遮罩。

    3. 已定位

      当带样式的连续段在换行处结束时,\n 会写入该段的 %c span 内。DevTools 在换行处拆分 span,剩余的空部分变成带有 contain: paint 的 display: inline-block span,并获得独立的绘制层。

    4. 调查中

      正在排查 DevTools 帧中大多数换行处出现空 <span> 元素,以及部分帧出现双重遮罩 span 的问题。

    此事件影响了:Turbolog encoder。

    事后分析

    样式相同的 span 仍会跨换行合并。遮罩也移到了独立一行:DevTools 会将源代码链接(VM12:1)浮动到消息首行右侧,行内遮罩会让该链接停留在第 0 行旁边,挤窄这一行。

    更新日志:1.0.0

2026年8月

  • console.clear 后显示延迟增加8月27日 – 2026年8月31日 · 已解决
    1. 已解决

      bench/devtools 中的显示延迟中位数为 10.4 ms。此修复随 Text.js 1.0 发布。

    2. 监控中

      修复已部署。任何清空控制台的帧之后,渲染器会等待一次 110 ms,使后续帧在 DevTools 上次刷新超过 50 ms 后到达,并走即时处理路径。

    3. 已定位

      清空后,DevTools 会插入“控制台已清空”行。这会占用节流器的即时执行时机,将下一帧推入 50 ms 定时器。帧间隔为 66 ms 时,之后每帧都会继续由该定时器处理。

    4. 调查中

      bench/devtools 报告,控制台清空后的显示延迟中位数为 63 ms。之后每帧的延迟都保持在这一水平。

    此事件影响了:DevTools Throttler, console.clear。

    事后分析

    帧间隔允许时,离散输入仍会同步渲染。

    打破相位锁定 · 更新日志:1.0.0

  • 加载指示器导致 DevTools 控制台行错位8月11日 – 2026年8月12日 · 已解决
    1. 已解决

      此事件已解决。此修复随 Text.js 1.0 发布。

    2. 监控中

      修复已部署。默认的 dots 加载指示器现在绘制象限块(▘ ▝ ▗ ▖),每个在 Menlo 中占一个单元格。终端可通过 variant="braille" 使用盲文帧。

    3. 已定位

      默认加载指示器绘制盲文图案(U+2800 至 U+28FF)。Text.js 将每个图案按一个单元格测量,但 macOS 上 DevTools 控制台使用的 Menlo 字体没有盲文字形。回退字形比单元格宽,会将行内其余内容向右推。

    4. 调查中

      在 macOS 上,包含 <Spinner> 的行在 DevTools 中会错位。加载指示器右侧的单元格偏离网格。

    此事件影响了:console.log。

    事后分析

    出于同样原因,LineChart 默认绘制象限点。可通过 marker="braille" 使用盲文。

    更新日志:1.0.0

2026年5月

  • DevTools 控制台空白绘制增多5月5日 – 2026年5月19日 · 已解决
    1. 已解决

      修复已在 Text.js 0.4.0 中发布。空白绘制占比为 1.0%,全部出现在首帧。

    2. 监控中

      textjs.org 现在追加帧,不再清空控制台。零宽遮罩 span 将早先的帧挡在视野之外,帧间隔至少为 66 ms。

    3. 已定位

      DevTools 同步执行 console.clear(),但以 50 ms 节流绘制新消息。每帧会立即移除上一帧,最多 50 ms 后才绘制。在 bench/devtools 中,100×32 仪表盘以 15 fps 运行时,DevTools 绘制中有 70.6% 为空白;以 60 fps 运行时为 81.1%。

    4. 调查中

      正在排查有关 DevTools 控制台在负载下帧间闪现空白的报告。

    此事件影响了:console.clear, DevTools Throttler。

    事后分析

    自 0.1.0 起,Turbolog 对每个发生变化的帧都会发送一次 console.clear() 和一次 console.log()。bench/devtools 驱动 Chrome for Testing 中真实的 DevTools 前端,专为测量此事件而构建,并生成了上方 DevTools 前端表格中的数据。

    修复: f007ade · Turbolog:消除闪烁 · 更新日志:0.4.0

2026年4月

  • 控制台帧中的文件路径被改为链接样式4月14日 – 2026年4月15日 · 已解决
    1. 已解决

      此事件已解决。

    2. 监控中

      修复已部署。除非单元格允许链接,否则编码器会在 path:line、//host:port 和 data: 文本中插入 word joiner(U+2060)。

    3. 已定位

      DevTools 会将控制台消息中的 URL、path:line 和 //host:port 文本转换为链接,并强制应用主题颜色。编码器已拆开 :// 和 www.,但 path:line 及协议后的 //host:port 仍会匹配。

    4. 调查中

      src/app.tsx:12 和 http://localhost:3000 等文本在 DevTools 中显示为链接颜色,而非其 %c 样式。

    此事件影响了:Turbolog encoder。

    事后分析

    自 0.1.0 起,:// 和 www. 中就已包含 word joiner。需要保持可点击的单元格会设置 allow-link 属性,并原样写入。

    更新日志:0.4.0

2025年11月

  • 控制台应用按键延迟11月4日 – 2025年11月18日 · 已解决
    1. 已解决

      修复已在 Text.js 0.3.0 中发布。

    2. 监控中

      修复已部署。按键或粘贴等离散输入现在会在同一任务中同步渲染。其他更新仍在 requestAnimationFrame 时提交。

    3. 已定位

      每次更新(包括按键)都会等待下一个 requestAnimationFrame,然后 React 才提交并输出帧。

    4. 调查中

      控制台应用中的输入滞后于键盘操作,在 textjs.org 上的 OpenCode 中最明显。

    此事件影响了:textjs.org。

    事后分析

    按键不再等待下一个动画帧。定时器和流式数据等非输入触发的提交,仍按动画帧批量处理。

    修复: 8c2d1b1 · 更新日志:0.3.0