Генерация статических сайтов
Речь пойдет о генерации многостраничных статических сайтов, причем именно на Ноде.
Искал по этой теме на этом сайте, ничего не нашел, поэтому буду исходить из того что тема эта здесь новая, краткое введение... Итак, суть идеи. Если информация на сайт поступает только от администраторов сайта, а не от пользователей, то зачем вообще серверная часть? Только для того, чтобы взять контент страницы и обернуть его в шаблон. Для комментов например ставим дискус. Итак, на ноде у нас окружение для сборки, темплейты, конктент (например, в XML-файлах). Даем команду на сборку, и у нас в директории сборки весь сайт в виде статики - html, css, js, img. В продакшне это раздает например голый nginx, или вообще пушим все это в какой-нибудь CDN. Сгенерированный сайт может иметь такие плюшки как: обычные страницы типа "о компании" и "контакты", блог с RSS, тэгами, постраничкой, файл robotx.txt, sitemap.xml со всеми страницами, каталог товаров с фильтрами и т. д. Для генерации чего-то специфического пишем плагины на js под ноду, поэтому функционал ограничен только фантазией автора. Есть много разных генераторов статических сайтов, в том числе под ноду - https://www.staticgen.com (фильр по языку javascript) Собственно, вопрос - кто-нибудь здесь использует что-то подобное? Если да, то что? Ну и вообще можно разное обсудить по этой теме... |
В общем ковырнул я бегло почти все генераторы по ссылке выше - и все они вообще не то. Либо слишком специализированные (для блога, для генерации HTML-книг, и т.д.), либо что-то вообще не так, ничего не понравилось в общем. Я не увидел ни в одном удобной генерации сайтов любой сложности.
Зато открыл для себя такой мегарулезнейший шаблонизатор как Nunjucks (очень похож на jinja2 или Django из Питона). В общем решил написать свой генератор. Получается очень неплохо, на асинхронах сборка идет максимально распараллелено, будет блин быстро. Если дойдет до состояния когда не стыдно будет показать - покажу. Статика - невероятно фановая штука. Вопрос с производительностью снимается вообще. Вопрос с серверными ошибками снимается вообще. А если учесть что можно прикрутить всякие микросервисы на ресте и веб-интерфейс к генератору - то становится вообще весело. Ну как вам в целом концепт? |
На счёт шаблонизатора, тоже использовал Nunjucks, но потом пробовал Jade, и сейчас пишу намного меньше кода, так что, рекомендую.
|
Jade - уж больно специфический. Сходу сложно сказать, чем грозит, но как-то не вдохновляет идея отойти от написания чистого html. Первое, что приходит на ум - не будет автокомплишна, проверки синтаксиса, фолдинга и прочих плюшек, поэтому для меня - сразу нет.
|
1) автокомплишна должен быть, как минимум аля еммет работает и для jade
2) проверки синтакс будетиса синтексис html? :D Вот этот шаблон: mixin menu(items) nav.menu each item in items a.menu__item(href=item.link) = item.title На любой странице икнлудится include menu - var menuItems = [ { link: '#1', title: 'item #1' }, { link: '#1', title: 'item #1' }, { link: '#1', title: 'item #1' } ]; +menu(menuData); <nav class="menu"> <a class="menu__item" href="#1">Item #1</a> <a class="menu__item" href="#2">Item #2</a> <a class="menu__item" href="#3">Item #3</a> </nav> |
Надо признать, что конечно выглядит очень чисто, прикольно и фаново. Но вот чутье подсказывает, что в реальных проектах могут возникнуть некоторые не очевидные сразу нюансы.
Надо будет поиграться на досуге, посмотреть как оно. |
> синтексис html?
Да, а почему нет? IDE заточена под html, знает как разобрать его текст в целостную семантику, и потом уже на базе этой семантики реализует кучу плюшек, очень полезных в профессиональной разработке. В контексе Jade я не могу сказать, насколько оно надо, но скорее всего - надо |
Цитата:
|
Ну так используют те, кто уже поигрались на досуге и посмотрели как оно ))
|
Max Power, используют те, кто не хочет делать лишнюю работу, чистый html мертв, как и css, все это генерируется. Стоит лишь попробовать.
|
Цитата:
|
> чистый html мертв, как и css, все это генерируется
Да, что-то в этой мысли все-таки есть. Надо будет попробовать |
Max Power, рекомендую глянуть не на Jade, а на Snakeskin. Он гораздо мощнее.
|
Оказывается в WebStorm Jade поддерживается по дефолту! https://www.jetbrains.com/webstorm/h...te-engine.html
Попробовал, работает. Короче, надо брать! ) > Max Power, рекомендую глянуть не на Jade, а на Snakeskin. Он гораздо мощнее. Надо глянуть, спасибо. Плагина к WebStorm как я понял, нет? Вообще идея таких движков кажется логичной - более человеко-удобное представление семантики HTML. |
Цитата:
Для базовой подсветки синтаксиса могу кинуть File Type c расписанными ключевыми словами. Умеет взять папку, вотчить её, выполнять шаблоны и класть результат куда-то ещё -- как раз та самая генерация HTML. Ну и плагины ко всяким сборщикам/таскраннерам. Из css-preprocessor'ов советую Stylus. |
Не сразу обратил внимание - у проекта 4 звезды на гитхабе против 10К у Jade. Так как я человек в серверном JS новый, пожалуй пока остановлюсь на Jade, поближе к мейнстриму.
|
Цитата:
|
В общем, комрады, дела такие
Решил я не выпендриваться и собирать все галпом как все. Оно работает, оно гибкое. Но конечно изначальная идея была не в этом. Изначальная идея была в том, что сайт представляет из себя целостную семантическую структуру статических файлов, которые имеют отношения и зависимости. У меня есть в голове понимание, как оно должно быть, но не потяну сейчас опенсорс-проект такого масштаба. А глоток - это всего лишь набор задач, в его терминологии не описывается эта семантическая структура, поэтому надо держать все в голове, и рулить руками, на каждом шагу обруливая грабли. Но опять же, зато максимально гибко. Я собрал небольшой сайтик, прикрутил микросервис. Кстати, вот этот микросервис, он в опенсорсе, и конечно на Ноде: https://github.com/i-erokhin/node-wh...aster/index.js (на досуге как-нибудь дооформлю, главное что сейчас все работает). Естественно, прелесть еще и в том, что этот микросервис - отдельный проект, он максимально обособлен. В больших проектах и командах например можно отдать микросервис на аутсорс. Или вообще в опенсорс, и даже если сообществу он будет неинтересен - можно позвать это сообщество попилить баги/дофигачить плюшки за бабло. Пришло окончательное понимание крутизны статики. На ней можно сделать намного больше, чем предполагает сегодня средний разработчик. Например, на вышеуказанном сайтике на досуге сделаю блог с фильрами/поиском/сортировками/тегами, rss-каналом, авто-репостами во всякие фейсбуки и твиттеры. Динамика для этого не нужна. Для комментов поставлю дискус. Потом сделаю личный кабинет для клиентов. Сам личный кабинет - это тоже статика, обособленный SPA на ангуляре, бэкенд - (типа) микросервис. При этом на всех страницах сайта понадобится показывать панель авторизации/ссылку на личный кабинет с некоторыми плюшками. Что показывать - будет решать клиентский js, который будет получать инфу из client-side data storage, типа я Вася, я авторизован, etc... То есть по-прежнему все статика. С точки зрения технологий это сайт класса hi-end. Самый быстрый, самый секьюрный и самый масштабируемый. Сейчас он работает на VDS за 5 баксов, если вдруг соберусь дать рекламу со всех страниц вконтакта, фесбука, яндекса и гугла одновременно - закину все в Akamai CDN через Selectel например. Хоть 100500 миллиардов запросов в секунду, только бабло за трафик в топку подкидывай. Ну и конечно javascript.ru - один из отличных примеров сайта, где концепт статика+микросервисы будет скорее всего лучшим концептом. В общем, статика рулит. Любой крутой web-девелопер рано или поздно придет к статике, ибо это конректно точка. PS: Спасибо комрадам за то что подсадили на Jade в этом топике выше, это лучший из шаблонных движков, с которыми я работал. Топикстарт писал Python-разработчик, а это уже пишет Node.js-разработчик. Как бы это ни было смешно, Jade сыграл в этом не последнюю роль. |
Часовой пояс GMT +3, время: 16:39. |