Гидратация (hydration) — процесс, при котором серверный HTML превращается в полностью функциональное клиентское приложение без повторной перерисовки всего DOM. В контексте Mithril это позволяет использовать серверный рендеринг (SSR) и одновременно сохранять реактивность компонентов на клиенте.
Перед гидратацией необходимо:
m.render() или
m.mount() в серверном окружении (Node.js).Mithril использует виртуальный DOM для эффективного обновления интерфейса. Во время гидратации:
m.redraw() без полной перерисовки.Серверный рендеринг:
import m from "mithril";
import fs from "fs";
import App from "./App.js";
const html = m.render(App);
fs.writeFileSync("index.html", `
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Mithril SSR</title>
</head>
<body>
<div id="app">${html}</div>
<script src="/bundle.js"></script>
</body>
</html>
`);
Клиентская гидратация:
import m from "mithril";
import App from "./App.js";
m.mount(document.getElementById("app"), App);
Ключевое отличие гидратации от обычного монтирования в Mithril
заключается в том, что m.mount связывает уже существующий
DOM, а не очищает его.
// server.js
const preloadedData = JSON.stringify({ user: "Alice", theme: "dark" });
const html = m.render(App, { data: preloadedData });
fs.writeFileSync("index.html", `
<div id="app">${html}</div>
<script>window.__PRELOADED_DATA__ = ${preloadedData}</script>
<script src="/bundle.js"></script>
`);
// client.js
const initialData = window.__PRELOADED_DATA__;
m.mount(document.getElementById("app"), {
view: () => m(App, { data: initialData })
});
Такой подход позволяет синхронизировать серверное состояние с клиентской гидратацией, избегая мерцания или лишних запросов после загрузки страницы.
Гидратация на клиенте в Mithril обеспечивает бесшовное соединение серверного и клиентского рендеринга. Правильная организация передачи данных и синхронизация состояния позволяют создавать приложения с высокой производительностью, сокращая время первого отображения страницы и улучшая пользовательский опыт.