React is winning by default and slowing innovation 🔥 Горячее 💬 Длинная дискуссия
React победил по умолчанию — и это убивает фронтенд-инновации
React больше не выигрывает за счёт технических преимуществ. Сегодня он побеждает по умолчанию, что замедляет инновации во всей фронтенд-экосистеме.
Команды редко начинают с вопроса «Какие ограничения и какой инструмент подходит лучше?». Чаще звучит: «Давайте использовать React — все его знают». Это создаёт цикл, где архитектуру определяют сетевые эффекты, а не техническая целесообразность.
Между тем, фреймворки с реальными инновациями борются за внедрение. Svelte устраняет накладные расходы компиляцией, Solid предлагает детальную реактивность без виртуального DOM, Qwik обеспечивает мгновенный запуск через возобновляемость. Эти подходы часто превосходят модель React, но редко получают оценку, потому что React выбирают по умолчанию.
Проблема не в самом React, а в мышлении «React по умолчанию».
Потолок инноваций
Технические основы React объясняют современные трудности. Виртуальный DOM был умным решением для проблем 2013 года, но, как отметил Рич Харрис, он вводит издержки, которых можно избежать с помощью компиляторов.
Хуки решили проблемы классовых компонентов, но добавили сложности: массивы зависимостей, устаревшие замыкания, неправильное использование эффектов. Даже документация React призывает к сдерженности: «Вам может не понадобиться эффект». Серверные компоненты улучшают время до первого байта, но добавляют архитектурную сложность.
Компилятор React — умное решение для автоматизации useMemo/useCallback, но его существование сигнализирует: мы оптимизируем вокруг ограничений модели.
Альтернативы предлагают иные подходы: Runes в Svelte 5 упрощают реактивность на этапе компиляции, детальная реактивность Solid обновляет только изменённые части, возобновляемость Qwik устраняет традиционную гидратацию. Это не инкрементные улучшения React, а другие модели с иными пределами.
Инновации без внедрения не меняют результаты. Внедрение невозможно, когда выбор делается рефлекторно.
Технический долг, который мы несём
Выбор React по умолчанию часто означает runtime и затраты на согласование, которые мы больше не questioned. Даже когда он достаточно быстр, его потолок ниже, чем у моделей с компиляцией или детальной реактивностью. Время разработчиков тратится на управление перерисовками, зависимостями эффектов и границами гидратации вместо создания ценности.
Исследования производительности единодушны: JavaScript дорог на критическом пути.
Мы сосредоточили ментальные модели вокруг «React-паттернов» вместо основ веба, снижая переносимость навыков и увеличивая архитектурную инерцию.
Потеря не только в производительности, но и в упущенных возможностях, когда альтернативы не оцениваются. Например, бенчмарки показывают, что Solid в 2-3 раза быстрее React в сценариях с интенсивной реактивностью.
Фреймворки, которым не дают развиваться
Svelte: революция компилятора
Svelte переносит работу на этап компиляции: нет виртуального DOM, минимальный runtime. Компоненты становятся целевыми операциями DOM. Ментальная модель соответствует основам веба.
Но «недостаточно вакансий» искусственно сдерживает внедрение Svelte, несмотря на технические преимущества.
Комментарии (726)
- React побеждает благодаря композиции функций JavaScript, интуитивной модели и стабильности, а не только из-за сетевых эффектов.
- Веб-компоненты рассматриваются как путь к совместимости между фреймворками и снижению зависимости от экосистемы React.
- Многие разработчики ценят React за предсказуемость, лёгкость найма и богатую экосистему, что делает его безопасным выбором.
- Критики указывают на сложности React (хуки, зависимости, ререндеры) и чрезмерный boilerplate-код.
- Альтернативы вроде Svelte или Solid предлагают упрощённые модели и лучшую производительность, но проигрывают в распространённости.
- Инновации во фронтенде часто воспринимаются как «суета», ведущая к устареванию проектов и постоянным переписываниям.
- React доминирует частично из-за React Native, что позволяет использовать единую кодобазу для web и мобильных платформ.
- Браузеры и стандарты Web обвиняются в недостаточной скорости развития, что вынуждает полагаться на фреймворки.
- Стабильность и стандартизация ценятся выше постоянных изменений и «инноваций» в индустрии.
Why is D3 so Verbose?
D3 кажется многословным, потому что каждая деталь визуализации описывается вручную.
Чтобы нарисовать простой boxplot, потребовалось 194 строки: указываются координаты каждой линии, прямоугольника, осей и подписей. В Excel это делается парой кликов, но D3 не «волшебная кнопка», а низкоуровневый инструмент для SVG.
Плюс такого подхода — абсолютная гибкость: можно создать любую визуализацию, не ограниченную шаблонами. Минусы — много кода и крутая кривая обучения.
Пока я учусь, пишу «вручную», чтобы не пропустить детали; позже код можно сжать собственными функциями или компонентами.
Итог: D3 длинный, потому что даёт полный контроль над каждым пикселем.
Комментарии (61)
- D3 — это не «библиотека для графиков», а низкоуровневый инструмент для связывания данных с DOM/SVG через
.data().enter/update/exit, что даёт максимальную гибкость, но требует особой ментальной модели. - Из-за этого код получается многословным; кто-то считает это читаемостью и «мышечной памятью», кто-то — непреодолимым барьером.
- Чтобы уменьшить многословность, часть людей берёт лишь вычислительную часть D3 и рендерит через Solid/JSX, React или Observable Plot.
- Некоторые напоминают: если нужны только статические графики, можно обойтись вообще без JS, а для сложных анимаций и «не-стандартных» визуализаций D3 остаётся почти незаменимым.