Статус
console.logРаботаетconsole.clearРедко используетсяYogaРаботаетTurbolog encoderРаботаетDevTools ThrottlerСоблюдаетсяtextjs.orgРаботаетТест производительности в реальном времени
Конвейер @textjs/core работает в этой вкладке с панелью 100×32 и записывает кадры в консоль в памяти.
- Полный кадр
- —
- макет + отрисовка + кодирование
- Ввод текста
- —
- правка одной строки
- Кадр в простое
- —
- ничего не изменилось
- span с %c
- —
- ячейки: 3 200
Запускается автоматически, когда страница простаивает.
История производительности
packages/core/test/perf.test.ts на каждом этапе, на одном компьютере (Apple M5 Pro · Bun 1.4.4). Среднее по 1000 кадрам.
| Релиз | Полный кадр | Ввод текста | Простой | span с %c |
|---|---|---|---|---|
0.1.0март 2025 г. · @textjs/core · 7c91cea | 0.194ms | 0.065ms | 0.043ms | 205 |
0.2.0июль 2025 г. · textjs.org · 92437cc | 0.192ms | 0.067ms | 0.042ms | 205 |
0.3.0нояб. 2025 г. · 10× input · 8c2d1b1 | 0.205ms | 0.065ms | 0.043ms | 146 |
0.3.0нояб. 2025 г. · Mobile pass · e2e6e46 | 0.212ms | 0.067ms | 0.045ms | 146 |
0.4.0май 2026 г. · Zero-flash frames · f007ade | 0.184ms | 0.046ms | 0.028ms | 146 |
1.0.0окт. 2026 г. · Text.js 1.0 · 57968b6 | 0.163ms | 0.011ms | 0.000ms | 149 |
Фронтенд DevTools
bench/devtools в Chrome for Testing: пустые отрисовки, доставленные кадры и задержка отображения, по 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 г.
Страницы застревают под шапкой в Safari на iOS27 окт. – 28 окт. 2026 г. · Устранён
- Устранён
Инцидент устранён.
- Наблюдение
Исправление развёрнуто. Привязка прокрутки отключена (
overflow-anchor: none). Мы следим за ситуацией. - Причина найдена
Заголовок первого экрана всё ещё может застрять под закреплённой шапкой после прокрутки вниз и обратно вверх. Привязка прокрутки в Safari меняет положение прокрутки.
- Наблюдение
Исправление развёрнуто. Теперь эти элементы прокручиваются только по горизонтали, а
scrollbar-gutter: stableприменяется только на устройствах с мышью. - Причина найдена
У вкладок файлов, блоков кода и таблиц в тексте есть вертикальное переполнение на 1 пиксель из-за подчёркивания активной вкладки, поэтому они прокручиваются по обеим осям, а iOS передаёт им вертикальные свайпы, предназначенные странице.
scrollbar-gutter: stableтоже вызывает скачок при первой прокрутке на iOS. - Расследуется
Мы изучаем сообщения о том, что страницы textjs.org в Safari на iOS нельзя прокрутить обратно к началу.
Этот инцидент затронул: textjs.org.
Разбор инцидента
Страницы textjs.org не смещаются при загрузке, поэтому привязке прокрутки нечего было исправлять. В Safari на iOS она закрепляла первый экран под шапкой и мешала прокрутить страницу обратно к началу.
?debug=scrollна textjs.org теперь показывает события прокрутки, касания и изменения размера в реальном времени и указывает источник каждого программного вызова фокуса или прокрутки.Исправления:
297c5d7,55da525,8424fcd· Журнал изменений: 1.0.0- Устранён
Тесты правил линтера падают в CI23 окт. 2026 г. · Устранён
- Устранён
Теперь тестировщик читает
it.onlyотложенно, когда тест вызываетRuleTester.itOnly. Проверки CI проходят. - Причина найдена
Bun выбрасывает исключение при чтении
it.only, если задана переменная окруженияCI. При импорте тестировщик правил выполняет присваиваниеRuleTester.itOnly = it.only, поэтому его загрузка завершается ошибкой. - Расследуется
Набор тестов
eslint-plugin-textjsпадает в CI до запуска тестов правил. Локально тесты проходят.
Разбор инцидента
@typescript-eslint/rule-testerпринимает тестовые функции как статические свойстваRuleTester. Исправление оборачиваетit.onlyв функцию. Ни один пакет или страница не пострадали.Исправление:
eca3f78- Устранён
Сдвиг макета на /playground и /opencode21 окт. – 22 окт. 2026 г. · Устранён
- Устранён
Совокупное смещение макета равно 0 на каждом маршруте.
- Наблюдение
Исправление развёрнуто. Обе страницы используют один макет панели, а размер дописывается без смещения «По размеру консоли». Мы продолжаем наблюдение.
- Причина найдена
Элемент выбора размера консоли дописывает измеренный размер в подпись после гидратации (
Fit console · 120×36), из-за чего текстовый узел «Подогнать консоль» смещается. Верхняя и нижняя строки панели тоже различаются по высоте на этих двух страницах, поэтому при переходе панель заново центрируется. - Расследуется
Наша проверка сдвигов макета сообщает о совокупном сдвиге макета 0,0001 на /playground и /opencode. На всех остальных проверяемых маршрутах значение равно 0. Панель фокуса тоже перемещается при переходе между этими двумя страницами.
Этот инцидент затронул: textjs.org.
Разбор инцидента
Теперь у панели есть верхний и нижний слоты фиксированной высоты, а все демо резервируют одинаковые строки, поэтому смена страницы или демо ничего не сдвигает. Панель подключения OpenCode показывает одну строку состояния в любом состоянии, с заглушкой до гидратации.
apps/web/scripts/e2e-layout.mjsпроверяет одинаковые размеры и положение блоков на разных маршрутах, в демо, при разных размерах области просмотра и состояниях подключения.Исправление:
8f22b9b· Журнал изменений: 1.0.0- Устранён
Имя пакета textjs недоступно в npm14 окт. – 15 окт. 2026 г. · Устранён
- Устранён
Инцидент устранён.
- Наблюдение
Пакет фреймворка и CLI теперь называется
@textjs/nextи находится в той же области имён, что и@textjs/coreи@textjs/react. Импорты меняются сtextjsна@textjs/next. - Причина найдена
Имя
textjsпринадлежит другому пакету npm с 25 марта 2016 г. - Расследуется
Публикация пакета фреймворка
textjsв npm завершается ошибкой403 Forbidden.
Разбор инцидента
Начиная с Text.js 1.0 приложения импортируют из
@textjs/nextвместоtextjs, а мост OpenCode запускается командойbunx @textjs/app proxyиз любого каталога.- Устранён
сентябрь 2026 г.
Пустые слои отрисовки на переносах строк15 сент. – 16 сент. 2026 г. · Устранён
- Устранён
Инцидент устранён.
- Наблюдение
Исправление развёрнуто. Перед переносами строк, которые не продолжают последовательность,
%cтеперь сбрасывается в пустой стиль, поэтому DevTools выводит обычный перенос строки. Каждый кадр содержит одну завесу. - Причина найдена
Когда последовательность с одним стилем заканчивается на переносе строки,
\nзаписывается внутри её span с%c. DevTools разделяет span на переносе строки, и пустой остаток становится span сdisplay: inline-blockиcontain: paint, который получает собственный слой отрисовки. - Расследуется
Мы изучаем пустые элементы
<span>на большинстве переносов строк в кадрах DevTools и дублирование span-завесы в некоторых кадрах.
Этот инцидент затронул: Turbolog encoder.
Разбор инцидента
Span с одинаковым стилем по-прежнему объединяются через переносы строк. Завеса тоже перенесена на отдельную строку: DevTools размещает ссылку на исходный код (
VM12:1) справа от первой строки сообщения, а встроенная завеса оставляла эту ссылку рядом со строкой 0, сужая её.- Устранён
август 2026 г.
Рост задержки отображения после console.clear27 авг. – 31 авг. 2026 г. · Устранён
- Устранён
Медианная задержка отображения в
bench/devtoolsсоставляет 10,4 мс. Исправление войдёт в Text.js 1.0. - Наблюдение
Исправление развёрнуто. После любого кадра с очисткой рендерер однократно ждёт 110 мс, поэтому последующие кадры поступают более чем через 50 мс после предыдущего обновления DevTools и обрабатываются немедленно.
- Причина найдена
После очистки DevTools вставляет строку «Консоль очищена». Она занимает слот немедленного выполнения ограничителя частоты и отправляет следующий кадр на таймер 50 мс. При интервале между кадрами 66 мс каждый последующий кадр остаётся на этом таймере.
- Расследуется
bench/devtoolsсообщает о медианной задержке отображения в 63 мс после очистки консоли. Задержка сохраняется на этом уровне для всех последующих кадров.
Этот инцидент затронул: DevTools Throttler, console.clear.
Разбор инцидента
Дискретный ввод по-прежнему рендерится синхронно, если интервал между кадрами это допускает.
- Устранён
Спиннер нарушает выравнивание строк в консоли DevTools11 авг. – 12 авг. 2026 г. · Устранён
- Устранён
Инцидент устранён. Исправление войдёт в Text.js 1.0.
- Наблюдение
Исправление развёрнуто. Спиннер
dotsпо умолчанию теперь рисует блоки из четвертей (▘ ▝ ▗ ▖), каждый шириной в одну ячейку в Menlo. Кадры с символами Брайля доступны какvariant="braille"для терминалов. - Причина найдена
Спиннер по умолчанию рисует символы Брайля (от U+2800 до U+28FF). Text.js считает каждый одной ячейкой, но в Menlo, шрифте консоли DevTools в macOS, нет глифов Брайля. Подставляемый глиф шире ячейки и сдвигает остальную строку вправо.
- Расследуется
В macOS строки с
<Spinner>смещаются в DevTools. Ячейки справа от спиннера выходят за сетку.
Этот инцидент затронул: console.log.
Разбор инцидента
По той же причине
LineChartпо умолчанию рисует точки из четвертей. Брайль доступен сmarker="braille".- Устранён
май 2026 г.
Рост числа пустых отрисовок в консоли DevTools5 мая – 19 мая 2026 г. · Устранён
- Устранён
Исправление выпущено в Text.js 0.4.0. Доля пустых отрисовок составляет 1,0 %, все они приходятся на первый кадр.
- Наблюдение
Теперь textjs.org дописывает кадры вместо очистки. Span-завеса нулевой ширины скрывает предыдущие кадры, а интервал между кадрами составляет не менее 66 мс.
- Причина найдена
DevTools применяет
console.clear()синхронно, но отрисовывает новые сообщения с ограничением частоты в 50 мс. Каждый кадр немедленно удаляет предыдущий и отрисовывается с задержкой до 50 мс. Вbench/devtoolsпанель 100×32 была пустой в 70,6 % отрисовок DevTools при 15 кадрах/с и в 81,1 % при 60 кадрах/с. - Расследуется
Мы изучаем сообщения о том, что под нагрузкой консоль DevTools мигает пустотой между кадрами.
Этот инцидент затронул: console.clear, DevTools Throttler.
Разбор инцидента
Начиная с 0.1.0 Turbolog отправлял один
console.clear()и одинconsole.log()на каждый изменённый кадр.bench/devtools, который управляет настоящим интерфейсом DevTools в Chrome for Testing, был создан для измерений по этому инциденту и дал числа в таблице интерфейса DevTools выше.Исправление:
f007ade· Turbolog: устранение мерцания · Журнал изменений: 0.4.0- Устранён
апрель 2026 г.
Пути к файлам в кадрах консоли оформляются как ссылки14 апр. – 15 апр. 2026 г. · Устранён
- Устранён
Инцидент устранён.
- Наблюдение
Исправление развёрнуто. Кодировщик вставляет word joiner (U+2060) в текст
path:line,//host:portиdata:, если ячейка не разрешает ссылки. - Причина найдена
DevTools превращает URL, текст
path:lineи//host:portв сообщениях консоли в ссылки и принудительно применяет к ним цвета своей темы. Кодировщик уже разбивал://иwww., ноpath:lineи//host:portпосле схемы всё ещё распознаются. - Расследуется
Текст вроде
src/app.tsx:12иhttp://localhost:3000отображается цветом ссылок DevTools вместо своего стиля%c.
Этот инцидент затронул: Turbolog encoder.
Разбор инцидента
В
://иwww.word joiner присутствует с 0.1.0. Ячейки, которые должны оставаться кликабельными, задают атрибут allow-link и записываются без изменений.- Устранён
ноябрь 2025 г.
Задержка нажатий клавиш в консольных приложениях4 нояб. – 18 нояб. 2025 г. · Устранён
- Устранён
Исправление выпущено в Text.js 0.3.0.
- Наблюдение
Исправление развёрнуто. Дискретный ввод, например нажатие клавиши или вставка, теперь рендерится синхронно в той же задаче. Остальные обновления по-прежнему фиксируются на
requestAnimationFrame. - Причина найдена
Каждое обновление, включая нажатие клавиши, ждёт следующего
requestAnimationFrame, прежде чем React зафиксирует изменения и кадр попадёт в консоль. - Расследуется
Ввод в консольных приложениях отстаёт от нажатий клавиш, особенно заметно в OpenCode на textjs.org.
Этот инцидент затронул: textjs.org.
Разбор инцидента
Нажатия клавиш больше не ждут следующего кадра анимации. Коммиты, не связанные с вводом, например от таймеров и потоковых данных, по-прежнему объединяются в пакеты на каждый кадр анимации.
Исправление:
8c2d1b1· Журнал изменений: 0.3.0- Устранён