Обзор на Gatsby.js

Gatsby.js — это framework для создания сайтов. Он позволяет создавать очень быстрые сайты с высокими показателями Performance. Это генератор статичных страниц, который использует React для создания компонентов и Node.js для создания страниц. На GitHub проект получил 54 000 звезд начиная с 2016 года. В этом посте мы расскажем, почему он такой быстрый и какие особенности в нем есть.

Обзор на Gatsby.js

Статическая генерация против динамической

Большинство сайтов используют динамический подход к отрисовке страниц. Это означает, что когда пользователь заходит на страницу, то происходит запрос на бекенд, в котором, в свою очередь, происходит запрос к базе данных, потом ответ из базы данных обрабатывается и отправляется пользователю в браузер.

Static Site Generation отрисовывает все запросы заранее, что позволяет исключить этот долгий путь в динамическом варианте и значительно ускорить загрузку. Это, к сожалению, порождает ситуацию, в которой любое изменение сайта требует его пересборки. Но при этом стоить отметить, что можно создавать динамические компоненты на сайте, которые будут запрашивать актуальную информацию на бекенде во время взаимодействия пользователя с сайтом.

Обзор на Gatsby.js

Такой подход можно назвать винтажным. Так как с этого подхода все начиналось.

Немного занудства. Вообще, динамическую отрисовку стоит разделить на Client-side rendering и Server-side rendering. Вопрос в том, где будет создаваться HTML-документ, — в браузере или на сервере. В зависимости от задач проекта будут использоваться разные подходы, при этом их можно миксовать. Например, для сложных приложений Static Site Generation и Server-side rendering не подойдут, лучше использовать Client-side rendering. Но это тема другой статьи уже, вернемся к Gatsby.

Обзор на Gatsby.js

Посмотрим, какие еще вещи позволяют добиваться такой производительности.

База на React

Это означает, что вся экосистема React может использоваться для создания сайта. А она на данный момент доминирует во всем мире. И любой React-разработчик разберется с Gatsby за один день. А если он знает Next, так ему хватит одного часа.

Производительность React кроется в виртуальном дереве DOM, которое изменяет при необходимости лишь те части веб-страницы, которые действительно изменились. Например, во время перехода между страницами страницы не будут целиком заново загружаться, а загрузится только часть, которая должна поменяться.

Обзор на Gatsby.js

Предварительная выборка (pre-fetching)

Это техника, которая используется для повышения производительности сайта или приложения. Она заключается в предварительной загрузке контента или данных, которые, вероятно, будут запрошены в будущем. Это происходит в фоновом режиме после основной загрузки страницы. Gatsby видит, какие страницы может посетить пользователь на текущей странице, и загружает данные, которые могут потребоваться, если он будет переходить на них. Предварительная выборка может существенно улучшить пользовательский опыт и увеличить скорость загрузки сайта.

Подобный подход позволяет осуществлять очень быстрый переход между страницами. Это может занимать сотые миллисекунды и происходить мгновенно.

Gatsby использует WebP

Это формат изображения, разработанный компанией Google. Он был создан с целью улучшения качества изображений при меньшем размере файла, чем у традиционных форматов, таких как JPEG и PNG. Он экономичнее на 25-34%. На данный момент он поддерживается уже всеми браузерами.

Разделение кода (code splitting)

Это техника в разработке программного обеспечения, при которой основной код приложения разделяется на меньшие, отдельные части или блоки. Это позволяет загружать приложение только с необходимым кодом для конкретной страницы или функции, а не загружать вcю кодовую базу сразу. Это приводит к улучшению производительности, поскольку приложение загружает только необходимый код для действий текущего пользователя. Разделение кода также помогает лучше организовать и поддерживать код, поскольку каждый блок кода может быть разработан, протестирован и обновлен независимо.

Система управления контентом (CMS)

Gatsby может забирать данные из любых CMS. Есть официальные плагины от основных производителей, которые позволяют очень быстро установить связь.

Обзор на Gatsby.js

Благодаря этому можно осуществить легкий переезд. Например, если у вас старый и медленный WordPress.

База данных

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

Документация

У Gatsby прекрасная документация и большое англоязычное коммьюнити. Любой вопрос можно решить и найти ответ на GitHub.

Обзор на Gatsby.js

Недостаток Gatsby

Нужно пересобирать сайт при каждом обновлении. Это означает, что обновления на сайте появятся с задержкой в 5-20 минут в зависимости от объема сайта. При больших объемах нужно будет заменить генерацию страниц с Static Site Generation на Server-side rendering или Deferred Static Generation, который будет помедленнее, но все равно быстрее, чем решения на PHP.

Итог

Gatsby.js представляет собой мощный инструмент для разработки высокопроизводительных веб-сайтов. Этот статический сайтогенератор, основанный на React и Node.js, обеспечивает эффективную предварительную генерацию страниц, что приводит к быстрой загрузке и оптимальной производительности. Интеграция с GraphQL, обширной системой плагинов, а также возможностью разделения кода делают Gatsby.js привлекательным выбором для разработчиков, стремящихся к созданию современных и быстрых сайтов.

Да, мы делаем сайты на Gatsby и не только на нем!

Другие интересные наши работы

99
4 комментария

для блогов норм, для какого-то сервиса не представляю, зачем ему какие-то статич. страницы, если ежеминутно меняется набор данных... Т.е. я про что: "Gatsby.js — это framework для создания сайтов..." ДЛЯ БЛОГОВ! )))

И что его нельзя использовать для создания сайта типа электронной коммерции со списком товаров и цен?

Вы плохо прочитали. Можно делать динамический компанент внутри статичной страницы. А еще там есть Server-side rendering для страниц.

https://www.gatsbyjs.com/docs/how-to/rendering-options/using-server-side-rendering/