Lazy loading маршрутов — это техника оптимизации загрузки веб-приложений, при которой отдельные части приложения загружаются только по необходимости. В Preact это позволяет уменьшить первоначальный размер бандла и ускорить отображение критического контента. Основная идея заключается в динамическом импортировании компонентов маршрутов и их асинхронной подгрузке.
Для реализации ленивой загрузки используется стандартный синтаксис
import(), возвращающий промис. Например:
import { h } from 'preact';
import { Suspense, lazy } from 'preact/compat';
const Home = lazy(() => import('./routes/Home'));
const About = lazy(() => import('./routes/About'));
lazy() оборачивает функцию, которая возвращает промис
от динамического импорта.Suspense обеспечивает отображение резервного контента,
пока ленивый компонент загружается:
<Suspense fallback={<div>Загрузка...</div>}>
<Home />
</Suspense>
fallback может быть любой JSX-разметкой: спиннер,
текст, анимация.Suspense ленивый компонент не будет
рендериться корректно.preact-routerДля маршрутизации в Preact часто используется библиотека
preact-router. Ленивые компоненты маршрутов интегрируются
следующим образом:
import { h } from 'preact';
import { Router } from 'preact-router';
import { Suspense, lazy } from 'preact/compat';
const Home = lazy(() => import('./routes/Home'));
const About = lazy(() => import('./routes/About'));
const App = () => (
<Suspense fallback={<div>Загрузка маршрута...</div>}>
<Router>
<Home path="/" />
<About path="/about" />
</Router>
</Suspense>
);
export default App;
lazy().Suspense охватывает весь роутер или отдельные маршруты,
в зависимости от требований к UX.Ленивая загрузка маршрутов создаёт отдельные чанки для каждого динамического импорта. Это снижает нагрузку на браузер и ускоряет первый рендеринг. Пример конфигурации с Webpack:
output: {
filename: '[name].[contenthash].js',
chunkFilename: '[name].[contenthash].js',
},
optimization: {
splitChunks: {
chunks: 'all',
},
},
preact/compat это один из самых
эффективных способов ускорить загрузку.В крупных Preact-приложениях целесообразно:
Suspense для каждой области
приложения, где возможна долгосрочная загрузка.import().then() для улучшения UX.Пример предзагрузки при наведении:
const AboutPreload = () => import('./routes/About');
<a
href="/about"
onMouseEn ter={() => AboutPreload()}
>
О нас
</a>
Suspense в Preact полностью поддерживает ленивые
компоненты, но не поддерживает асинхронные данные внутри самого
компонента без сторонних библиотек.preact-iso
или preact-ssr).Lazy loading маршрутов в Preact позволяет уменьшить первоначальный
размер бандла, ускорить первый рендеринг и улучшить UX при навигации.
Основные инструменты — lazy() и Suspense,
динамический импорт и грамотная разбивка кода. При интеграции с
preact-router маршруты становятся полностью асинхронными, а
предзагрузка маршрутов повышает отзывчивость интерфейса.