LINUX.ORG.RU

История изменений

Исправление static_lab, (текущая версия) :

Чем он правильнее?

Тем, что Vue 3 полноценно использует Proxy, за счёт чего получается чистый и понятный код. Под капотом через прокси-классы реализованы observables и computeds. В результате, простое изменение поля объекта-обсервабла вызывает пересчёт необходимых зависимостей и точечное изменение виртуального DOM, а затем и реального DOM в нужно месте.

Angular и React проектировались до появления проксей, поэтому там обработка событий и пересчёт данных были реализованы через жопу. Хотя им ничего не мешало сделать обсерваблы с интерфейсом в виде функций как в knockout.js. В ангуляре все возможные объекты браузера и элементов обёрнуты в zone.js и rx, что переусложняет и утяжеляет код, но хотя бы сейчас они начали понемногу от этого наследия избавляться, что повысило эффективность и производительность, да и внешне ангуляр стал чуть более походить на вью.

В реакте всё ещё хуже. Там поначалу решили, что можно просто пересчитывать виртуальный DOM, а он быстрый. Оказалось, что это не так. Придумали костыль с shouldComponentUpdate и иммутабельностью объектов. В результате на каждый чих создавались новые иммутабельные объекты и все объекты виртуального DOM, который затем ещё и сравнивался целиком с предыдущей версией. Дальше поняли, что разработчики неосиливают классы и придумали хуки. Теперь на каждый чих стали пересчитываться не только объекты VDOM, но и перевызываться все использованные хуки вместе со своими проверками. Притом сами эти реактовские хуки — функции с лютыми сайд-эффектами под капотом. Вдобавок, увлечение single source of truth в виде redux или подобного хранилища, который передаётся через контекст, вызывает при любом изменении хранилища перерендер всего приложения, из-за чего, фактически, все сложные компоненты по-хорошему нужно мемоизировать.

Вот так и выходит, что реакт, несмотря на название, — самый медленный и самый нереактивный фреймворк из всей большой тройки.

Исправление static_lab, :

Чем он правильнее?

Тем, что Vue 3 полноценно использует Proxy, за счёт чего получается чистый и понятный код. Под капотом через прокси-классы реализованы observables и computeds. В результате, простое изменение поля объекта-обсервабла вызывает пересчёт необходимых зависимостей и точечное изменение виртуального DOM, а затем и реального DOM в нужно месте.

Angular и React проектировались до появления проксей, поэтому там обработка событий и пересчёт данных были реализованы через жопу. В ангуляре все возможные объекты браузера и элементов обёрнуты в zone.js и rx, что переусложняет и утяжеляет код, но хотя бы сейчас они начали понемногу от этого наследия избавляться, что повысило эффективность и производительность, да и внешне ангуляр стал чуть более походить на вью.

В реакте всё ещё хуже. Там поначалу решили, что можно просто пересчитывать виртуальный DOM, а он быстрый. Оказалось, что это не так. Придумали костыль с shouldComponentUpdate и иммутабельностью объектов. В результате на каждый чих создавались новые иммутабельные объекты и все объекты виртуального DOM, который затем ещё и сравнивался целиком с предыдущей версией. Дальше поняли, что разработчики неосиливают классы и придумали хуки. Теперь на каждый чих стали пересчитываться не только объекты VDOM, но и перевызываться все использованные хуки вместе со своими проверками. Притом сами эти реактовские хуки — функции с лютыми сайд-эффектами под капотом. Вдобавок, увлечение single source of truth в виде redux или подобного хранилища, который передаётся через контекст, вызывает при любом изменении хранилища перерендер всего приложения, из-за чего, фактически, все сложные компоненты по-хорошему нужно мемоизировать.

Вот так и выходит, что реакт, несмотря на название, — самый медленный и самый нереактивный фреймворк из всей большой тройки.

Исходная версия static_lab, :

Чем он правильнее?

Тем, что Vue 3 полноценно использует Proxy, за счёт чего получается чистый и понятный код. Под капотом через прокси-классы реализованы observables и computeds. В результате, простое изменение поля объекта-обсервабла вызывает пересчёт необходимых зависимостей и точечное изменение виртуального DOM, а затем и реального DOM в нужно месте.

Angular и React проектировались до появления проксей, поэтому там обработка событий и пересчёт данных были реализованы через жопу. В ангуляре все возможные объекты браузера и элементов обёрнуты в zone.js и rx, что переусложняет и утяжеляет код, но хотя бы сейчас они начали понемногу от этого наследия избавляться, что повысило эффективность и производительность, да и внешне ангуляр стал чуть более походить на вью.

В реакте всё ещё хуже. Там поначалу решили, что можно просто пересчитывать виртуальный DOM, а он быстрый. Оказалось, что это не так. Придумали костыль с shouldComponentUpdate и иммутабельностью объектов. В результате на каждый чих создавались новые иммутабельные объекты и все объекты виртуального DOM, который затем ещё и сравнивался целиком с предыдущей версией. Дальше поняли, что разработчики неосиливают классы и придумали хуки. Теперь на каждый чих стали пересчитываться не только объекты VDOM, но и перевызываться все использованные хуки вместе со своими проверками. Притом сами эти реактовские хуки — функции с лютыми сайд-эффектами под капотом. Вдобавок, увлечение single source of truth в виде redux или подобного хранилища, который передаётся через контекст, вызывает при любом изменении хранилища перерендер всего приложения, из-за чего, фактически, все сложные компоненты по-хорошему нужно мемоизировать.

Вот так и выходит, что реакт, не смотря на название, — самый медленный и самый нереактивный фреймворк из всей большой тройки.