Как рендерить шаблоны?

Обычный случай, когда рендерят шаблон в express.js методом res.render('template', args), но недавно нарвался на такой способ:

Сначала подключают
var templatePath = require.resolve('../views/view.jade');
var templateFn = require('jade').compileFile(templatePath);

а потом используют
res.write(templateFn(args));
res.end();

Причем скорость рендера с помощью res.render() в среднем от 50 до 25 мс., а вторым способом от 23 до 7 мс.
В чем разница и почему один быстрей второго в 3 раза?
  • Вопрос задан
  • 868 просмотров
Решения вопроса 1
Staltec
@Staltec
Node.js разработчик
Скорость рендера может отличаться потому, что в первом случае express не запущен в production режиме, и не кеширует шаблоны, всякий раз читая их с диска на каждый запрос. От сюда и набегает оверхед. Т.е. при изменении шаблона на диске, вам не надо перезапускать процесс чтобы увидеть изменения в ответе сервиса - это удобно при разработке, но естественно работает медленнее.

В приведённом же вами примере второго способа, шаблон кешируется в памяти процесса в templateFn(). Т.е. при изменении шаблона на диске, у вас ничего не изменится в выдаче пока не перезапустите процесс приложения. По-сути реализуется сразу production mode.

UPD
Попробуйте запустить express-приложение с "обычным" способом рендера задав переменную окружения
$ export NODE_ENV=production
и сравните скорость.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы