Tyaff

CHANGELOG.md — Tyaff

Все значимые изменения проекта фиксируются здесь.


2026-08-11 — Исправление обновления DOM при дочернем self-update

Исправлен критический баг обновления DOM.

Что изменилось для пользователей

Контракт

После this.update() дочернего компонента, DOM отражает новое состояние vdom, независимо от того, ре-рендерился ли родительский компонент. Это поведение теперь зафиксировано в SPEC.md (раздел “5. UPDATE ENGINE”).


2026-07-06 — Критическое обновление алгоритма reconciliation

Полная переработка diff-алгоритма для соответствия спецификации.

Контекст

В ходе разработки было выявлено критическое расхождение между реализацией и SPEC.md. Старый алгоритм reconciliation не соответствовал контрактам, описанным в спецификации, что требовало полной замены подхода. Работа велась несколько дней и затронула ядро библиотеки.

Что изменилось

Новый алгоритм reconciliation (подробное описание в docs/doc-reconciliation.md):

Влияние на производительность

Переход на новый алгоритм привёл к снижению производительности библиотеки. Это ожидаемо для экспериментального проекта, где процесс разработки и соответствие спецификации важнее оптимизации.

Текущий статус:

Технические детали

Документация


2026-06-29 - Исправление примера в SPEC.md

Убран антипаттерн из примера динамического контекста. Раньше в примере компонента Page было:

props(incoming) { this.props = incoming; }

Это противоречило описанию API в разделе 2, где сказано что props() опциональна и по умолчанию работает как p => p. Явное присваивание this.props = incoming внутри props() - это антипаттерн, потому что:

  1. props() должна возвращать значение, которое пойдёт в this.props
  2. Если props() не определена, то this.props = incoming происходит автоматически
  3. Прямое присваивание создаёт ложное впечатление что это необходимо

Теперь пример использует this.props напрямую без явного props().

Это делает документацию более согласованной и показывает правильный подход.

[Unreleased]

В работе


2026-06-30

Оптимизация производительности memo-skip path.

Что изменилось для пользователей

Ключевые результаты производительности

Ускорение в сценариях memo:

Поведение не изменилось:

2026-06-30 (раунд 2) — Оптимизации для сценариев где React выигрывал

Раунд 2 оптимизаций производительности. Победа над React в “Update all 5000 rows”.

Что изменилось для пользователей

🏆 Победа над React

В сценарии “Update all 5000 rows” tyaff теперь 4.78ms vs React 6.80ms — tyaff быстрее на 30%. Раньше в этом сценарии был паритет (6.40ms vs 7.00ms по данным от 2026-06-28).

Ключевые результаты производительности

Ускорение в сценариях где React выигрывал:

Поведение не изменилось:


2026-06-28

День оптимизаций производительности и бенчмарков.

Что изменилось для пользователей

Ключевые результаты производительности

Tyaff выигрывает у React:

React выигрывает у Tyaff:

Вывод: Tyaff быстрее в массовых операциях (reverse, swap, move между родителями), React быстрее в точечных обновлениях и memo. Разные профили производительности для разных сценариев.

Проделанная работа

Внедрено 7 оптимизаций:

Откачено 5 оптимизаций (показывает итеративность разработки):

Добавлено 2 теста в test-node-03.js:

Обновлена документация


2026-06-26

День большой реорганизации документации и ролей.

Added

Changed


2026-06-25

День уточнения системы ключей и контрактов.

Added

Changed

Fixed


2026-06-24

День контрактов API.

Added

Changed

Added (Browser Support)


2026-06-23

День структурирования SPEC.md.

Added

Changed


До 2026-06-22

Ранняя разработка (без git, без формального changelog).

Core реализовано

Архитектурные решения


Легенда


Про ведение записей

Проект развивается быстро, поэтому:


Последнее обновление: 2026-07-06