Stencil и Lit решают схожую задачу — создание Web Components, — но делают это принципиально разными способами.
Stencil — это компилятор. Он анализирует исходный код, написанный с использованием декораторов, JSX и TypeScript, и на этапе сборки генерирует оптимизированные Web Components. Итоговый результат — чистые стандартизированные Custom Elements без зависимости от Stencil в рантайме.
Lit — это библиотека. Она предоставляет базовый
класс (LitElement), систему реактивных свойств и
шаблонизацию, работающие напрямую в браузере. Код Lit остаётся частью
итогового бандла и выполняется в рантайме.
Ключевое следствие:
Stencil
render()h()render() {
return (
<div class="item">
{this.active ? <span>Активен</span> : null}
</div>
);
}
Lit
render() {
return html`
<div class="item">
${this.active ? html`<span>Активен</span>` : ''}
</div>
`;
}
Stencil выигрывает в читаемости для разработчиков с React-бэкграундом, Lit — в прозрачности и близости к нативному JavaScript.
Stencil
Реактивность основана на декораторах:
@Prop() — внешние свойства@State() — внутреннее состояниеИзменение этих значений автоматически вызывает повторный рендер
Используется односторонний поток данных
Поддерживается отслеживание изменений через
@Watch()
@Prop() value: string;
@State() count = 0;
Lit
propertiesshouldUpdatestatic properties = {
value: { type: String },
count: { state: true }
};
Stencil предлагает более строгую и формализованную модель, Lit — более гибкую и минималистичную.
Stencil
Генерирует highly-optimized код:
Каждый компонент компилируется в максимально простой Custom Element
Отсутствие фреймворка в runtime снижает overhead
Lit
Stencil лучше подходит для крупных дизайн-систем и библиотек компонентов, Lit — для приложений и отдельных виджетов.
Stencil
.d.ts для компонентовLit
Stencil обеспечивает более высокий уровень типобезопасности «из коробки».
Stencil
@Event()bubbles, composed,
cancelable@Event() valueChange: EventEmitter<string>;
Lit
CustomEventthis.dispatchEvent(new CustomEvent('value-change', { detail }));
Stencil минимизирует boilerplate и ошибки конфигурации событий.
Stencil
Lit
Stencil ориентирован на корпоративные библиотеки компонентов, Lit — на гибкость и свободу архитектуры.
Stencil
Lit
Stencil выигрывает в сценариях с жёсткими требованиями к SEO и времени первого рендера.
Stencil
Более высокий порог входа
Необходимость понимать:
Жёсткие архитектурные рамки
Lit
Stencil
Lit
Stencil диктует архитектуру, Lit её не навязывает.