Я тут постарался запилить реально сложный, а точнее разнообразный бенч динамических переподписок. Он проверяет 6 разных паттернов изменения порядка зависимостей реактивного компьютеда. Результаты (больше - лучше, т.е. 100% - эталон):
MEDIAN for 128,64,64,32,32,32,16,16,16,16,8,8,8,8,8,8,4,4,4,4,4,4,4,4,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 subscribers
25% Reatom
40% mobx
42% $mol_wire
66% act
98% alien
https://github.com/reatom/reatom/blob/v1000/packages/core/bench_dynamic.ts#L749
Что, зачем я написал бенч, в котором моя либа на самом дне?)) Потому что объективность и совместная работа намного дороже личных побед ❤️
alien-signals - действительно сделали прорыв в перфе и это круто! Такие библиотеки и их авторы двигают всю нашу экосистему.
Хотя, свое решение я все же позащищаю. Что тормозит в реатоме? Строго говоря все. Он весь пропитан дополнительными фичами, которые его замедляют:
- система расширений
- виртуализация (контекст для тестов и ssr)
- иммутабельность для асинхронного контекста (
отменить нельзя продолжить)
Все это уникальные фичи, которые открывают новые границы разработки. Очень важно понимать, что добавляя эти фичи не в монолит библиотеки, а дополнительными интерфейсами по необходимости мы дропнете перф эталона не в 4 раза (случай реатома), а в 10-20 раз.
И это не самое худшее, перф - вторичен, особенно при использовании любых сигнальных библиотек (сама архитектура с ними уже производительна).
Самая главная проблема без реатома - в зависимости от необходимости той или иной фичи - вам нужно будет переписывать или как-то еще рефаторить большую часть кода. Реатом же предоставляет единый контракт для ВСЕХ возможных фич, что радикально снижает ментальную нагрузку при игре в долгую 😎
P.S. любой бенч можно повернуть в нужную сторону, если захотеть :D
MEDIAN for 1024 subscribers
40% alien
51% mobx
57% Reatom
58% act
90% $mol_wire