Простой секрет более быстрого сайта — просто отдавать меньше.
К сожалению, современная веб-разработка движется в противоположном направлении — к большему. Больше JavaScript, больше функций, больше движущихся частей и, в конечном счёте, больше сложности, необходимой для поддержания всего этого в рабочем состоянии.
Сегодня я с радостью публично представляю Astro: новый тип генератора статических сайтов, который обеспечивает молниеносную производительность и современный developer experience. При проектировании Astro мы заимствовали лучшее из наших любимых инструментов и добавили несколько собственных инноваций, включая:
- Bring Your Own Framework (BYOF): Создавайте сайт с React, Svelte, Vue, Preact, web components или просто HTML + JavaScript.
- 100% статический HTML, без JS: Astro рендерит всю страницу в статический HTML, удаляя весь JavaScript из финальной сборки по умолчанию.
- Компоненты по требованию: Нужен JS? Astro может автоматически гидратировать интерактивные компоненты, когда они становятся видимыми на странице. Если пользователь их не видит — он их не загружает.
- Полный набор возможностей: Astro поддерживает TypeScript, Scoped CSS, CSS Modules, Sass, Tailwind, Markdown, MDX и любые ваши любимые npm-пакеты.
- Готовность к SEO: Автоматические sitemap, RSS-ленты, пагинация и коллекции снимают боль с SEO и синдикации.
Этот пост отмечает первый публичный бета-релиз Astro. На этой ранней стадии всё ещё ожидаются недостающие функции и баги. До официального релиза 1.0 остаётся ещё несколько месяцев, но уже сегодня в продакшене работают несколько быстрых сайтов, построенных на Astro. Мы будем рады вашей ранней обратной связи по мере движения к релизу v1.0 позже в этом году.
Начало работы
Начать новый проект в Astro легко:
# create your projectmkdir new-project-directorycd new-project-directorynpm init astro
# install your dependenciesnpm install
# start the dev server and open your browsernpm run devКак работает Astro
Astro работает во многом как генератор статических сайтов. Если вы когда-либо использовали Eleventy, Hugo или Jekyll (или даже серверный веб-фреймворк вроде Rails, Laravel или Django), Astro покажется вам знакомым.
В Astro вы собираете сайт из UI-компонентов вашего любимого JavaScript-фреймворка (React, Svelte, Vue и т.д.). Astro рендерит весь сайт в статический HTML во время сборки. Результат — полностью статический сайт, из финальной страницы удалён весь JavaScript. Монолитное JavaScript-приложение не требуется — только статический HTML, который загружается в браузере как можно быстрее, независимо от того, сколько UI-компонентов вы использовали для его генерации.
Конечно, иногда клиентский JavaScript неизбежен. Карусели изображений, корзины покупок и поисковые строки с автодополнением — лишь несколько примеров того, что требует JavaScript в браузере. Именно здесь Astro особенно силён: когда компоненту нужен JavaScript, Astro загружает только этот компонент (и его зависимости). Остальная часть сайта остаётся статическим, лёгким HTML.
В других full-stack веб-фреймворках такой уровень оптимизации на уровне компонентов был бы невозможен без загрузки всей страницы в JavaScript, откладывая интерактивность. В Astro такая частичная гидратация встроена в сам инструмент.
Вы даже можете автоматически откладывать компоненты, загружая их только после появления на странице, с модификатором :visible.
Этот новый подход к веб-архитектуре называется островной архитектурой. Мы не придумали этот термин, но Astro, возможно, довёл технику до совершенства. Мы уверены, что подход HTML-first с JavaScript только по необходимости — лучшее решение для большинства контентных сайтов.
В яму успеха
Хорошо спроектированная система делает правильные вещи лёгкими, а неправильные — раздражающими (но не невозможными)
Jeff Atwood,
Falling Into The Pit of Success
Плохую производительность часто представляют как провал разработчика, но мы вежливо не согласны. Во многих случаях плохая производительность — это провал инструментов. Создавать медленный сайт должно быть сложно.
Главный принцип дизайна Astro — вести разработчиков к тому, что Rico Mariani назвал «ямой успеха». Наша цель — чтобы каждый сайт был «быстрым по умолчанию», сохраняя при этом знакомый современный developer experience.
Собирая сайт в статический HTML по умолчанию, Astro затрудняет (но никогда не делает невозможным 😉) создание медленного сайта.
Долгосрочная устойчивость
Astro создан командой open-source разработчиков за Snowpack и Skypack, с дополнительным вкладом сообщества.
Astro бесплатен и всегда будет бесплатным. Это open-source проект под лицензией MIT.
Нам важно строить более устойчивое будущее для open-source. В то же время нам нужно поддерживать разработку Astro в долгосрочной перспективе. Для этого нужны деньги (одних пожертвований недостаточно).
Нас вдохновляет ранний успех проектов вроде Tailwind, Rome, Remix, Ionic и других, экспериментирующих с долгосрочной финансовой устойчивостью поверх Open Source. В следующем году мы изучим, как создать устойчивый бизнес для поддержки полностью бесплатного open-source Astro на годы вперёд.
Если ваша компания так же в восторге от Astro, как и мы, мы будем рады услышать вас.