Пейджер

🌍 Привет мир! 👋

🌍 Привет мир! 👋

Cегодня поговорим про интересный архитектурный паттерн для frontend “Islands architecture”. Впервые идея данного паттерна была задокументирована создателем Preact.

🚀 Мотивация

Понимание Island Architecture дает важное представление о том, как работают современные фреймворки для создания высокопроизводительных веб-приложений, таких как Astro, Next.js, Nuxt.js, Vue 3 и ряд других. Этот подход помогает улучшить производительность, ускорить загрузку страниц и повысить гибкость в разработке.

Я уже неоднократно писал статьи про производительность и найти 🔎 их можно по хештегу #PERFORMANCE.

Как работает Island Architecture

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

✏️ Пример

📎 Когда страница запрашивается пользователем, сервер генерирует весь HTML для страницы, включая как статичный контент (компоненты), так и места для динамических компонентов.

📎 Статичный контент, такой как текст, изображения или макеты, генерируется на сервере и отправляется клиенту как готовая HTML-страница.

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

❗️ Hydration - это момент, когда браузер загружает JavaScript-код, и этот код добавляет интерактивность.

✏️ Например: Кнопки начинают реагировать на клики, формы — на отправку, а элементы на странице становятся динамическими.

➖ Без гидратации: Страница просто показывает текст и картинки, но ничего нельзя нажать или изменить.
➖ После гидратации: Можно кликать по кнопкам, отправлять формы и взаимодействовать с элементами на странице.

💡 Статичные части страницы полностью отображаются сразу, а динамические компоненты, которые были отправлены как слоты, также отображаются, но являются неактивными так как в них нет JS.

Что происходит с бандлами

1️⃣ Начальный (основной) бандл, содержит минимальный JavaScript, необходимый для гидратации динамических компонентов.
2️⃣ Динамические островки: Для каждого динамического компонента или "островка" создается отдельный бандл, который будет загружен и гидратирован только тогда, когда этот компонент нужен. Такой подход называется разделением кода (code splitting).

⚙️ Ленивая загрузка (Lazy Loading): Один из способов разделения бандлов в рамках островной архитектуры. JavaScript для каждого островка загружается только по мере необходимости, что минимизирует начальную нагрузку на браузер. Например, React.lazy (про который я писал ранее).

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

❗️Islands architecture❗️ не подходит для высокоинтерактивных страниц, таких как социальные сети, для которых вероятно потребуются тысячи островов.

💬 Делитесь своим мнением в комментариях👇! Если вам понравилась статья, не забудьте поставить лайк! 👍

#PERFORMANCE #ARCHITECTURE
Медиа 1
Хотите больше таких постов?
Подпишитесь на канал и читайте продолжение в Telegram.
Подписаться на @ivanchikovitclub Открыть пост в Telegram