Svelte
Svelte — свободный и открытый компонентный фронтенд-фреймворк[1] и язык программирования[2], созданный Ричем Харрисом и поддерживаемый основной командой Svelte[3].
Svelte — не монолитная библиотека JavaScript, импортируемая приложениями. Вместо этого Svelte компилирует HTML-шаблоны в специализированный код, который напрямую манипулирует DOM, что позволяет уменьшить размер передаваемых файлов и повысить производительность на стороне клиента[4]. Код приложения также обрабатывается компилятором, который вставляет вызовы для автоматического пересчёта данных[1] и повторной отрисовки элементов пользовательского интерфейса при изменении данных, от которых они зависят[5]. Это также позволяет избежать накладных расходов, связанных с промежуточными представлениями во время выполнения (runtime), такими как виртуальный DOM[6], в отличие от традиционных фреймворков (таких как React и Vue.js), которые выполняют основную часть своей работы во время выполнения, то есть в браузере[4][5][3][7][1][6].
Сам компилятор написан на JavaScript[8][7]. Его исходный код распространяется под лицензией MIT и размещён на GitHub[7]. Среди сопоставимых фронтенд-библиотек Svelte имеет один из самых маленьких размеров итоговой сборки (bundle) — всего 2 КБ[9].
История
Предшественником Svelte является Ractive.js, который Рич Харрис создал в 2013 году[10].
Версия 1 Svelte была написана на JavaScript и выпущена 29 ноября 2016 года[11]. Название «Svelte» (в пер. с англ. — «изящный», «стройный») было выбрано Ричем Харрисом и его коллегами из The Guardian[11].
Версия 2 Svelte была выпущена 19 апреля 2018 года. В ней были исправлены ошибки, допущенные в предыдущей версии, например, двойные фигурные скобки были заменены на одинарные[11].
Версия 3 Svelte была написана на TypeScript и выпущена 21 апреля 2019 года. В ней был переосмыслен подход к реактивности: компилятор стал отслеживать присваивания переменных «за кулисами»[1].
Веб-фреймворк SvelteKit был анонсирован в октябре 2020 года и вошёл в стадию бета-тестирования в марте 2021 года[12][13]. SvelteKit 1.0 был выпущен в декабре 2022 года после двух лет разработки[14].
Версия 4 Svelte была выпущена 22 июня 2023 года. Это был релиз, направленный на поддержку, он стал меньше и быстрее третьей версии[15]. В рамках этого релиза был проведён внутренний рефакторинг с TypeScript обратно на JavaScript с использованием аннотаций типов JSDoc[8]. Это вызвало недоумение в сообществе разработчиков, на что ответил создатель Svelte Рич Харрис[16][17].
Версия 5 Svelte была выпущена 19 октября 2024 года на Svelte Summit Fall 2024. Svelte 5 стал полной переработкой фреймворка, изменив ключевые концепции, такие как реактивность и переиспользование кода[18]. Его основная особенность, руны (runes), переработала способ объявления и использования реактивного состояния. Руны — макросы, похожие на функции, которые используются для объявления реактивного состояния или кода, использующего реактивные состояния. Компилятор использует эти руны для обозначения значений, которые могут изменяться и от которых зависят другие состояния или DOM[19]. Svelte 5 также представил сниппеты — переиспользуемые фрагменты кода, которые определяются один раз и могут использоваться в любом месте компонента[20]. Изначально Svelte 5 был встречен неоднозначно из-за множества изменений и, как следствие, устаревания некоторых подходов, в основном из-за введения рун. Однако большая часть споров утихла после первоначального анонса рун и дальнейшей доработки Svelte 5[источник?].
Ключевые ранние участники команды Svelte: Conduitry присоединился с выходом Svelte 1, Тан Ли Хау — в 2019 году, а Бен МакКанн — в 2020 году[11]. Рич Харрис и Саймон Хольтхаузен присоединились к компании Vercel для работы над Svelte на полную ставку в 2022 году[21]. Доминик Ганнауэй перешёл в Vercel из основной команды React для работы над Svelte в 2023 году[22].
Синтаксис
Приложения и компоненты Svelte определяются в файлах с расширением `.svelte` — это HTML-файлы, расширенные синтаксисом шаблонов, основанным на JavaScript и похожим на JSX.
Основные возможности Svelte доступны через руны, которые синтаксически выглядят как функции, но используются компилятором как макросы. К ним относятся:
- Руна
$state
, используемая для объявления реактивного состояния - Руна
$derived
, используемая для объявления реактивного состояния, производного от одного или нескольких других состояний - Руна
$effect
, используемая для объявления кода, который перезапускается при изменении его зависимостей
Кроме того, синтаксис { JavaScript-код }
можно использовать для вставки выражений в HTML-элементы и компоненты[23], подобно шаблонным строкам в JavaScript. Этот синтаксис также может использоваться в атрибутах элементов для таких целей, как двусторонняя привязка данных, обработка событий и стилизация CSS.
Пример приложения «Список дел», созданного на Svelte:
<script>
let value = $state();
const todos = $state([]);
const all = $derived(todos.length);
const done = $derived(todos.filter(todo => todo.done).length);
function onsubmit(e) {
e.preventDefault();
todos.push({ text: value, done: false });
e.target.reset();
}
</script>
<span>Список дел</span>
<small>выполнено {done}/{all}</small><br />
{#each todos as { text, done }, index}
<input type="checkbox" bind:checked={todos[index].done} id={text} />
<label for={text} class:done>{text}</label>
<button onclick={() => todos.splice(index, 1)}>Удалить</button>
<br />
{/each}
<form {onsubmit}>
<br />
<label for="input">Добавить задачу</label>
<br />
<input type="text" name="input" bind:value />
</form>
<style>
span {
font-size: 20px;
font-weight: bold;
}
.done {
text-decoration-line: line-through;
}
</style>
Связанные проекты
Разработчики Svelte создали SvelteKit как официальный способ создания проектов на Svelte. Это фреймворк в стиле Next.js, который значительно сокращает объём кода, отправляемого в браузер. Ранее разработчики создали Sapper, который был предшественником SvelteKit[24].
Команда Svelte также поддерживает ряд интеграций для популярных программных проектов, включая интеграции для Vite, Rollup, Webpack, TypeScript, Visual Studio Code, инструментов разработчика Chrome, ESLint и Prettier[25]. Ряд внешних проектов, таких как Storybook, также создали интеграции со Svelte и SvelteKit.
Влияние
Vue.js смоделировал свой API и однофайловые компоненты по образцу Ractive.js, предшественника Svelte[10].
Признание
Svelte получил широкое признание среди разработчиков. Он занял первые места в нескольких крупных опросах разработчиков, был назван самым «любимым» веб-фреймворком в опросе Stack Overflow 2021 года и фронтенд-фреймворком с самыми удовлетворёнными разработчиками в опросе State of JS 2020 года[26][27].
Svelte был внедрён рядом крупных веб-компаний, включая The New York Times, Google, Apple, Spotify, Square, Yahoo!, ByteDance, Rakuten, Bloomberg, Reuters, IKEA, Facebook и Brave[28][29][30].
Группа сообщества, известная как Svelte Society, проводит конференцию Svelte Summit, выпускает новостную рассылку о Svelte, ведёт подкаст и поддерживает каталог инструментов, компонентов и шаблонов для Svelte[31].
См. также
Примечания
- ↑ 1 2 3 4 Rich Harris. Svelte 3: Rethinking reactivity (англ.). svelte.dev (22 апреля 2019). Дата обращения: 7 августа 2021.
- ↑ Harris, Rich. The truth about Svelte (амер. англ.). GitHub Gist (26 ноября 2018). Дата обращения: 21 декабря 2022.
- ↑ 1 2 Krill, Paul. Slim, speedy Svelte framework puts JavaScript on a diet (англ.). InfoWorld (2 декабря 2016).
- ↑ 1 2 React vs. Svelte, the JavaScript build-time framework (англ.). react-etc.net.
- ↑ 1 2 Svelte 3 Front-End Framework Moves Reactivity into the JavaScript Language, Q&A with Rich Harris (англ.). InfoQ.
- ↑ 1 2 Rich Harris. Virtual DOM is pure overhead (англ.). svelte.dev (27 декабря 2018).
- ↑ 1 2 3 GitHub - sveltejs/svelte: Cybernetically enhanced web apps (англ.) (11 января 2020).
- ↑ 1 2 TS to JSDoc Conversion #8569 (англ.). GitHub.com.
- ↑ Frontendeng.dev. Svelte vs React: Which framework is better? (англ.). frontendeng.dev (1 августа 2023).
- ↑ 1 2 Tomasz Świstak. About the Svelte JavaScript framework (амер. англ.). ValueLogic (19 ноября 2020). — «By the way, Vue’s syntax has been influenced by Ractive.js, a direct predecessor of Svelte.» Дата обращения: 10 июня 2021. Архивировано 27 марта 2022 года.
- ↑ 1 2 3 4 Svelte Origins: A JavaScript Documentary (англ.). YouTube (21 июня 2022). Дата обращения: 9 июля 2022.
- ↑ Rich Harris: Futuristic Web Development (англ.). YouTube (19 октября 2020). Дата обращения: 3 августа 2021. Архивировано 12 декабря 2021 года.
- ↑ Harris, Rich. SvelteKit is in public beta (амер. англ.). svelte.dev (23 марта 2021). Дата обращения: 3 августа 2021.
- ↑ Accouncing SvelteKit 1.0 (англ.) (14 декабря 2022). Дата обращения: 16 декабря 2022.
- ↑ team, The Svelte. Announcing Svelte 4 (англ.). svelte.dev (22 июня 2023). Дата обращения: 8 августа 2023.
- ↑ TS to JSDoc Conversion (англ.). Hacker News (news.ycombinator.com) (10 мая 2023).
- ↑ Lordy, I did not expect an internal refactoring PR to end up #1 on Hacker News. ... (англ.). Hacker News (news.ycombinator.com) (10 мая 2023).
- ↑ Svelte 5 is alive (англ.). svelte.dev (22 октября 2024).
- ↑ Introducing runes (англ.). svelte.dev (20 сентября 2023).
- ↑ {#snippet ...} (англ.). svelte.dev.
- ↑ Harris, Rich. today is a big day for @sveltejs: i've joined @vercel to work on it full time! (амер. англ.). Twitter (11 ноября 2021). Дата обращения: 4 сентября 2022.
- ↑ trueadm/status/1640761270566633472 (англ.). X (formerly Twitter). Дата обращения: 30 сентября 2023.
- ↑ Svelte tutorial page (англ.). svelte.dev. Дата обращения: 6 июля 2022.
- ↑ Harris, Rich. Sapper: Towards the ideal web app framework (амер. англ.). svelte.dev (31 декабря 2017). Дата обращения: 29 ноября 2022.
- ↑ Svelte (амер. англ.). GitHub. Дата обращения: 3 августа 2021.
- ↑ Stack Overflow Developer Survey 2021 (амер. англ.). Stack Overflow. Дата обращения: 26 октября 2021. Архивировано из оригинала 25 июня 2022 года.
- ↑ State of JS 2020: Front-end Frameworks (англ.). 2020.stateofjs.com. Дата обращения: 26 октября 2021.
- ↑ Svelte • Cybernetically enhanced web apps (амер. англ.). svelte.dev. Дата обращения: 3 августа 2021.
- ↑ Websites using Svelte - Wappalyzer (англ.). www.wappalyzer.com. Дата обращения: 3 августа 2021.
- ↑ Your Profile, Your Home Experience (амер. англ.). yourhome.fb.com. Дата обращения: 1 декабря 2021.
- ↑ Home - Svelte Society (англ.). sveltesociety.dev. Дата обращения: 3 августа 2021.
Ссылки
- svelte.dev (англ.) — официальный сайт Svelte