bem-site / bem-forum-content-ru

Content BEM forum for Russian speak users
MIT License
56 stars 6 forks source link

Сборка BEMTREE и BEMHTML без ядра #1049

Open kompolom opened 8 years ago

kompolom commented 8 years ago

Так как у нас сервер на ноде, возникает вопрос, насколько оправданно собирать bemtree бандлы с bem-xjst внутри. Кажется проще подключить их на старте приложения и досыпать шаблоны из собранных бандлов через compile. Что думаете?

tadatuta commented 8 years ago

compile — это затратная операция, эффективнее собрать все заранее и не тратить на это время в продакшене.

Guria commented 8 years ago

@tadatuta @miripiruni кажется этого уточнения не хватает в доке к bem-xjst

miripiruni commented 8 years ago

@Guria про это написано. См последнее предложение в этом разделе: https://github.com/bem/bem-xjst/blob/master/docs/ru/3-api.md#Добавление-шаблонов

kompolom commented 8 years ago

@miripiruni там предлагается использовать метод generate. Ок. Тот же подход но с методом generate имеет право на существование?

kompolom commented 8 years ago

прочитал внимательнее что там ядро подтягивается...

miripiruni commented 8 years ago

То, что compile «затратная» не так страшно страшно как вам кажется:

  1. Оно выполнится только в первый раз, когда приложение стартанёт. Если всё правильно написано.
  2. Если говорить про абсолютные числа: на пяти тысячах шаблонов (огромный сервис) compile будет выполнятся десять-двадцать миллисекунд.
kompolom commented 8 years ago

@tadatuta Кстати говоря, если собирать бандлы как обычно, там все шаблоны все равно через compile прогоняются. Так что мы теряем?

Guria commented 8 years ago

@miripiruni формулировка от @tadatuta делает акцент на медленности метода compile и не желательности его использования в продакшн, что заметно отличается от "Если вам нужно собрать все шаблоны в бандл, то эффективнее использовать метод generate."

А вот комментарий на счёт абсолютных величин полезен, спасибо.

Guria commented 8 years ago

@kompolom а ведь и правда, кроме того можно заставить compile использовать переданную функцию с шаблонами как есть, если правильно составить список аргументов.

kompolom commented 8 years ago

@Guria так все есть уже. Открываю собранный бандл:

/// -------------------------------------
/// --------- BEM-XJST Runtime End ------
/// -------------------------------------

var api = new BEMHTML({});
/// -------------------------------------
/// ------ BEM-XJST User-code Start -----
/// -------------------------------------
api.compile(function(match, once, wrap, block, elem, mode, mod, elemMod, def, tag, attrs, cls, js, bem, mix, content, replace, extend, oninit, xjstOptions, local, applyCtx, applyNext, apply) {
/* begin: /home/jenik/projects/hmfr/common.blocks/root/root.bemtree.js */
block('root').replace()(function() {
    var ctx = this.ctx,
Guria commented 8 years ago

Я про то же самое в рантайме. Билд шаблонов с помощью bem-loader: https://github.com/awinogradov/react-bl/blob/master/webpack.config.js#L5-L10 Использование compile в runtime https://github.com/awinogradov/react-bl/blob/master/src/provider/provider.js