状态
console.log运行正常console.clear很少使用Yoga运行正常Turbolog encoder运行正常DevTools Throttler已遵循textjs.org运行正常实时基准测试
@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 · 7c91cea | 0.194ms | 0.065ms | 0.043ms | 205 |
0.2.02025年7月 · textjs.org · 92437cc | 0.192ms | 0.067ms | 0.042ms | 205 |
0.3.02025年11月 · 10× input · 8c2d1b1 | 0.205ms | 0.065ms | 0.043ms | 146 |
0.3.02025年11月 · Mobile pass · e2e6e46 | 0.212ms | 0.067ms | 0.045ms | 146 |
0.4.02026年5月 · Zero-flash frames · f007ade | 0.184ms | 0.046ms | 0.028ms | 146 |
1.0.02026年10月 · Text.js 1.0 · 57968b6 | 0.163ms | 0.011ms | 0.000ms | 149 |
DevTools 前端
在 Chrome for Testing 中运行 bench/devtools:测量空白绘制、送达帧数和显示延迟,每次运行 5 秒。测量方法。
| 驱动方式 | FPS | 空白绘制 | 已绘制 / 已发出 | 延迟 p50 |
|---|---|---|---|---|
| 追加(已发布) | 15 | 1.0% | 74 / 75 | 10.4ms |
| 每帧清空 | 15 | 70.6% | 70 / 75 | 60.4ms |
| 追加,不限频率 | 60 | 0.8% | 67 / 295 | 31.2ms |
| 每帧清空 | 60 | 81.1% | 45 / 300 | 9.8ms |
历史事件
最新事件在前。时间均为 UTC。
2026年10月
iOS Safari 中页面卡在页头下方10月27日 – 2026年10月28日 · 已解决
- 已解决
此事件已解决。
- 监控中
修复已部署。已关闭滚动锚定(
overflow-anchor: none)。正在监控。 - 已定位
向下滚动再向上滚动后,首屏标题仍可能卡在吸顶页头下方。Safari 的滚动锚定正在调整滚动位置。
- 监控中
修复已部署。这些元素现在仅可横向滚动,
scrollbar-gutter: stable也仅用于鼠标设备。 - 已定位
文件标签页、代码块和正文表格因当前标签的下划线产生了 1 px 的纵向溢出,因此可沿两个轴滚动,iOS 会将原本用于页面的纵向滑动交给这些元素处理。
scrollbar-gutter: stable还会导致 iOS 上首次滚动时跳动。 - 调查中
有用户报告 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日 · 已解决
- 已解决
测试器现在延迟到测试调用
RuleTester.itOnly时才读取it.only。CI 已通过。 - 已定位
设置了
CI环境变量时,读取it.only会导致 Bun 抛出异常。规则测试器在导入时执行RuleTester.itOnly = it.only,因此加载失败。 - 调查中
eslint-plugin-textjs测试套件在 CI 中尚未运行任何规则测试就已失败。本地运行通过。
事后分析
@typescript-eslint/rule-tester通过RuleTester的静态属性接收测试函数。修复将it.only包装在函数中。没有包或页面受到影响。修复:
eca3f78- 已解决
/playground 和 /opencode 的布局偏移10月21日 – 2026年10月22日 · 已解决
- 已解决
所有路由的累积布局偏移均为 0。
- 监控中
修复已部署。两个页面共用一种面板布局,追加尺寸时不再移动“适配控制台”。正在监控。
- 已定位
控制台尺寸控件在水合后将测得的尺寸追加到标签中(
Fit console · 120×36),导致“适配控制台”文本节点移动。面板的顶部和底部行在两个页面中的高度也不同,因此切换页面时面板会重新居中。 - 调查中
布局偏移审计报告显示,/playground 和 /opencode 的累积布局偏移为 0.0001。审计覆盖的其他路由均为 0。在这两个页面间切换时,聚焦面板也会移动。
此事件影响了:textjs.org。
事后分析
面板现在使用固定高度的顶部和底部插槽,每个演示预留相同的行,因此切换页面或演示时不会发生移动。OpenCode 连接面板在所有状态下都显示一行状态信息,水合前显示骨架占位。
apps/web/scripts/e2e-layout.mjs会断言不同路由、演示、视口尺寸和连接状态下的元素边界框一致。修复:
8f22b9b· 更新日志:1.0.0- 已解决
npm 上的包名 textjs 不可用10月14日 – 2026年10月15日 · 已解决
- 已解决
此事件已解决。
- 监控中
框架和 CLI 包现已更名为
@textjs/next,与@textjs/core和@textjs/react位于同一作用域。导入路径从textjs改为@textjs/next。 - 已定位
自 2016 年 3 月 25 日起,名称
textjs就已属于另一个 npm 包。 - 调查中
将框架包
textjs发布到 npm 时失败,返回403 Forbidden。
事后分析
从 Text.js 1.0 开始,应用从
@textjs/next而非textjs导入,OpenCode 桥接命令为bunx @textjs/app proxy,可在任意目录运行。- 已解决
2026年9月
换行处出现空绘制层9月15日 – 2026年9月16日 · 已解决
- 已解决
此事件已解决。
- 监控中
修复已部署。对于不延续连续段的换行,现在会先将
%c重置为空样式,使 DevTools 输出普通换行。每帧带有一个遮罩。 - 已定位
当带样式的连续段在换行处结束时,
\n会写入该段的%cspan 内。DevTools 在换行处拆分 span,剩余的空部分变成带有contain: paint的display: inline-blockspan,并获得独立的绘制层。 - 调查中
正在排查 DevTools 帧中大多数换行处出现空
<span>元素,以及部分帧出现双重遮罩 span 的问题。
此事件影响了:Turbolog encoder。
事后分析
样式相同的 span 仍会跨换行合并。遮罩也移到了独立一行:DevTools 会将源代码链接(
VM12:1)浮动到消息首行右侧,行内遮罩会让该链接停留在第 0 行旁边,挤窄这一行。- 已解决
2026年8月
console.clear 后显示延迟增加8月27日 – 2026年8月31日 · 已解决
- 已解决
bench/devtools中的显示延迟中位数为 10.4 ms。此修复随 Text.js 1.0 发布。 - 监控中
修复已部署。任何清空控制台的帧之后,渲染器会等待一次 110 ms,使后续帧在 DevTools 上次刷新超过 50 ms 后到达,并走即时处理路径。
- 已定位
清空后,DevTools 会插入“控制台已清空”行。这会占用节流器的即时执行时机,将下一帧推入 50 ms 定时器。帧间隔为 66 ms 时,之后每帧都会继续由该定时器处理。
- 调查中
bench/devtools报告,控制台清空后的显示延迟中位数为 63 ms。之后每帧的延迟都保持在这一水平。
此事件影响了:DevTools Throttler, console.clear。
- 已解决
加载指示器导致 DevTools 控制台行错位8月11日 – 2026年8月12日 · 已解决
- 已解决
此事件已解决。此修复随 Text.js 1.0 发布。
- 监控中
修复已部署。默认的
dots加载指示器现在绘制象限块(▘ ▝ ▗ ▖),每个在 Menlo 中占一个单元格。终端可通过variant="braille"使用盲文帧。 - 已定位
默认加载指示器绘制盲文图案(U+2800 至 U+28FF)。Text.js 将每个图案按一个单元格测量,但 macOS 上 DevTools 控制台使用的 Menlo 字体没有盲文字形。回退字形比单元格宽,会将行内其余内容向右推。
- 调查中
在 macOS 上,包含
<Spinner>的行在 DevTools 中会错位。加载指示器右侧的单元格偏离网格。
此事件影响了:console.log。
- 已解决
2026年5月
DevTools 控制台空白绘制增多5月5日 – 2026年5月19日 · 已解决
- 已解决
修复已在 Text.js 0.4.0 中发布。空白绘制占比为 1.0%,全部出现在首帧。
- 监控中
textjs.org 现在追加帧,不再清空控制台。零宽遮罩 span 将早先的帧挡在视野之外,帧间隔至少为 66 ms。
- 已定位
DevTools 同步执行
console.clear(),但以 50 ms 节流绘制新消息。每帧会立即移除上一帧,最多 50 ms 后才绘制。在bench/devtools中,100×32 仪表盘以 15 fps 运行时,DevTools 绘制中有 70.6% 为空白;以 60 fps 运行时为 81.1%。 - 调查中
正在排查有关 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日 · 已解决
- 已解决
此事件已解决。
- 监控中
修复已部署。除非单元格允许链接,否则编码器会在
path:line、//host:port和data:文本中插入 word joiner(U+2060)。 - 已定位
DevTools 会将控制台消息中的 URL、
path:line和//host:port文本转换为链接,并强制应用主题颜色。编码器已拆开://和www.,但path:line及协议后的//host:port仍会匹配。 - 调查中
src/app.tsx:12和http://localhost:3000等文本在 DevTools 中显示为链接颜色,而非其%c样式。
此事件影响了:Turbolog encoder。
- 已解决
2025年11月
控制台应用按键延迟11月4日 – 2025年11月18日 · 已解决
- 已解决
修复已在 Text.js 0.3.0 中发布。
- 监控中
修复已部署。按键或粘贴等离散输入现在会在同一任务中同步渲染。其他更新仍在
requestAnimationFrame时提交。 - 已定位
每次更新(包括按键)都会等待下一个
requestAnimationFrame,然后 React 才提交并输出帧。 - 调查中
控制台应用中的输入滞后于键盘操作,在 textjs.org 上的 OpenCode 中最明显。
此事件影响了:textjs.org。
- 已解决