Стоит ли предварительно скомпилировать руль jade + для использования на стороне сервера?

Я смешиваю нефрит с рулем, чтобы мне не приходилось писать HTML, и у меня есть хороший синтаксис для данных, связанных с данными.

Например, это может быть шаблон для заголовка, header.handlebars.jade

html
  {{#with user}}
  {{if user.username}}
  header Welcome back, {{username}}
  {{/if}}
  {{/with}}

Мне интересно, если я должен предварительно скомпилировать этот шаблон с Jade, а затем руль, когда я использую его на стороне сервера на node.js? Если я этого не сделаю, я в основном собираю этот шаблон 2 раза (сначала нефрит, затем руль) по каждому запросу.

Я не совсем уверен, играет ли это какую-либо роль, но кажется, что оба jade.compile а также Handlebars.compile являются синхронными функциями, что означает, что они блокируют другие запросы, пока происходит компиляция.

1 ответ

Решение

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

  1. анализ
  2. Генерация строки из данных и проанализированного шаблона

Разбор дорогая операция. Он состоит из идентификации токенов (специальных слов) и построения древовидной структуры. Например:

{{#with author}}
  <h2>By {{firstName}} {{lastName}}</h2>
{{/with}}

Этот блок можно представить как дерево с родителем with Скажите и несколько детей "<h2>By ", firstname, lastName а также "</h2>",

Когда вы прекомпилируете шаблон, вы генерируете код, который является результатом синтаксического анализа и генерации этой древовидной структуры, поэтому каждый раз, когда вы используете этот код, вам не нужно анализировать и генерировать дерево. Вы экономите много циклов процессора.

Логика та же, что и в том, следует ли вам синхронно читать некоторые файлы при запуске сервера или читать их каждый раз. Если вы сначала читаете файлы шаблонов, вы выполняете меньше операций ввода-вывода, но используете больше памяти для хранения содержимого этих шаблонов. То же самое касается парсинга.

Многие из нас делают, чтобы определить, какие ресурсы будут использоваться часто (шаблоны, как правило, относятся к этой категории), кэшировать их в памяти и оставить остальное для чтения по требованию. Это означает, что вы не можете просто изменить шаблон и обновить свой сайт. Вам необходимо создать версию вашего сайта, а для того, чтобы сделать обновление, вам нужно убить процесс Node и перезапустить его. Будет ли это хорошей идеей для вашего сайта, будет зависеть от того, как вы организовали развертывание.

Что касается комбинирования Jade и Handlebars, это не выглядит хорошей идеей, потому что это более дорогая операция - рендеринг двух разных шаблонов и потому что вы можете предварительно скомпилировать только один из них. Вы не можете предварительно скомпилировать их оба, потому что один шаблон зависит от результата другого. В вашем случае "исходный код" для шаблона Jade зависит от результата применения шаблона Handlebars.

Другие вопросы по тегам