Весь стек технологий БЭМ заточен под node js. А если сервер это не node js, какие есть практики использования БЭМ? Может есть практики скрещивания node js с остальным server side. Если у кого был такой опыт поделитесь пожалуйста.
Весь стек технологий БЭМ заточен под node js. А если сервер это не node js, какие есть практики использования БЭМ? Может есть практики скрещивания node js с остальным server side. Если у кого был такой опыт поделитесь пожалуйста.
v8
в используемый на сервере язык. Минус этой схемы — скорость.BEMHTML
илиBH
. Например, XSL обладает теми же выразительными возможностями. Минус в необходимости самостоятельно писать шаблоны для блоков из bem-библиотек.@varya не могу найти, у тебя есть этот вопрос в копилке ЧаВо?
Спасибо. Наиболее привлекательным кажется первый вариант, но он также кажется самым сложным. Это уже смахивает на клиент сервисную архитектуру.
@ak-671 Первый вариант очень простой, на самом деле, только звучит (наверное) сложно.
@ak-671 Спрашивайте, если будут вопросы по реализации.
Если создавать с нуля звучит не очень сложно. Но, когда есть громадный легаси представляющий из себя смесь многих технологий это станет проблемой. После предложения выпилить нативный backend ui и создать слой backend ui на node js, меня сочтут сумашедшим ковбоем.
Если есть
в любом случае быстро сделать не получится. Я бы в такой ситуации начал с использования БЭМ методологии на имеющихся технологиях.
Да, наверно это самое разумное решение
@ak-671 у нас 1, но немного измененная схема.
client <-> nginx <-> yourCurrentServer <-> node.js (занимается только шаблонизацией)
На практике работает хорошо, но все чаще приходим к мысли (сегодня уже стремимся к этому) что нужно перелазить на 1 вариант предложенный @tadatuta
@ak-671 @tadatuta Если рассматривать 1 вариант, как происходит передача сгенеренных шаблонов из node.js в yourCurrentServer?
@adinvadim Сначала важно убедиться, что мы используем правильную терминологию. Что подразумевается под «сгенеренными шаблонами»? Если речь о получении бандла вида
page-name.bemhtml.js
, который собирается с помощью ENB, то это должно происходить на этапе разработки и к продакшену не имеет отношения (на сервер деплоится заранее собранный бандл).Его можно собирать на локальной машине разработчика или в CI (например, travis, jenkins, etc).
А если речь о результатах шаблонизации, то это просто HTML-строка.
Схема приблизительно следующая:
nginx
(любой другой proxy, либо непосредственноyourCurrentServer
) принимает запрос от пользователяyourCurrentServer
для запроса агрегирует данные (ходит в БД, читает с файловой системы и т.п.)yourCurrentServer
, либо уже в node.js (зависит от предпочтений разработчиков) превращаются в BEMJSONrequire('path/to/bundle.bemhtml.js').BEMHTML.apply(bemjson)
Этот вызов возвращает HTML-строку, которую нода возвращает в качестве ответаyourCurrentServer
-у.@ak-671 На цепочке
browser → nginx →1→ node →2→ yourServer
— в сервер приезжает запрос пользователя как есть (1 === 2), что-то с ним происходит в рамках запроса пользователя на сервере, но вместо отдачи html, отдается bemjson. На цепочкеyourServer →1→ node →2→ nginx → browser
обратно улетает bemjson (1), в ноде мы из него делаем html (2) и дальше отдаем пользователю через nginx в браузер.Аналогичный bemjson можно хранить в виде бандлов.
Супер, спасибо! вроде разобрался
@tadatuta а можно где-то подглядеть пример этой реализации (client <-> nginx <-> node.js (frontent) <-> yourCurrentServer (backend)). к примеру если бэкенд на php.
@ijakparov нууу... в текущей формулировке вопрос слишком общий. если взять, к примеру, https://github.com/bem/bem-express, поднять его на каком-нибудь сокете, в который направить nginx, а из контроллеров express-а дергать API
yourCurrentServer
, то именно такое и получится. готов помочь с какими-то более конкретными вопросами, а так непонятно, что именно нужно рассказать.