За свою карьеру я создавал проекты на чистом HTML/CSS, подключал jQuery для анимаций, а позже погрузился в мир React и Angular. Но чем больше я работал с фреймворками, тем чаще задавался вопросом: «А не переусложняем ли мы простые задачи?» В этой статье я поделюсь кейсами, где React и Angular избыточны и покажу, как нативные технологии экономят время, ресурсы и нервы.
Почему я перестал использовать фреймворки для всего подряд
Раньше я автоматически выбирал React даже для лендингов. Казалось логичным: знакомый инструмент, компонентный подход, удобный стейт-менеджмент. Но однажды клиент пожаловался, что его сайт грузится 4 секунды. Причина? React + Redux + куча зависимостей «на всякий случай». Тогда я переписал проект на чистом HTML/CSS/JS, и время загрузки сократилось до 0.8 секунд. Это стало поводом пересмотреть подход к выбору инструментов.
Кейсы, где React/Angular избыточны
1. Статические сайты и лендинги
Если ваш сайт это 5 страниц с текстом, формой обратной связи и кнопкой «Заказать», фреймворк лишь добавит накладных расходов.
Пример на HTML/CSS/JS:
<!DOCTYPE html> <html> <head> <title>Простой лендинг</title> <style> .cta-button { padding: 15px 30px; background: #3498db; color: white; border: none; cursor: pointer; } </style> </head> <body> <section id="hero"> <h1>Добро пожаловать!</h1> <button class="cta-button" onclick="showForm()">Заказать</button> </section> <script> function showForm() { // Простая логика открытия модального окна const form = document.createElement('div'); form.innerHTML = ` <form> <input type="email" placeholder="Email"> <button type="submit">Отправить</button> </form> `; document.body.appendChild(form); } </script> </body> </html>
Почему не React?
- Размер бандла: React + ReactDOM = ~40 KB (gzipped). Для лендинга это 30% всего контента.
- Гидротация: Даже после загрузки React тратит время на «оживление» статического HTML.
2. Простые SPA с минимальной динамикой
Допустим, вы делаете блог с поиском по статьям. Фильтрация работает на клиенте без сложных состояний.
Чистый JavaScript:
// articles.js document.addEventListener('DOMContentLoaded', () => { const searchInput = document.getElementById('search'); const articles = JSON.parse(localStorage.getItem('articles')) || []; searchInput.addEventListener('input', (e) => { const filtered = articles.filter(article => article.title.includes(e.target.value) ); renderArticles(filtered); }); }); function renderArticles(articles) { const container = document.getElementById('articles'); container.innerHTML = articles.map(article => ` <div class="article"> <h2>${article.title}</h2> <p>${article.content}</p> </div> `).join(''); }
Почему не Angular?
- Сложность: Angular требует изучения RxJS, Zone.js, Dependency Injection.
- Инициализация: Запуск приложения занимает время даже для простых задач.
3. Прототипирование
Когда нужно быстро проверить идею, нативные технологии позволяют начать за минуты без настройки Webpack/Babel.
Быстрый прототип:
<!-- prototype.html --> <script> let state = { count: 0 }; function updateCounter() { document.getElementById('counter').textContent = state.count; } </script> <button onclick="state.count++; updateCounter()">+1</button> <span id="counter">0</span>
Почему не фреймворк?
- Оверхед: Создание проекта через create-react-app занимает 2-3 минуты.
- Отладка: Ошибки в JSX или шаблонах Angular замедляют процесс.
Сравнительные тесты: HTML/CSS vs React/Angular
Параметр | Нативный код | React | Angular |
---|---|---|---|
Время загрузки (ms) | 1200 | 2500 | 3000 |
Размер бандла (KB) | 50 | 150 | 200 |
Время инициализации | 0 | 300 | 500 |
SEO-дружественность | Высокая | Средняя¹ | Средняя¹ |
Сложность поддержки | Низкая | Высокая | Высокая |
¹ Для улучшения SEO во фреймворках требуется SSR (Next.js/Nuxt.js/Universal), что усложняет архитектуру.
Как выбрать инструмент
- Задайте вопрос: «Что будет через год?»
Если проект масштабируется до уровня Gmail, сразу выбирайте фреймворк. Если это сайт визитка, то HTML/CSS. - Проверьте требования к интерактивности
Нужны ли сложные анимации, real-time обновления, глубокий стейт-менеджмент? Если нет, не усложняйте. - Проанализируйте команду
Если разработчики не знают Vanilla JS, но умеют в React, возможно проще использовать их сильные стороны. - Тестируйте производительность
Сравните Lighthouse-отчеты для двух версий (нативной и на фреймворке). Разница в 30% по скорости? Задумайтесь.
Когда всё-таки нужны фреймворки
- Сложные SPA. Много взаимосвязанных компонентов (админки, CRM).
- Командная разработка. Компонентный подход стандартизирует код.
- Экосистема. Готовые решения для маршрутизации (React Router), стейта (Redux), форм (Formik).
Современный веб помешан на фреймворках, но это не значит, что они нужны всегда. В моей практике 40% проектов можно было реализовать на чистом HTML/CSS/JS, сэкономив часы разработки и улучшив производительность. Попробуйте провести эксперимент, сделайте небольшой проект без React/Angular. Уверен, результаты вас удивят.