JAM-стэк — нищета на стероидах
Создавая сайты для малого бизнеса я сталкиваюсь с двумя крайностями. Но только я, как программист. Пользователи не сталкиваются, ведь нельзя столкнуться с тем чего для тебя не существует. Первая крайность — это когда клиент покупает за 50$ в месяц очередной хостинг для Wordpress. Человек не знает, что для Wordpress не нужен специальный хостинг, что такой специальный хостинг как правило хуже чем обычный хостинг и содержит кучу ограничений и стоит дороже. Вторая крайность — это когда используется JAM-стэк ради экономии. Но это экономия в плохом смысле этого слова, когда вы экономите на спичках, используя генератор для питания паяльника, от которого вы прикуриваете.
Говоря простым языком, JAM-стэк это куча костылей, использование которых выйдет боком всем, и прежде всего разработчику. Говоря техническим языком, JAM-стэк — это система интегрированных костылей для создания статических сайтов, с использованием SAAS для персистенции данных, а также значительной долей рендеринга на клиенте. Как делали статические сайты деды во времена своей молодости? Они писали простые HTML и CSS файлы и выкладывали их на хостинг по FTP. Как делали статические сайты наши отцы во времена своей буйной молодости? Они использовали Jekyll/Octopress, или любой из сотни генераторов статических сайтов, а полученные HTML и CSS файлы заливали на github pages через коммит, цепляли нужный домен. Некоторые тогда еще устраивали игрища с Disqus, потому что никак кроме игрищ я это назвать не могу, ведь пользователь с учёткой Disqus для оставления комментариев на вашем сайте исчезающе редок.
По балансу цена/затраты времени/сложность поддержки/ограничения в разработке это все было хорошим вариантом. Когда это переставало быть хорошим вариантом, покупался хостинг с php за пару баксов в месяц. Статические страницы ошаблонивались и обзаводились солидным функционалом полноценного сайта. И все было хорошо, а Енисей был из светлого пива. Но наши великие предки нашли нормальную работу и больше не страдают такой фигней. Теперь ей страдаем мы, и что же нам, молодым, смешливым, которым все легко, может предложить индустрия? Она гордо кровохаркает нам в лицо JAM-стэком, и говорит: «Не дождетесь!».
JAM-стэк — это новейший подход к созданию статических сайтов, и Gatsby.JS как один из пророков его. Gatsby — это самый яркий представитель жанра, возводящий насмешку над идеей статических сайтов в абсолют, переводя ее таким образом уже в разряд постиронии. Начнем с того, что Gatsby построен поверх React. Того самого React, который создавался для сайтов, где нужен компонентный подход, т.е. есть какие-то пользовательские интерфейсы, т.е. есть манипуляция с данными. Но у нас ведь статический сайт? Нет? Ретрограда ответ! Теперь это не проблема, у нас ведь есть сервисы типа Netlify и Contentful. Они предоставляют вам возможность через API делать AJAX запросы на их сервера и получать или записывать контент. Т.е. обычная база данных доступная через тридесятую задницу. Зато бесплатно. Первые N запросов, или пользователей, плюс лимит на размер блобов. Акция: уложись во все ограничения и получи оплату от заказчика* (*количество попыток ограничено).
Почему же на первый взгляд это выглядит привлекательно для бизнеса? Потому что React у всех на слуху, а Reactо-макак, которые еще вчера смогли войти в АйТи и готовых работать за копейки очень много. Для Reactо-макак это привлекательно потому что хоть какой-то способ поднять денег и набить портфолио. А сидя у мамки на шее можно литералли не платить ни за хостинг, ни за базу. По этой же причине сумневающемуся заказчику можно, увидев результат, прикинуть нужно ли оно ему вообще, и перестать отвечать на сообщения горе-фрилансера. Также заказчика и исполнителя объединяет достаточно малая компетентность, где первый не понимает как вообще все это работает, а второй не понимает, что сайты можно делать и по-другому.
В итоге, за редким исключением, о котором позже, проигрывают все. React и его производные это сложный инструмент с большой экосистемой и огромными проблемами, которые часто под силу только программистам на React, а не Reactо-макакам. 10 лет назад существовал популярный цирковой номер под названием «вытащить меню со всеми вложенными подменю за один SQL запрос». Теперь у нас есть его идейный наследник — вытащить все данные из нужного сервиса через один GraphQL запрос. Gatsby тянет за собой больше 500 зависимостей, и зная скорость обновления JS экосистемы можно смело сказать — через полгода что-то сломается, если вам понадобится новый сторонний виджет. Через 2 года вы будете заниматься черрипикингом версий, чтобы просто пересобрать это чудо в новый релиз. Да шучу я, шучу! Оно может и в первый раз не собраться по инструкциям с сайта. Если роскомнадзор в очередном порыве заботы о гражданах заблокирует ваш serverless database server, или просто сменит тариф, то развлекаться со всем этим опять вам. Кстати в отличие от традиционных статических сайтов билд сайта на Gatsby!== исходникам сайта. Так что стратегия бэкапа и развертывания этого чуда включая базу данных, да даже без неё, весьма занятная. Но самая мякотка начнется, если уродец созданный школьниками на кривых технологиях понадобится развивать. Поверьте, у PHP верхний предел ублюдочности legacy-кода гораздо ниже, что бы там про него не рассказывали!
Вам, как начинающему разработчику, JAM-стэк для коммерческих проектов использовать невыгодно. Во-первых, статик-сайты с минимальным функционалам — это самое дно фриланса со всем вытекающим и дурнопахнущим. Во-вторых, JAM-стэк — это прямая экономия на разработчике. Вы будете перерасходом своего времени компенсировать кривизну инструментов и сервисов, которая от вас не зависит и для борьбы с которыми у вас пока мало опыта. Тот что вы получите тут вам дальше не пригодится, потому что платежеспособные клиенты смогут вам оплатить хотя бы нормальный хостинг.
Так что же тогда подходящий случай для использования JAM-стэка в его современном виде? На мой взгляд, это ситуация когда ваш достаточно адекватный знакомый или родственник просит вас, React-программиста имеющего нормальную высокооплачиваему работу по своему профилю, сделать относительно простой сайт в свободное время. И вы используя существующие навыки сможете это быстро сделать, объяснив при этом человеку все недостатки такого подхода. И если он согласен, то тогда вперед. Иначе просто расскажите ему про Wordpress и wp2static.
Критика и возражения приветствуются. Но будьте добры указать стоимость и количество проектов, которые вы сделали Gatsby, Next.