Размеры, структура и характеристики пакетов

Gatsby и Next.js - возможно, самые известные фреймворки для React.js. В то время как Gatsby - это всего лишь генератор статических сайтов, Next.js обладает множеством талантов. Но, в конце концов, мы также можем очень хорошо использовать Next.js в качестве генератора статических сайтов для React.

Помимо обоих лидеров, в мире генераторов статических сайтов появилась новая звезда: Astro. Раньше я хвалил инновационный и молодой SSG, в основном за его уникальные особенности. В то время как Next и Gatsby являются эксклюзивными для React.js, Astro можно использовать для Vue, React, Svelte и других. Новый SSG великолепен, когда речь идет о размерах пакетов и различных вариантах загрузки компонентов.

Но на этот раз речь идет не о том, чтобы отличаться, а о том, чтобы быть лучше или хуже по сравнению с лучшими собаками.

Для этого я создал такое же небольшое приложение в Gatsby, Next.js и Astro - вот результаты в различии, производительности и многом другом.

Маленькое «приложение»

Наш проект будет состоять из двух компонентов React.js.

Оба компонента настроены на прямую загрузку - не используется ленивая загрузка в виде загрузки по запросу или загрузка, когда основной поток освобождается. Следовательно, это честная игра.

Первый компонент - это простой счетчик, использующий useState:

Второй - это простой отображаемый список:

Я знаю, что вы хотите сначала увидеть размеры пакетов - вот и все. После этого мы еще что-нибудь посмотрим.

Размеры связки

Давайте перейдем к самому интересному: размеры пакетов, которые во многом определяют производительность вашего сайта. Несмотря на то, что все три генератора статических сайтов используют один и тот же код React под капотом, существуют различия в размерах пакетов. Особенно важно здесь Astro.

Его философия - частичное увлажнение, то есть страница состоит из отдельных компонентов. Эти компоненты приводят к отправке только необходимого кода для их отображения в браузере. С другой стороны, Next и Gatsby - это фреймворки, ориентированные на React. Другими словами:

Next.js, Gatsby и другие JavaScript-фреймворки не могут поддерживать частичную гидратацию, потому что они представляют весь ваш веб-сайт / страницу как единое приложение JavaScript.
- Astro Documentation

Я не хочу здесь долго говорить. Вот результаты необходимого кода, который отправляется браузеру:

Next.js:    206 kilobytes 
Gatsby:     185 kilobytes
Astro:      134 kilobytes

Как видите, Astro поставляет намного меньше кода, что приводит к более быстрой странице в целом.

Итак, можете ли вы просто переместить приложение Next.js или Gatsby в Astro для этого? Давайте выясним, устраивает ли это структура Astro-проекта по сравнению с лучшими собаками.

Структура приложений

На самом деле, по моей оценке, три генератора статических сайтов больше похожи, чем различаются. Страницы с уникальными URL-адресами основаны на компонентах в каталоге pages. Лучше всего хранить компоненты и их принадлежности в каталоге components. Перенос всего приложения из одного генератора статических сайтов в другой не должен быть слишком сложным, если не используются эксклюзивные функции.

Поначалу я стал жертвой различия, так как Astro обрабатывает компоненты React. Их нельзя хранить в .js файлах, как в Gatsby или Next. Вместо этого нам нужно использовать .jsx или .tsx файлы - но это уже все.

Тот факт, что Astro является генератором статических сайтов общего назначения, не эксклюзивным для React, можно увидеть, когда речь идет о таких вещах, как выборка данных при запуске производственного пакета. Да, я имею в виду получение данных для статического рендеринга на страницах - например, размещение статического блога и загрузка его с помощью Headless CMS.

Такие функции требуют индивидуального решения в каждом генераторе статических сайтов. В то время как Next.js и Gatsby используют для этого более React-метод, Astro для этого использует свои специальные .astro файлы / компоненты. При использовании Astro

Технические особенности

Когда дело доходит до выбора генератора статических сайтов, производительность - это еще не все, на что мы должны обращать внимание. Поскольку Next и Gatsby уже хорошо известны сообществу, я хочу немного больше сосредоточиться на Astro - конечно, в сравнении с другими.

Как я уже упоминал, Astro не придерживается принципа React. Я не вижу в этом проблемы, потому что

Я уже рассказывал, как переключить Next.js на Preact. Тем не менее, насколько я могу судить, частичное переключение невозможно. Если вы переключитесь на Preact, все ваше приложение будет использовать Preact. Похоже, то же самое можно сказать и о Гэтсби.

Astro, с другой стороны, получает здесь огромную выгоду от своей философии. Нет проблем использовать React.js и Preact одновременно для разных компонентов. Таким образом, нет необходимости в полном переключении. Используйте Preact, чтобы ускорить работу вашего приложения, используйте React.js, если вы не можете переключить этот компонент на Preact.

В то время как переключение на облегченную альтернативу React в Next и Gatsby требует некоторой настройки, Astro поддерживает Preact из коробки, если вы решите инициализировать свой проект с помощью обеих библиотек (CLI позволяет вам выбрать это). Все, что вам нужно изменить, - это импорт поверх вашего .jsx файла.

Кроме того, я не мог написать эту статью, не воздав должное различным способам загрузки компонентов в клиентскую сборку Astro. В то время как Next.js и Gatsby действительно предлагают отложенную загрузку, Astro поддерживает еще пару способов загрузки, если это необходимо вашему компоненту. Это упрощает создание высокопроизводительных пользовательских интерфейсов на основе компонентов.

Поскольку я не хочу только хвалить Astro, давайте выскажем хорошее мнение о каждой лучшей собаке.

Что мне действительно нравится в Gatsby, так это его поддержка по умолчанию GraphQL и множество безголовых CMS. Если бы я хотел перенести свой блог WordPress на статический сайт, я бы обратился к Гэтсби. Тем не менее, трудно сравнивать это преимущество с другими, поскольку Next.js предназначен не только для статических страниц, а Astro еще очень молод.

Говоря о Next.js, фреймворк является явным победителем, когда дело доходит до особого сценария: вы хотите сделать свою страницу как можно более статичной, но все же требовать, чтобы некоторые страницы активно отображались на сервере.

Next.js сияет своей возможностью отображать некоторые страницы на сервере, а другие статически обслуживать по причинам производительности и нагрузки на сервер. Кроме того, сложные функции, такие как статическая регенерация, помогают объединить лучшее из обоих миров - статических страниц и активно отображаемых на стороне сервера.

Спасибо за чтение!

Подробнее о Next.js и Astro:







Больше контента на plainenglish.io