# JAMstack

Акроним JAM включает в себя JavaScript, API и Markup (разметку).

Site: <https://jamstack.org/>

JAMstack – это современная архитектура веб-разработки, основанная на клиентском JavaScript, повторно используемых API и предварительно созданной разметке.

### Почему JAMstack?

В каких ситуациях вам следует рассмотреть возможность использования JAMstack? Вот некоторые преимущества JAMstack, которые помогут вам определиться с выбором:

* Более высокая производительность. Поскольку веб-сайты на JAMstack представляют собой предварительно созданный HTML и ресурсы, их можно обслуживать через [CDN](https://www.8host.com/blog/uskorenie-dostavki-staticheskogo-kontenta-s-pomoshhyu-cdn/).
* Повышенная безопасность. Веб-сайты JAMstack менее подвержены уязвимостям сервера и базы данных.
* Низкая стоимость. Запустить сайт на JAMstack, как правило, стоит дешевле, чем на альтернативных стеках, поскольку JAMstack использует меньше ресурсов.
* Улучшение опыта разработчика. JAMstack устраняет тесную связь между бэкэндом и фронтендом приложения. Это значит, что вы можете использовать различные CMS и инфраструктуры контента. Также JAMstack упрощает использование сторонних сервисов, таких как [Algolia](https://www.algolia.com/) и [Netlify Forms](https://www.netlify.com/docs/form-handling/).

### Разработка на JAMstack

Чтобы проект можно было построить с помощью JAMstack, он должен соответствовать следующим критериям:

* JavaScript: все динамическое программирование в цикле запрос/ответ обрабатывается JavaScript, при этом оно полностью выполняется на клиенте. Здесь подойдет любой фреймворк для фронтенда, например [Vue.js](https://vuejs.org/), [React](https://reactjs.org/), [Angular](https://angular.io/) или даже базовый JavaScript.
* API: все процессы на стороне сервера или действия с базой данных абстрагируются в повторно используемые API, доступ к которым осуществляется через HTTP с помощью JavaScript. Это могут быть пользовательские или сторонние сервисы.
* Markup: шаблонная разметка предварительно собирается во время развертывания. Обычно для контентных сайтов это делается с помощью генератора сайтов (например, [GatsbyJS](https://gatsbyjs.org/), [Nuxt.js](https://nuxtjs.org/), или [Hugo](https://gohugo.io/) ), а для веб-приложений – с помощью инструментов сборки ([Webpack](https://webpack.js.org/) или [ParcelJS](https://parceljs.org/)).

Учитывая все вышесказанное, на JAMstack не получится реализовать следующие проекты:

* Проекты, основанные на серверной CMS типа WordPress, Drupal и т. д.
* Монолитные серверные веб-приложения, которые основаны на языках бэкенда типа PHP, Node и других подобных языках программирования.
* Одностраничные приложения (SPA, single page app), которые используют изоморфную визуализацию для сборки представлений на сервере во время выполнения.

При создании проекта на JAMstack помните:

* Весь сайт должен обслуживаться на CDN.
* Кэширование должно сразу аннулироваться.
* Все должно храниться на Git.
* Сборку разметки нужно автоматизировать.
