Серверный рендеринг (SSR) — это подход, при котором HTML-контент страницы генерируется на сервере, а не на клиенте. Этот процесс позволяет пользователю быстрее увидеть контент на экране, так как сервер отправляет готовый HTML, а браузер не тратит время на выполнение JavaScript перед рендером. В контексте фреймворка Marko, серверный рендеринг используется для ускорения первоначальной загрузки страницы, улучшения SEO и обеспечения лучшего пользовательского опыта.
Marko реализует серверный рендеринг на основе своего движка рендеринга, который компилирует компоненты в эффективный код JavaScript. Это позволяет серверу отдавать готовую разметку, уже включая динамическое содержимое, при запросе страницы. В отличие от традиционных шаблонных систем, Marko предоставляет более высокоуровневый подход, который включает поддержку изоморфных приложений, где одни и те же компоненты могут быть рендерены как на сервере, так и на клиенте.
Процесс серверного рендеринга в Marko можно разделить на несколько этапов:
Серверный рендеринг в Marko обеспечивает ряд преимуществ:
В Marko компоненты могут быть как статическими, так и динамическими. Статические компоненты генерируют неизменяемый HTML, который не зависит от состояния данных. Динамические компоненты генерируют HTML на основе данных, полученных из различных источников, таких как база данных или API.
Для динамических компонентов Marko предоставляет механизм рендеринга с передачей данных. Когда сервер запрашивает рендеринг компонента, он может передавать данные, которые будут использованы в шаблонах для генерации HTML. Это позволяет серверу генерировать страницы, которые содержат актуальную информацию.
Гидратация — это процесс, в котором клиентский JavaScript “привязывает” обработчики событий и логику к уже существующему HTML. В отличие от простого рендеринга на стороне клиента, где браузер полностью генерирует страницу, в случае с гидратацией клиентский код только дополняет и активирует интерактивность на основе уже отрендеренного HTML. Это значительно ускоряет загрузку страницы и улучшает производительность.
Marko предоставляет встроенные инструменты для эффективной гидратации. Когда клиент получает HTML, он автоматически подключает необходимые скрипты и запускает процесс гидратации, обеспечивая тем самым синхронизацию с сервером.
Marko предоставляет полную изоморфность компонентов. Это означает, что компоненты могут быть рендерены как на сервере, так и на клиенте, без необходимости в дублировании логики. Например, компонент, отвечающий за отображение списка товаров, может быть рендерен на сервере с данными из базы, а затем на клиенте, если необходимо, быть обновлен с помощью новых данных, полученных через API. Это упрощает архитектуру приложения и повышает его гибкость.
В Marko предусмотрена поддержка асинхронного рендеринга, что позволяет эффективно работать с данными, загружаемыми в реальном времени. Это особенно важно для приложений, которые зависят от внешних API или баз данных, так как можно выполнять асинхронные операции до того, как начнется процесс рендеринга страницы.
Для реализации асинхронных компонентов в Marko используются
специальные методы, такие как await, что позволяет
дождаться результатов асинхронных операций до начала рендеринга
компонента.
Для того чтобы реализовать серверный рендеринг с Marko, часто используется сервер на базе Node.js, который может обрабатывать запросы и выполнять рендеринг страниц. Пример базовой настройки сервера:
const express = require('express');
const marko = require('marko');
const app = express();
// Регистрация рендерера для компонента
app.get('/', (req, res) => {
res.marko(require('./views/index.marko'));
});
// Запуск сервера
app.listen(3000, () => {
console.log('Server is running on http://localhost:3000');
});
В этом примере используется Express.js для обработки HTTP-запросов.
Когда клиент запрашивает главную страницу, сервер выполняет рендеринг
компонента index.marko и отправляет результат обратно
клиенту. Это классический случай серверного рендеринга, когда сервер
отдает готовую страницу, а затем гидратирует её на клиенте.
Несмотря на высокую производительность и преимущества SSR, существуют некоторые моменты, которые необходимо учитывать для оптимизации работы приложения:
Серверный рендеринг в Marko — это мощный инструмент для создания высокопроизводительных веб-приложений, которые быстро загружаются и оптимизированы для поисковых систем. Правильное использование SSR в сочетании с возможностями изоморфных компонентов и асинхронного рендеринга позволяет создавать современные и эффективные веб-решения.