狀態

所有系統運作正常更新於 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. 已解決

      測試器現在延後讀取 it.only,直到測試呼叫 RuleTester.itOnly。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. 已確認原因

      主控台尺寸控制項在 hydration 後將測量尺寸附加至標籤(Fit console · 120×36),使「配合主控台」文字節點移動。焦點區的頂列和底列在兩個頁面中的高度也不同,因此導覽時會重新置中。

    4. 調查中

      版面配置位移稽核回報 /playground 和 /opencode 的累計版面配置位移為 0.0001。涵蓋的其餘路由皆為 0。在這兩個頁面之間導覽時,焦點區也會移動。

    此事件影響:textjs.org。

    事後檢討

    焦點區現在有固定高度的頂部和底部插槽,每個示範也預留相同的列,因此切換頁面或示範時不會有任何移動。OpenCode 連線面板在所有狀態下都顯示一行狀態,並在 hydration 完成前顯示骨架畫面。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 執行時,70.6% 的 DevTools 繪製為空白;以 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 會將主控台訊息中的網址、path:line 和 //host:port 文字轉為連結,並強制套用主題色彩。編碼器原本已拆開 :// 和 www.,但 path:line 和通訊協定後的 //host:port 仍會符合連結規則。

    4. 調查中

      src/app.tsx:12 和 http://localhost:3000 等文字在 DevTools 中以連結色彩渲染,而非原本的 %c 樣式。

    此事件影響:Turbolog encoder。

    事後檢討

    :// 和 www. 自 0.1.0 起就帶有 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