Статический хостинг

Stencil — современный инструмент для разработки веб-компонентов и прогрессивных веб-приложений (PWA). Одним из ключевых преимуществ Stencil является возможность генерации полностью статических файлов, что делает приложения легкими и простыми для хостинга. Статический хостинг обеспечивает высокую производительность, безопасность и минимальные требования к серверной инфраструктуре.


Генерация статических файлов

Stencil строит проект в виде набора HTML, CSS и JavaScript файлов, готовых к размещению на любом статическом хостинге. Процесс генерации осуществляется командой:

npm run build

После выполнения этой команды в директории www или dist (в зависимости от конфигурации stencil.config.ts) будут созданы:

  • index.html — главная страница приложения.
  • build/ — каталог с собранными JavaScript-бандлами компонентов.
  • assets/ — статические ресурсы (шрифты, изображения, CSS).
  • manifest.json и service-worker.js — файлы для PWA, если они включены.

Важный момент: Stencil по умолчанию использует lazy-loading для компонентов, поэтому каждый компонент загружается только по мере необходимости, что снижает нагрузку на сеть.


Поддержка маршрутизации

Для приложений с несколькими страницами используется встроенный маршрутизатор Stencil:

import { Router, Route } from '@stencil/router';

<stencil-router>
  <stencil-route url='/' component='home-page' exact={true} />
  <stencil-route url='/about' component='about-page' />
</stencil-router>

При статическом хостинге необходимо настроить сервер так, чтобы все запросы перенаправлялись на index.html, иначе при прямом обращении к вложенным маршрутам произойдет ошибка 404. Например, для Nginx:

location / {
    try_files $uri /index.html;
}

Для Netlify или Vercel достаточно добавить файл _redirects:

/*    /index.html   200

Оптимизация под статический хостинг

  • Pre-rendering: Stencil позволяет предрендерить страницы, превращая динамические компоненты в статический HTML. Это повышает скорость первого отображения и SEO-оптимизацию:
export const config: Config = {
  prerenderConfig: './prerender.config.ts'
};
  • Lazy-loading и модульная загрузка: JavaScript разбивается на небольшие чанки, что ускоряет загрузку страниц.

  • Service Worker: Автоматически генерируемый Service Worker кеширует ресурсы, обеспечивая офлайн-доступ и улучшая время отклика.

  • Минификация и оптимизация ассетов: Stencil автоматически минимизирует JS и CSS, что уменьшает размер загружаемых файлов.


Размещение на популярных статических хостингах

  • Netlify: простая интеграция через Git. Достаточно настроить build command: npm run build и publish directory: www. Можно использовать _redirects для маршрутов SPA.

  • Vercel: поддерживает статические проекты напрямую, автоматически определяя каталог сборки.

  • GitHub Pages: файлы из www можно разместить в ветке gh-pages. Для SPA требуется настроить 404.html, который будет перенаправлять на index.html.

  • Amazon S3 + CloudFront: S3 хранит статические файлы, CloudFront обеспечивает CDN и быстрый доступ по всему миру. Для SPA настраивается правило редиректа на index.html.


Практические рекомендации

  1. Отделение логики и представления: компоненты Stencil должны быть максимально атомарными. Это улучшает кэширование и повторное использование при статическом хостинге.
  2. Кеширование: настроить заголовки Cache-Control для ассетов. JS и CSS можно кешировать на длительное время, HTML — короткое.
  3. Анализ размера сборки: использовать stencil build --stats для оценки веса JavaScript-бандлов и выявления «тяжёлых» компонентов.
  4. Оптимизация изображений: статические хостинги хорошо сочетаются с современными форматами изображений (WebP, AVIF), уменьшая нагрузку на сеть.

Особенности работы с PWA на статическом хостинге

Stencil автоматически генерирует PWA-файлы:

  • manifest.json — содержит информацию о приложении, иконках и цветах.
  • service-worker.js — обеспечивает кеширование и офлайн-работу.

Важно: сервис-воркер обновляется только при изменении сборки, поэтому стратегия кеширования должна учитывать версионирование ресурсов. Обычно используется cache-busting через хеши в именах файлов.


Статический хостинг с Stencil сочетает простоту развертывания, высокую производительность и возможность создавать SEO-дружелюбные PWA. Грамотная организация компонентов, правильная маршрутизация и использование предрендеринга делают проекты на Stencil быстрыми и надежными даже при минимальной серверной инфраструктуре.