Привет, Хаброжители!

React по умолчанию сопряжён со скрытыми издержками. Вот аргументы в пользу более осознанного выбора подходящего фреймворка для конкретной задачи.

React больше не побеждает за счёт своих технических достоинств. Сегодня его выбирают по умолчанию. И именно это «по умолчанию» теперь тормозит инновации во всей фронтенд-экосистеме.

Когда командам нужен новый фронтенд, разговор редко начинается с вопроса: «Каковы ограничения и какой инструмент лучше всего под них подходит?» Чаще всё звучит так: «Давайте возьмём React — его все знают». Такой рефлекс запускает самоподдерживающийся цикл, в котором архитектуру определяют сетевые эффекты, а не техническая уместность.

В то же время фреймворки с реальными инновациями с трудом находят признание. Фреймворке Svelte избавляет пользователя от накладных расходов за счёт компиляции. Solid даёт тонкую реактивность функционала без «налога» виртуальной DOM. Qwik обеспечивает мгновенный запуск через механизм возобновляемости. Эти варианты могут в распространённых сценариях могут оказываться более выигрышными, чем модель React, но редко получают честную оценку, потому что React выбирают по привычке.

React отлично справляется со многими задачами. Проблема не в самом React, а в мышлении «React по умолчанию».

Потолок инноваций

Технические основы React помогают понять часть сегодняшних разногласий.
Виртуальная DOM была умным решением проблем по состоянию на 2013 год, но, как отметил Рич Харрис в статье «Virtual DOM is pure overhead», она вносит лишнюю работу, которой современные компиляторы во многих случаях могут избежать.

Хуки частично сняли боль классовых компонентов, но привнесли новые сложности: массивы зависимостей, устаревшие замыкания и неверно используемые эффекты. Даже в официальной документации React делается акцент на сдержанность: «Вам, возможно, не нужен Effect».
Серверные компоненты ускоряют первый байт, но добавляют архитектурную сложность и новые режимы сбоев.

React Compiler — умное решение, которое автоматизирует паттерны вроде useMemo и useCallback. Но сам факт его существования — это сигнал: мы оптимизируемся вокруг ограничений, заложенных в саму модель.

Для сравнения: Svelte 5 с его инструментом Runes упрощает реактивность уже на этапе компиляции; Solid обеспечивает тонкую реактивность, обновляя ровно то, что изменилось; Qwik с его возобновляемостью полностью упраздняет традиционную гидратацию. Это не постепенные улучшения модели React — это другие модели с другими пределами.

Инновации без внедрения не меняют реальность. А внедрение невозможно, когда выбор делается по привычке.

Технический долг, который все мы несем

Выбирая React по умолчанию, мы часто получаем накладные расходы рантайма и reconciliation, которые уже перестали ставить под сомнение. Даже если производительность «достаточно хороша», потолок оказывается ниже, чем у моделей с компиляцией или тонкой реактивностью. Время разработчиков уходит не на предоставление ценности, а на управление повторными рендерами, зависимостями эффектов и границами гидратации.

Общий вывод из исследований производительности остаётся неизменным: JavaScript — это дорогой ресурс на критическом пути (The Cost of JavaScript).

Мы сосредоточили мышление вокруг «паттернов React» вместо фундаментальных принципов веба, тем самым снизив переносимость навыков и усилив архитектурную инерцию.

И потери здесь не только в производительности — это упущенные возможности, когда более подходящие альтернативы даже не рассматриваются. Например, бенчмарки вроде JS Framework Benchmark показывают, что альтернативы вроде Solid достигают обновлений в 2–3 раза быстрее в сценариях с интенсивной реактивностью по сравнению с React.

Фреймворки, чьё развитие душат

SVELTE: Революция в области компиляторов

Svelte переносит работу на этап компиляции: без виртуального DOM и с минимальным рантаймом. Компоненты превращаются в точечные операции с DOM. Ментальная модель совпадает с фундаментальными принципами веба.

Но аргумент «слишком мало вакансий» искусственно сдерживает распространение Svelte, несмотря на его техническое превосходство для большинства сценариев. Реальные примеры, такие как внедрение Svelte в The Guardian для фронтенда, показывают ощутимый рост производительности и продуктивности разработчиков — зафиксированы сокращения размера бандлов и более быстрая загрузка.

Например, как писали Wired в статье о Svelte, разработчик Шон Ван (@swyx в X/Twitter) уменьшил размер своего сайта с 187 КБ на React всего до 9 КБ на Svelte, воспользовавшись компиляционными оптимизациями, которые убирают накладные расходы фреймворка с рантайма. Это приводит к более быстрым и эффективным приложениям, особенно при медленном соединении.

SOLID: Реактивный примитивный подход

Solid предлагает тонкую реактивность с привычным JSX. Обновления проходят через сигналы напрямую к затронутым DOM-узлам, обходя узкие места reconciliation. Результат — высокая производительность при меньшей известности. Как отмечается в сравнительном гайде Solid, такой подход обеспечивает более эффективные обновления по сравнению с виртуальным DOM в React, давая точную реактивность, которая сводит к минимуму лишнюю работу и улучшает опыт разработки за счёт упрощённого управления состоянием.

Хотя громких кейсов применения меньше, чем у более зрелых фреймворков, это во многом связано с низким уровнем распространения Solid. Но отзывы ранних пользователей показывают аналогичные трансформационные результаты — значительный прирост эффективности обновлений и упрощение кода, которые ждут масштабирования и подтверждения по мере того, как всё больше команд начинают экспериментировать.

Qwik: инновационный принцип возобновляемости

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

Истории успеха Qwik пока не так заметны просто потому, что мало команд решились отказаться от «выбора по умолчанию», чтобы попробовать его. Но те, кто сделал этот шаг, сообщают о резком росте скорости запуска и эффективности использования ресурсов — это указывает на огромный нераскрытый потенциал в случае более широкого внедрения.

Все три фреймворка недооценены не из-за недостатков, а потому, что «выбор по умолчанию» мешает их попробовать.

Более того, API React заметно шире и сложнее, чем у альтернатив, включая такие концепции, как хуки, контекст, редьюсеры и паттерны мемоизации, которые требуют внимательного контроля, чтобы избежать проблем. Такая разветвлённая API-поверхность увеличивает когнитивную нагрузку на разработчиков, часто приводя к багам из-за непонимания зависимостей или переусложнённости решений.

Например, во время сбоя Cloudflare 12 сентября 2025 года один хук useEffect с проблемным массивом зависимостей вызвал повторные API-запросы, перегрузив их Tenant Service и приведя к масштабному отказу. В отличие от этого, фреймворки вроде Svelte, Solid и Qwik имеют меньший и более сфокусированный API, основанный на простоте и фундаментальных принципах веба, что снижает когнитивную нагрузку и делает их легче для освоения и сопровождения.

В плену сетевых эффектов

Доминирование React создаёт самоподдерживающиеся барьеры. Вакансии формулируют требования как «React-разработчик», а не «Frontend-инженер», что ограничивает разнообразие навыков. Библиотеки компонентов и «мышечная память» команд усиливают институциональную инерцию.

Лидеры, избегающие рисков, выбирают «безопасный» вариант. Учебные программы подстраиваются под спрос работодателей. Цикл продолжается, независимо от технических достоинств.

Это не здоровая конкуренция — это захват экосистемы по умолчанию.

Разрушение сетевого эффекта

Чтобы вырваться из этой ситуации, необходимо предпринять целенаправленные действия на нескольких уровнях. Технические руководители должны принимать решения, основываясь на ограничениях и преимуществах, а не на импульсе. Компании могут выделить небольшой бюджет на инновации для тестирования альтернативных решений. Разработчики могут повысить свою квалификацию, выйдя за рамки одной ментальной модели.

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

Изменения не произойдут сами по себе. Они требуют сознательного выбора.

Чек-лист оценки фреймворка

Чтобы сделать осознанный выбор, при запуске нового проекта воспользуйтесь этим простым чек-листом:

  • Оцените потребности в производительности: оцените такие показатели, как время запуска, эффективность обновления и размер пакета. Если скорость имеет решающее значение, отдайте предпочтение фреймворкам с оптимизацией на этапе компиляции.

  • Навыки команды и кривая изучения: учитывайте имеющийся опыт, но не забывайте о путях миграции; многие альтернативы предлагают плавный переход (например, совместимость Solid JSX с React).

  • Масштабируемость и стоимость владения: рассчитайте долгосрочные затраты, включая обслуживание, управление зависимостями и технический долг. Альтернативы часто снижают накладные расходы на выполнение, сокращая затраты на хостинг и улучшая масштабируемость.

  • Соответствие экосистеме: найдите баланс между зрелостью и инновациями; запустите пилотный проект в некритических областях, чтобы проверить осуществимость миграции и рентабельность инвестиций.

Стандартные контраргументы

«Но зрелость экосистемы!» Зрелость ценна, но она также может усиливать инерцию. Возраст не то же самое, что пригодность для современных условий.

Кроме того, зрелая экосистема часто означает сильную зависимость от сторонних пакетов, что может привести к дополнительным затратам на обслуживание, таким как обновление зависимостей, устранение уязвимостей безопасности и раздувание пакетов неиспользуемым кодом. Хотя в некоторых случаях такая гибкость необходима, она может привести к чрезмерной зависимости; индивидуальные решения, адаптированные к конкретным потребностям, часто более компактны и проще в обслуживании в долгосрочной перспективе. Меньшие экосистемы в альтернативных фреймворках поощряют создание с нуля, способствуя более глубокому пониманию и уменьшению технического долга. Более того, благодаря тому, что помощники по кодированию с ИИ теперь могут генерировать точные настраиваемые функции по запросу, барьер для создания индивидуальных утилит значительно снизился. Это позволяет полностью отказаться от использования общих библиотек, таких как lodash или библиотек дат, таких как Moment или date-fns, в пользу легких реализаций, специфичных для конкретных приложений.

«Но найм!» Найм следует за спросом. Вы можете снизить риски, опробовав альтернативы в некритических областях, а затем наняв сотрудников с базовыми знаниями и проведя их обучение на рабочем месте.

«Но библиотеки компонентов!» Фреймворк-агностичные дизайн-системы и Web Components снижают зависимость от конкретного фреймворка, сохраняя скорость разработки.

«Но стабильность!» Эволюция React от классов к хукам и серверным компонентам демонстрирует постоянные изменения, а не стабильность. Альтернативные фреймворки часто предоставляют более стабильные API.

«Но проверено в масштабе!» jQuery тоже было проверено в масштабе. Успех в прошлом не гарантирует актуальность в будущем.

Большой ущерб экосистеме

Монокультура замедляет развитие веба, когда ограничения одной платформы становятся де-факто пределами. Талантливые специалисты тратят время на решение проблем, связанных с конкретным фреймворком, вместо того, чтобы продвигать платформу вперед. Инвестиции следуют за действующими игроками, независимо от технических достоинств. Учебные программы оптимизированы для обеспечения немедленного трудоустройства, а не для приобретения фундаментальных знаний. Это приводит к формированию навыков, применимых только к конкретному фреймворку, но не адаптируемых к другим платформам. Улучшения платформы задерживаются, потому что все считают: «React может с этим справиться».

Когда исчезает разнообразие, страдает вся экосистема.

Сад, который мы могли бы вырастить

Здоровые экосистемы требуют разнообразия, а не монокультур. Инновации возникают, когда различные подходы конкурируют и взаимодействуют друг с другом. Разработчики растут, изучая несколько ментальных моделей. Платформа улучшается, когда несколько фреймворков преодолевают разные границы. Ставка на одну модель создает единственную точку сбоя. Что произойдет, если она достигнет предельных ограничений? Какие возможности мы упускаем, не исследуя альтернативы?

Пришло время выбирать фреймворки на основе ограничений и достоинств, а не на основе импульса. Ваш следующий проект заслуживает большего, чем React по умолчанию. Экосистема заслуживает инноваций, которые может обеспечить только разнообразие.

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

Выбор за нами.


Вот и подходит к концу наша осенняя распродажа ?

Условия акции: 16–28 сентября 2025 г. Скидка 35% на все бумажные книги по купону — Бумажная Скидка 50% на все электронные книги по купону — Электронная

Комментарии (0)


  1. isumix
    26.09.2025 13:11

    Во Фьзоре нет ни встроеного стейта, ни реактивности. Врочем, это всё легко и явно подключается одной иструкцией обычного JavaScript. Но парадоксально вот что, несмотря на это - код получается менее многословным, чам в любом другом фреймворке. А благодаря тому что абстракция - минимальна - почти натив - то гибкость и производительность тоже впереди.


  1. cmyser
    26.09.2025 13:11

    пора уже попробовать $mol у коготоро 99.9% достоинств
    все описанные выше достоинтсва у него есть, и так же есть множество других

    например offline first 1 строчкой кода
    синхронизация между вкладками
    свой dsl для описания компонентов который умеет Не только в одностороннее связывание!

    и еще куча полезных вещей


    1. ScorpAL
      26.09.2025 13:11

      Попробуй переименовать. Избавься от $ в названии (да и в коде тоже). Найди краткое яркое звучное название. Определись с позиционированием. Сделай простой но яркий лэндинг с преимуществами и простейшими примерами и кусочками кода.
      Накидай несколько статеек в medium.

      Гугл по запросу $mol выдал всё что угодно, но не $mol.


      1. cmyser
        26.09.2025 13:11