Итоги недели в мире фронтенда и обзоры новых сервисов: секреты идеального фронтенда
🌊 Гидратация: плюсы и минусы
Гидратация – это процесс, который JavaScript выполняет для взаимодействия с уже существующим HTML-кодом, загруженным в DOM через серверный рендеринг (SSR). Это подход позволяет быстро показать пользователю основное содержимое страницы, а затем добавить интерактивные элементы:
- Сервер отправляет предварительно отрендеренный HTML клиенту.
- Этот HTML содержит структуру и контент страницы, но без интерактивности.
- Затем JavaScript загружается и добавляет интерактивную функциональность к статическому HTML.
Процесс называется гидратацией, потому что JavaScript буквально оживляет HTML – подливает в сухой статический код живой воды интерактивности. 🙂
Большинство популярных JS-фреймворков поддерживают гидратацию. Возьмем, к примеру, фреймворк Next.js, предназначенный для работы с React – он поддерживает как серверный рендеринг, так и гидратацию. Гидратация в React – это процесс привязки React к уже существующему HTML, который был сгенерирован на сервере. Во время гидратации React добавляет обработчики событий к существующим элементам и берет на себя рендеринг приложения на стороне клиента.
Главный недостаток клиентского рендеринга
Для иллюстрации клиентского рендеринга рассмотрим простейший пример с инвентаризацией запасов – здесь мы создаем кнопки, при нажатии на которые отображается количество фруктов на складе:
Работающий пример можно посмотреть на CodePen:
Когда браузер загружает эту страницу, он получает пустой HTML-каркас:
Затем приложение рендерится на клиенте. Однако такой подход не идеален: если JavaScript вдруг не загрузится, сайт не будет работать. Это может произойти по разным причинам: ошибка в коде, проблемы с сетью, (не)преднамеренная блокировка JavaScript пользователем и т. д.
Привет!
Мы запустили еженедельную email-рассылку, посвященную последним новостям и тенденциям в мире фронтенда. В наших еженедельных рассылках ты найдешь:
- Современные JavaScript-фреймворки и библиотеки.
- HTML5 и CSS3: новые возможности и трюки.
- Оптимизация производительности веб-приложений.
- Тестирование и отладка кода.
- Лучшие практики UX/UI.
- Новые веб-стандарты и браузерные технологии.
- Тренды в веб-дизайне и интерфейсах.
- Прогрессивные веб-приложения (PWA).
Преимущества серверного рендеринга
Если использовать Next.js с серверным рендерингом, то HTML-вывод будет выглядеть иначе – контент будет отображаться сразу в HTML:
Этот подход намного лучше, так как браузер может сразу отобразить контент, и любые автоматизированные запросы (например, от ботов или curl) будут успешными (что очень важно для SEO и соблюдения стандартов доступности).
После загрузки JavaScript происходит гидратация HTML. Во время гидратации обработчики событий, такие как onClick, будут добавлены к кнопкам, и они станут интерактивными. С одной стороны, добавление интерактивности во время второго рендера – не совсем идеальное решение, но с другой стороны – быстрая загрузка большого объема контента иногда бывает важнее.
Сложность реализации
Использование серверного рендеринга и гидратации связано с определенными сложностями:
- Используя фреймворк, который поддерживает SSR и гидратацию, вы добавляете новый уровень сложности к уже существующему стеку технологий. Это требует внедрения процесса сборки и добавления новых зависимостей.
- Использование фреймворков с SSR и гидратацией часто приводит к более сложному коду. Разработчик должен учитывать, что компонент может быть отрендерен как на сервере, так и на клиенте.
- При написании JavaScript, который должен работать как на сервере, так и на клиенте, можно столкнуться с нетривиальными проблемами. Например, доступ к объекту window невозможен на сервере, так как он существует только в браузере.
👾 Больше полезных материалов вы найдете на нашем телеграм-канале «Библиотека хакера»
Что может пойти не так?
Использование серверного рендеринга и гидратации сопряжено с несколькими потенциальными проблемами:
- Несовпадение HTML. Основная проблема, с которой можно столкнуться, – это несовпадение HTML-кода, генерируемого на сервере и на клиенте. Например, если в компоненте есть случайные данные или различия в состоянии, HTML, созданный на сервере, может не совпадать с тем, что пытается отобразить клиент.
- В процессе разработки вы, скорее всего, будете постоянно исправлять критические ошибки гидратации, поскольку фреймворки типа Next.js настоятельно этого требуют.
- Двойная работа. Обычно продакшн-сборка сайта сглаживает пользовательские ошибки, чтобы сайт оставался функциональным. Проблема в том, что тогда сайт буквально выполняет вдвое больше работы, и SSR-страница полностью заменяется, когда приходит клиентская версия и не соответствует ей.
- Хрупкость системы. Ошибки гидратации могут привести к тому, что сайт станет полностью неработоспособным. Такие проблемы могут возникнуть в любой момент, особенно если вы вносите изменения в компоненты, которые работают как на сервере, так и на клиенте.
Обязательна ли гидратация при использовании JavaScript-фреймворка с серверным рендерингом?
Основной минус гидратации – накладные расходы, поскольку она подразумевает восстановление обработчиков событий путем загрузки и повторного выполнения всех компонентов, которые были отрендерены на сервере. Таким образом, сайт отправляется клиенту дважды: сначала как HTML, а затем как JavaScript. Этот подход оправдан, если вам нужен и серверный рендеринг, и интерактивность. Но если вам не нужна никакая интерактивность вообще, то можно использовать SSR без всякой гидратации:
- Astro отлично справляется с выводом статического содержимого, и другие фреймворки можно настроить так, чтобы они не выводили никакого JavaScript (тем самым пропуская весь процесс гидратации).
- Фреймворк Qwik полностью избегает гидратации благодаря концепции, которую его разработчики называют возобновляемостью: он может загружать и активировать только те части кода, которые необходимы, без необходимости загружать всю страницу дважды.
🧪 Больше полезных материалов вы найдете на нашем телеграм-канале «Библиотека тестировщика»
✒ Как улучшить UI: 10 советов для начинающих фронтендеров
Обращайте внимание на отступы и поля
Почему это важно: Неравномерные отступы и поля создают ощущение неаккуратности и неопытности. Равномерные отступы делают интерфейс более чистым и профессиональным.
Как это сделать: Используйте кратные значения, например, кратные 4 (4px, 8px, 12px, 16px):
Это создает ритм в вашем макете и делает его более аккуратным:
Обязательно обрабатывайте пустые состояния
Почему это важно: Пользователи могут испытывать недоумение, когда открывают приложение и видят пустой экран. Это может произойти, если разработчики забывают продумать пустые состояния.
Как это сделать: Добавьте полезные сообщения или кнопки действий (CTA), чтобы направить пользователей на следующий шаг.
☕ Больше полезных материалов вы найдете на нашем телеграм-канале «Библиотека джависта»
Всегда показывайте индикаторы загрузки
Почему это важно: Если приложение выполняет действие в фоновом режиме, дайте пользователям знать об этом, чтобы они не ломали голову, сработала ли кнопка и не зависло ли приложение.
Как это сделать: Используйте задержку при показе индикатора загрузки для быстрых операций, чтобы он не исчезал слишком быстро.
Поддерживайте четкую визуальную иерархию
Почему это важно: Не все элементы на экране одинаково важны. Ваш интерфейс должен это отражать, чтобы пользователи понимали, что важно.
Как это сделать: Используйте разные размеры, цвета и толщину шрифтов, чтобы выделить ключевые элементы.
🐍 Больше полезных материалов вы найдете на нашем телеграм-канале «Библиотека питониста»
Дизайну тоже нужен воздух
Почему это важно: Не нужно заполнять каждую часть экрана чем-то. Пустое, или, как его еще называют, негативное, пространство помогает вашему приложению «дышать» и позволяет пользователям сосредоточиться на самых важных элементах.
Как это сделать: Увеличьте расстояние между несвязанными элементами и уменьшите его между связанными.
Сделайте сообщения об ошибках понятными и полезными
Почему это важно: Ошибки неизбежно случаются, и важно, чтобы пользователи знали, что именно произошло. Вместо простого сообщения об ошибке, например, «Ошибка 404», нужно предоставить контекст и варианты решения проблемы.
Как это сделать: Сделайте сообщения об ошибках дружелюбными, понятными и практичными, предлагая пользователям действия, которые они могут предпринять.
🐘 Больше полезных материалов вы найдете на нашем телеграм-канале «Библиотека пхпшника»
Добавляйте подсказки для длинного текста и неактивных состояний
Почему это важно: Если текст обрезается или кнопка неактивна, подсказка может предоставить дополнительную информацию, помогая пользователям понять, почему это происходит.
Как это сделать: Используйте подсказки, чтобы предоставить контекст или объяснить, почему кнопка неактивна и что пользователь может или должен сделать в связи с этим.
Используйте подходящие по контексту цвета для обратной связи
Почему это важно: Цвета играют важную роль в навигации по приложению. Правильные цвета помогают пользователям быстро понять контекст (например, красный для ошибок и зеленый для успеха), даже не вникая в текст сообщения.
Как это сделать: Следуйте установленным цветовым конвенциям, чтобы избежать путаницы у пользователей.
📖 Больше полезных книг вы найдете на нашем телеграм-канале «Книги для программистов»
Иконки должны подчеркивать, а не загромождать дизайн
Почему это важно: Не перегружайте интерфейс иконками без необходимости – не каждому пункту меню, например, непременно нужна иконка. Каждая иконка должна иметь ясную цель и улучшать взаимодействие с пользователем.
Как это сделать: Делайте иконки простыми и узнаваемыми, чтобы они соответствовали действиям, которые они представляют.
Не изобретайте велосипед – пользуйтесь профессиональными UI-библиотеками
Почему это важно: Не обязательно писать все с нуля. Существуют отличные UI-библиотеки – Ant Design, Shadcn UI, Material UI, Chakra UI и т. д., которые могут сэкономить время, усилия и придать вашему фронтенду стильный вид.
Как это сделать: Если вам нужно быстрое решение или ваше время ограничено, используйте готовые библиотеки. Но если вы строите что-то исключительно для обучения, смело погружайтесь в детали и создавайте свои собственные компоненты.
Больше советов о создании идеального UI/UX – в этом лонгриде профессионального дизайнера и фронтендера Адама Даннавэя.
Автор рассылки: Наталья Кайда