Как устроена серверная сторона БЭМа, как с рендерингом на сервере, с ruby, какие трудности при развертывании? Я вот сейчас общаюсь и мне приводят аргумент, что это еще и лишний гемор на сервере с js и нагрузку на сервер увеличивает, что приводит к удоражанию.
Можете показать сайты которые полностью на стеке БЭМа. НЕ ЯНДЕКС, а то при слове БЭМ у всех Яндекс, много датацентров, много бабок на сервера и тп.
Между ruby и nginx (?) ставите тонкую прослойку на nodejs, которая занимается шаблонизацией, и в неё подключаете всякое БЭМовское. В будущем, по идее, в ruby можно оставить API, а всё динамическое про пользовательское перенести в код на nodejs.
Трудность при этом одна — надо досыпать к ruby еще и ноду при развертывании (не такая уж проблема).
В Яндекс тоже не каждый первый сайт в 100 датацентрах, бывают и мелкие проекты на 1-2-3 серверах и некоторые пользуются БЭМ-стеком. Правда, ruby нет)
как с нагрузкой у таких сайтов, которые на 2-3 серверах, как быстро рендерятся страницы, именно серверный рендеринг интересует
Боттлнек база данных, обычно. С ноджс бывает, что код написан плохо и подтекание, но только при такое чаще при отсутствии опыта или отсутствии вменяемых тестов.
Пока только экспериментирую https://gist.github.com/ilyar/3c34184d7290d7fa3f20d335e4584c4c
@c1n1k у нас на проекте используется связка
nginx, bem-stack, php (laravel)
. Интернет-магазин.Посмотрел время рендера товарной категории:
66-77ms
(в краткости что рендерится: вложенное меню, список товаров, шапка, подвал)Используется двух проходная шаблонизация. data -> bemtree -> bemjson -> bemhtml -> html. Вот что получается по времени на каждый этап (кэш не используется сейчас)
Это время из шаблонизации в самой ноде, без учёта прокидывания запросов через nginx.
Пока организовано так:
client(browser) <-> nginx <-> render <-> nginx <-> php
Т.е. на месте php вообще без разницы что будет.
Ruby, Python, Go, C++ и т.д.
В качестве
render
используем https://github.com/kompolom/bem-render-proxy PHP вообще про шаблоны ничего не знает, просто отдаёт данные в обговоренном в команде JSON формате. Дальше мы пропускаем этот ответ через рендер и отдаём назад в браузер в виде html.nginx
служит для внутреннего проксирования запросов и отдачи статичных файлов.Ещё можно прочитать этот туториал: https://habrahabr.ru/company/yandex/blog/337166/
Там правда немного другой подход.