Стоит ли предварительно скомпилировать руль 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 ответ
Да, предварительная компиляция ваших шаблонов может быть хорошей идеей. Причина в том, что использование шаблона обычно состоит из двух шагов:
- анализ
- Генерация строки из данных и проанализированного шаблона
Разбор дорогая операция. Он состоит из идентификации токенов (специальных слов) и построения древовидной структуры. Например:
{{#with author}}
<h2>By {{firstName}} {{lastName}}</h2>
{{/with}}
Этот блок можно представить как дерево с родителем with
Скажите и несколько детей "<h2>By "
, firstname
, lastName
а также "</h2>"
,
Когда вы прекомпилируете шаблон, вы генерируете код, который является результатом синтаксического анализа и генерации этой древовидной структуры, поэтому каждый раз, когда вы используете этот код, вам не нужно анализировать и генерировать дерево. Вы экономите много циклов процессора.
Логика та же, что и в том, следует ли вам синхронно читать некоторые файлы при запуске сервера или читать их каждый раз. Если вы сначала читаете файлы шаблонов, вы выполняете меньше операций ввода-вывода, но используете больше памяти для хранения содержимого этих шаблонов. То же самое касается парсинга.
Многие из нас делают, чтобы определить, какие ресурсы будут использоваться часто (шаблоны, как правило, относятся к этой категории), кэшировать их в памяти и оставить остальное для чтения по требованию. Это означает, что вы не можете просто изменить шаблон и обновить свой сайт. Вам необходимо создать версию вашего сайта, а для того, чтобы сделать обновление, вам нужно убить процесс Node и перезапустить его. Будет ли это хорошей идеей для вашего сайта, будет зависеть от того, как вы организовали развертывание.
Что касается комбинирования Jade и Handlebars, это не выглядит хорошей идеей, потому что это более дорогая операция - рендеринг двух разных шаблонов и потому что вы можете предварительно скомпилировать только один из них. Вы не можете предварительно скомпилировать их оба, потому что один шаблон зависит от результата другого. В вашем случае "исходный код" для шаблона Jade зависит от результата применения шаблона Handlebars.