Серверный рендеринг в Marko
Основы серверного рендеринга
Marko предоставляет мощные возможности для серверного рендеринга, что позволяет рендерить страницы непосредственно на сервере, прежде чем они будут отправлены пользователю. Этот процесс значительно ускоряет начальную загрузку страницы и улучшает производительность, так как браузер получает уже готовый HTML, который можно сразу отобразить. Серверный рендеринг (SSR) в Marko поддерживает не только ускоренную загрузку, но и улучшение SEO, так как поисковые роботы видят сразу отрендеренные страницы.
Как работает серверный рендеринг в Marko?
При использовании серверного рендеринга в Marko процесс выглядит следующим образом:
Серверный рендеринг в Marko использует один и тот же синтаксис для рендеринга, что и на клиенте, что упрощает поддержку и развитие кода, так как серверный и клиентский рендеринг делят общие компоненты.
Настройка серверного рендеринга в Marko
Для того чтобы активировать серверный рендеринг в Marko, необходимо
настроить серверный код. Основным инструментом для этого является пакет
@marko/express или другой серверный фреймворк, совместимый
с Marko, такой как Koa или Hapi.
Пример настройки серверного рендеринга с использованием Express:
npm install express @marko/express
const express = require('express');
const marko = require('@marko/express');
const app = express();
// Устанавливаем для express рендеринг с использованием Marko
app.use(marko());
app.get('/', (req, res) => {
res.marko(require('./templates/index.marko'));
});
app.listen(3000, () => {
console.log('Server is running on port 3000');
});
В этом примере создается сервер, который рендерит компонент
index.marko для маршрута /. Компонент
рендерится на сервере и отправляется пользователю в виде HTML.
Серверный рендеринг с данными
Одним из ключевых аспектов серверного рендеринга является возможность передачи данных в шаблон. Marko позволяет передавать данные с сервера непосредственно в рендерящий компонент.
Пример передачи данных:
app.get('/', (req, res) => {
const data = {
title: 'Пример серверного рендеринга',
message: 'Добро пожаловать в Marko!'
};
res.marko(require('./templates/index.marko'), data);
});
В этом примере объект data передается в компонент
index.marko. Внутри компонента данные можно использовать
через синтаксис input.
Гибкость рендеринга с асинхронными операциями
Marko поддерживает асинхронный рендеринг, что позволяет загружать данные или выполнять операции перед отправкой страницы клиенту. Это особенно полезно, когда необходимо запросить данные из базы данных или выполнить внешние API-запросы.
Пример с асинхронным рендерингом:
app.get('/', async (req, res) => {
try {
const data = await fetchDataFromDatabase();
res.marko(require('./templates/index.marko'), { data });
} catch (error) {
res.status(500).send('Ошибка при загрузке данных');
}
});
Здесь асинхронная операция fetchDataFromDatabase()
выполняется перед рендерингом компонента. Когда данные получены, они
передаются в компонент для дальнейшего рендеринга.
Интеграция с клиентским рендерингом
Важной особенностью Marko является возможность гибкой интеграции серверного рендеринга с клиентским рендерингом. После того как сервер отправит отрендеренный HTML, на клиенте можно активировать динамические компоненты с помощью JavaScript.
Marko поддерживает использование одного и того же кода как на сервере, так и на клиенте. Это означает, что компоненты, которые были отрендерены на сервере, могут быть повторно инициализированы на клиенте для обеспечения интерактивности.
Пример интеграции с клиентским рендерингом:
// Для клиентского рендеринга нужно использовать Marko компонент с подключенным кодом
import { createComponent } from 'marko';
const component = createComponent(require('./templates/index.marko'));
component.mount(document.body);
Когда этот компонент загружается на клиенте, Marko автоматически воссоздаёт состояние компонента и восстанавливает его интерактивность.
Преимущества серверного рендеринга с Marko
Проблемы и ограничения серверного рендеринга
Хотя серверный рендеринг предоставляет множество преимуществ, он имеет и свои ограничения:
Серверный рендеринг в Marko — мощный инструмент, который помогает улучшить производительность и SEO-продвижение веб-приложений. Однако его использование требует внимательного подхода к настройке сервера и управлению состоянием приложения.