Статус

Все системы работаютОбновлено 31 октября 2026 г.
console.logРаботает
90 дней назадОдин вызов на изменённый кадр, ни одного при простое.Сегодня
console.clearРедко используется
90 дней назадПервый кадр, после invalidate(), при простое после накопления 100 кадров и на 300-м.Сегодня
YogaРаботает
90 дней назадМакет flexbox на WebAssembly, pointScaleFactor 1.Сегодня
Turbolog encoderРаботает
90 дней назадПроверка хешей строк и кодирование серий %c.Сегодня
DevTools ThrottlerСоблюдается
90 дней назадОграничение частоты обновления области просмотра: 50 мс. Между кадрами проходит не менее 66 мс.Сегодня
textjs.orgРаботает
90 дней назадДокументация, Обучение, Playground, блог и магазин.Сегодня

Тест производительности в реальном времени

Конвейер @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 · 7c91cea0.194ms0.065ms0.043ms205
0.2.0июль 2025 г. · textjs.org · 92437cc0.192ms0.067ms0.042ms205
0.3.0нояб. 2025 г. · 10× input · 8c2d1b10.205ms0.065ms0.043ms146
0.3.0нояб. 2025 г. · Mobile pass · e2e6e460.212ms0.067ms0.045ms146
0.4.0май 2026 г. · Zero-flash frames · f007ade0.184ms0.046ms0.028ms146
1.0.0окт. 2026 г. · Text.js 1.0 · 57968b60.163ms0.011ms0.000ms149

Фронтенд DevTools

bench/devtools в Chrome for Testing: пустые отрисовки, доставленные кадры и задержка отображения, по 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 г.

  • Страницы застревают под шапкой в Safari на iOS27 окт. – 28 окт. 2026 г. · Устранён
    1. Устранён

      Инцидент устранён.

    2. Наблюдение

      Исправление развёрнуто. Привязка прокрутки отключена (overflow-anchor: none). Мы следим за ситуацией.

    3. Причина найдена

      Заголовок первого экрана всё ещё может застрять под закреплённой шапкой после прокрутки вниз и обратно вверх. Привязка прокрутки в Safari меняет положение прокрутки.

    4. Наблюдение

      Исправление развёрнуто. Теперь эти элементы прокручиваются только по горизонтали, а scrollbar-gutter: stable применяется только на устройствах с мышью.

    5. Причина найдена

      У вкладок файлов, блоков кода и таблиц в тексте есть вертикальное переполнение на 1 пиксель из-за подчёркивания активной вкладки, поэтому они прокручиваются по обеим осям, а iOS передаёт им вертикальные свайпы, предназначенные странице. scrollbar-gutter: stable тоже вызывает скачок при первой прокрутке на iOS.

    6. Расследуется

      Мы изучаем сообщения о том, что страницы textjs.org в Safari на iOS нельзя прокрутить обратно к началу.

    Этот инцидент затронул: textjs.org.

    Разбор инцидента

    Страницы textjs.org не смещаются при загрузке, поэтому привязке прокрутки нечего было исправлять. В Safari на iOS она закрепляла первый экран под шапкой и мешала прокрутить страницу обратно к началу. ?debug=scroll на textjs.org теперь показывает события прокрутки, касания и изменения размера в реальном времени и указывает источник каждого программного вызова фокуса или прокрутки.

    Исправления: 297c5d7, 55da525, 8424fcd · Журнал изменений: 1.0.0

  • Тесты правил линтера падают в CI23 окт. 2026 г. · Устранён
    1. Устранён

      Теперь тестировщик читает it.only отложенно, когда тест вызывает RuleTester.itOnly. Проверки CI проходят.

    2. Причина найдена

      Bun выбрасывает исключение при чтении it.only, если задана переменная окружения CI. При импорте тестировщик правил выполняет присваивание RuleTester.itOnly = it.only, поэтому его загрузка завершается ошибкой.

    3. Расследуется

      Набор тестов eslint-plugin-textjs падает в CI до запуска тестов правил. Локально тесты проходят.

    Разбор инцидента

    @typescript-eslint/rule-tester принимает тестовые функции как статические свойства RuleTester. Исправление оборачивает it.only в функцию. Ни один пакет или страница не пострадали.

    Исправление: eca3f78

  • Сдвиг макета на /playground и /opencode21 окт. – 22 окт. 2026 г. · Устранён
    1. Устранён

      Совокупное смещение макета равно 0 на каждом маршруте.

    2. Наблюдение

      Исправление развёрнуто. Обе страницы используют один макет панели, а размер дописывается без смещения «По размеру консоли». Мы продолжаем наблюдение.

    3. Причина найдена

      Элемент выбора размера консоли дописывает измеренный размер в подпись после гидратации (Fit console · 120×36), из-за чего текстовый узел «Подогнать консоль» смещается. Верхняя и нижняя строки панели тоже различаются по высоте на этих двух страницах, поэтому при переходе панель заново центрируется.

    4. Расследуется

      Наша проверка сдвигов макета сообщает о совокупном сдвиге макета 0,0001 на /playground и /opencode. На всех остальных проверяемых маршрутах значение равно 0. Панель фокуса тоже перемещается при переходе между этими двумя страницами.

    Этот инцидент затронул: textjs.org.

    Разбор инцидента

    Теперь у панели есть верхний и нижний слоты фиксированной высоты, а все демо резервируют одинаковые строки, поэтому смена страницы или демо ничего не сдвигает. Панель подключения OpenCode показывает одну строку состояния в любом состоянии, с заглушкой до гидратации. apps/web/scripts/e2e-layout.mjs проверяет одинаковые размеры и положение блоков на разных маршрутах, в демо, при разных размерах области просмотра и состояниях подключения.

    Исправление: 8f22b9b · Журнал изменений: 1.0.0

  • Боковая панель документации уходит из вида в конце длинных страниц16 окт. – 17 окт. 2026 г. · Устранён
    1. Устранён

      Инцидент устранён.

    2. Наблюдение

      Исправление развёрнуто. В главах раздела «Обучение» подвал тоже рендерится внутри столбца содержимого. Мы продолжаем наблюдение.

    3. Причина найдена

      Та же проблема есть у боковой панели глав в разделе «Обучение».

    4. Наблюдение

      Исправление развёрнуто. На страницах документации подвал рендерится внутри столбца содержимого, поэтому макет достигает низа страницы.

    5. Причина найдена

      Боковая панель имеет position: sticky внутри макета документации, а подвал сайта рендерится после этого макета. Липкий элемент закреплён лишь пока содержащий его блок находится на экране, поэтому при появлении подвала он уводит с собой и боковую панель.

    6. Расследуется

      Мы изучаем сообщения о том, что боковая панель документации уходит из вида внизу длинных страниц.

    Этот инцидент затронул: textjs.org.

    Разбор инцидента

    Страницы с липкой боковой панелью (документация и главы раздела «Обучение») рендерят подвал в столбце содержимого. На остальных страницах остаётся общий подвал.

    Исправление: 131ac96 · Журнал изменений: 1.0.0

  • Имя пакета textjs недоступно в npm14 окт. – 15 окт. 2026 г. · Устранён
    1. Устранён

      Инцидент устранён.

    2. Наблюдение

      Пакет фреймворка и CLI теперь называется @textjs/next и находится в той же области имён, что и @textjs/core и @textjs/react. Импорты меняются с textjs на @textjs/next.

    3. Причина найдена

      Имя textjs принадлежит другому пакету npm с 25 марта 2016 г.

    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 г.

  • Пустые слои отрисовки на переносах строк15 сент. – 16 сент. 2026 г. · Устранён
    1. Устранён

      Инцидент устранён.

    2. Наблюдение

      Исправление развёрнуто. Перед переносами строк, которые не продолжают последовательность, %c теперь сбрасывается в пустой стиль, поэтому DevTools выводит обычный перенос строки. Каждый кадр содержит одну завесу.

    3. Причина найдена

      Когда последовательность с одним стилем заканчивается на переносе строки, \n записывается внутри её span с %c. DevTools разделяет span на переносе строки, и пустой остаток становится span с display: inline-block и contain: paint, который получает собственный слой отрисовки.

    4. Расследуется

      Мы изучаем пустые элементы <span> на большинстве переносов строк в кадрах DevTools и дублирование span-завесы в некоторых кадрах.

    Этот инцидент затронул: Turbolog encoder.

    Разбор инцидента

    Span с одинаковым стилем по-прежнему объединяются через переносы строк. Завеса тоже перенесена на отдельную строку: DevTools размещает ссылку на исходный код (VM12:1) справа от первой строки сообщения, а встроенная завеса оставляла эту ссылку рядом со строкой 0, сужая её.

    Журнал изменений: 1.0.0

август 2026 г.

  • Рост задержки отображения после console.clear27 авг. – 31 авг. 2026 г. · Устранён
    1. Устранён

      Медианная задержка отображения в bench/devtools составляет 10,4 мс. Исправление войдёт в Text.js 1.0.

    2. Наблюдение

      Исправление развёрнуто. После любого кадра с очисткой рендерер однократно ждёт 110 мс, поэтому последующие кадры поступают более чем через 50 мс после предыдущего обновления DevTools и обрабатываются немедленно.

    3. Причина найдена

      После очистки DevTools вставляет строку «Консоль очищена». Она занимает слот немедленного выполнения ограничителя частоты и отправляет следующий кадр на таймер 50 мс. При интервале между кадрами 66 мс каждый последующий кадр остаётся на этом таймере.

    4. Расследуется

      bench/devtools сообщает о медианной задержке отображения в 63 мс после очистки консоли. Задержка сохраняется на этом уровне для всех последующих кадров.

    Этот инцидент затронул: DevTools Throttler, console.clear.

    Разбор инцидента

    Дискретный ввод по-прежнему рендерится синхронно, если интервал между кадрами это допускает.

    Разорвать фазовую синхронизацию · Журнал изменений: 1.0.0

  • Спиннер нарушает выравнивание строк в консоли DevTools11 авг. – 12 авг. 2026 г. · Устранён
    1. Устранён

      Инцидент устранён. Исправление войдёт в Text.js 1.0.

    2. Наблюдение

      Исправление развёрнуто. Спиннер dots по умолчанию теперь рисует блоки из четвертей (▘ ▝ ▗ ▖), каждый шириной в одну ячейку в Menlo. Кадры с символами Брайля доступны как variant="braille" для терминалов.

    3. Причина найдена

      Спиннер по умолчанию рисует символы Брайля (от U+2800 до U+28FF). Text.js считает каждый одной ячейкой, но в Menlo, шрифте консоли DevTools в macOS, нет глифов Брайля. Подставляемый глиф шире ячейки и сдвигает остальную строку вправо.

    4. Расследуется

      В macOS строки с <Spinner> смещаются в DevTools. Ячейки справа от спиннера выходят за сетку.

    Этот инцидент затронул: console.log.

    Разбор инцидента

    По той же причине LineChart по умолчанию рисует точки из четвертей. Брайль доступен с marker="braille".

    Журнал изменений: 1.0.0

май 2026 г.

  • Рост числа пустых отрисовок в консоли DevTools5 мая – 19 мая 2026 г. · Устранён
    1. Устранён

      Исправление выпущено в Text.js 0.4.0. Доля пустых отрисовок составляет 1,0 %, все они приходятся на первый кадр.

    2. Наблюдение

      Теперь textjs.org дописывает кадры вместо очистки. Span-завеса нулевой ширины скрывает предыдущие кадры, а интервал между кадрами составляет не менее 66 мс.

    3. Причина найдена

      DevTools применяет console.clear() синхронно, но отрисовывает новые сообщения с ограничением частоты в 50 мс. Каждый кадр немедленно удаляет предыдущий и отрисовывается с задержкой до 50 мс. В bench/devtools панель 100×32 была пустой в 70,6 % отрисовок DevTools при 15 кадрах/с и в 81,1 % при 60 кадрах/с.

    4. Расследуется

      Мы изучаем сообщения о том, что под нагрузкой консоль 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 г. · Устранён
    1. Устранён

      Инцидент устранён.

    2. Наблюдение

      Исправление развёрнуто. Кодировщик вставляет word joiner (U+2060) в текст path:line, //host:port и data:, если ячейка не разрешает ссылки.

    3. Причина найдена

      DevTools превращает URL, текст path:line и //host:port в сообщениях консоли в ссылки и принудительно применяет к ним цвета своей темы. Кодировщик уже разбивал :// и www., но path:line и //host:port после схемы всё ещё распознаются.

    4. Расследуется

      Текст вроде src/app.tsx:12 и http://localhost:3000 отображается цветом ссылок DevTools вместо своего стиля %c.

    Этот инцидент затронул: Turbolog encoder.

    Разбор инцидента

    В :// и www. word joiner присутствует с 0.1.0. Ячейки, которые должны оставаться кликабельными, задают атрибут allow-link и записываются без изменений.

    Журнал изменений: 0.4.0

ноябрь 2025 г.

  • Задержка нажатий клавиш в консольных приложениях4 нояб. – 18 нояб. 2025 г. · Устранён
    1. Устранён

      Исправление выпущено в Text.js 0.3.0.

    2. Наблюдение

      Исправление развёрнуто. Дискретный ввод, например нажатие клавиши или вставка, теперь рендерится синхронно в той же задаче. Остальные обновления по-прежнему фиксируются на requestAnimationFrame.

    3. Причина найдена

      Каждое обновление, включая нажатие клавиши, ждёт следующего requestAnimationFrame, прежде чем React зафиксирует изменения и кадр попадёт в консоль.

    4. Расследуется

      Ввод в консольных приложениях отстаёт от нажатий клавиш, особенно заметно в OpenCode на textjs.org.

    Этот инцидент затронул: textjs.org.

    Разбор инцидента

    Нажатия клавиш больше не ждут следующего кадра анимации. Коммиты, не связанные с вводом, например от таймеров и потоковых данных, по-прежнему объединяются в пакеты на каждый кадр анимации.

    Исправление: 8c2d1b1 · Журнал изменений: 0.3.0