Javascript-форум (https://javascript.ru/forum/)
-   Node.JS (https://javascript.ru/forum/node-js-io-js/)
-   -   Генерация статических сайтов (https://javascript.ru/forum/node-js-io-js/60169-generaciya-staticheskikh-sajjtov.html)

Max Power 15.12.2015 09:12

Генерация статических сайтов
 
Речь пойдет о генерации многостраничных статических сайтов, причем именно на Ноде.

Искал по этой теме на этом сайте, ничего не нашел, поэтому буду исходить из того что тема эта здесь новая, краткое введение...

Итак, суть идеи. Если информация на сайт поступает только от администраторов сайта, а не от пользователей, то зачем вообще серверная часть? Только для того, чтобы взять контент страницы и обернуть его в шаблон. Для комментов например ставим дискус.

Итак, на ноде у нас окружение для сборки, темплейты, конктент (например, в XML-файлах). Даем команду на сборку, и у нас в директории сборки весь сайт в виде статики - html, css, js, img. В продакшне это раздает например голый nginx, или вообще пушим все это в какой-нибудь CDN.

Сгенерированный сайт может иметь такие плюшки как: обычные страницы типа "о компании" и "контакты", блог с RSS, тэгами, постраничкой, файл robotx.txt, sitemap.xml со всеми страницами, каталог товаров с фильтрами и т. д.

Для генерации чего-то специфического пишем плагины на js под ноду, поэтому функционал ограничен только фантазией автора.

Есть много разных генераторов статических сайтов, в том числе под ноду - https://www.staticgen.com (фильр по языку javascript)

Собственно, вопрос - кто-нибудь здесь использует что-то подобное? Если да, то что? Ну и вообще можно разное обсудить по этой теме...

Max Power 16.12.2015 08:22

В общем ковырнул я бегло почти все генераторы по ссылке выше - и все они вообще не то. Либо слишком специализированные (для блога, для генерации HTML-книг, и т.д.), либо что-то вообще не так, ничего не понравилось в общем. Я не увидел ни в одном удобной генерации сайтов любой сложности.

Зато открыл для себя такой мегарулезнейший шаблонизатор как Nunjucks (очень похож на jinja2 или Django из Питона).

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

Статика - невероятно фановая штука. Вопрос с производительностью снимается вообще. Вопрос с серверными ошибками снимается вообще. А если учесть что можно прикрутить всякие микросервисы на ресте и веб-интерфейс к генератору - то становится вообще весело.

Ну как вам в целом концепт?

tourniquet 17.12.2015 11:38

На счёт шаблонизатора, тоже использовал Nunjucks, но потом пробовал Jade, и сейчас пишу намного меньше кода, так что, рекомендую.

Max Power 18.12.2015 10:09

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

Lemme 18.12.2015 10:45

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>

Max Power 18.12.2015 12:38

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

Надо будет поиграться на досуге, посмотреть как оно.

Max Power 18.12.2015 12:50

> синтексис html?

Да, а почему нет?

IDE заточена под html, знает как разобрать его текст в целостную семантику, и потом уже на базе этой семантики реализует кучу плюшек, очень полезных в профессиональной разработке.

В контексе Jade я не могу сказать, насколько оно надо, но скорее всего - надо

tourniquet 18.12.2015 15:15

Цитата:

Сообщение от Max Power (Сообщение 400384)
Надо признать, что конечно выглядит очень чисто, прикольно и фаново. Но вот чутье подсказывает, что в реальных проектах могут возникнуть некоторые не очевидные сразу нюансы.

Надо будет поиграться на досуге, посмотреть как оно.

а с чего вы решили что в реальных проектах никто не использует Jade?

Max Power 18.12.2015 17:12

Ну так используют те, кто уже поигрались на досуге и посмотрели как оно ))

Lemme 18.12.2015 20:10

Max Power, используют те, кто не хочет делать лишнюю работу, чистый html мертв, как и css, все это генерируется. Стоит лишь попробовать.

tourniquet 18.12.2015 20:33

Цитата:

Сообщение от Max Power (Сообщение 400441)
Ну так используют те, кто уже поигрались на досуге и посмотрели как оно ))

могу сказать что в самом начале я скептически отнёсся к Jade-у, но когда попробовал, понял, что назад уже пути нету )))) Зачем писать лишний код, когда можно сконцентрироватся на что-то другое?

Max Power 23.12.2015 08:35

> чистый html мертв, как и css, все это генерируется

Да, что-то в этой мысли все-таки есть. Надо будет попробовать

trikadin 23.12.2015 08:41

Max Power, рекомендую глянуть не на Jade, а на Snakeskin. Он гораздо мощнее.

Max Power 23.12.2015 08:55

Оказывается в WebStorm Jade поддерживается по дефолту! https://www.jetbrains.com/webstorm/h...te-engine.html

Попробовал, работает. Короче, надо брать! )

> Max Power, рекомендую глянуть не на Jade, а на Snakeskin. Он гораздо мощнее.

Надо глянуть, спасибо. Плагина к WebStorm как я понял, нет?

Вообще идея таких движков кажется логичной - более человеко-удобное представление семантики HTML.

trikadin 23.12.2015 09:25

Цитата:

Сообщение от Max Power
Надо глянуть, спасибо. Плагина к WebStorm как я понял, нет?

Планируем. Проект, несмотря на достаточно долгую жизнь, развивается силами, по сути, только создателя, и джавистов, готовых написать плагин по WS, пока не нашлось :С

Для базовой подсветки синтаксиса могу кинуть File Type c расписанными ключевыми словами.

Умеет взять папку, вотчить её, выполнять шаблоны и класть результат куда-то ещё -- как раз та самая генерация HTML. Ну и плагины ко всяким сборщикам/таскраннерам.

Из css-preprocessor'ов советую Stylus.

Max Power 23.12.2015 09:36

Не сразу обратил внимание - у проекта 4 звезды на гитхабе против 10К у Jade. Так как я человек в серверном JS новый, пожалуй пока остановлюсь на Jade, поближе к мейнстриму.

kobezzza 24.12.2015 17:30

Цитата:

Не сразу обратил внимание - у проекта 4 звезды на гитхабе против 10К у Jade.
Не в звёздах счастье :)

Max Power 10.02.2016 16:32

В общем, комрады, дела такие

Решил я не выпендриваться и собирать все галпом как все. Оно работает, оно гибкое. Но конечно изначальная идея была не в этом. Изначальная идея была в том, что сайт представляет из себя целостную семантическую структуру статических файлов, которые имеют отношения и зависимости. У меня есть в голове понимание, как оно должно быть, но не потяну сейчас опенсорс-проект такого масштаба.

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

Я собрал небольшой сайтик, прикрутил микросервис. Кстати, вот этот микросервис, он в опенсорсе, и конечно на Ноде: 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.