如何在nodejs中缓存hbs渲染模板

时间:2012-07-24 12:34:05

标签: node.js handlebars.js express

只是一个简单的问题。如果我在nodejs中有一个非常简单的把手模板,很可能会渲染很多次,而不需要改变缓存结果的最佳方法,以确保每次都不需要渲染把手结果。

e.g:

<html>
  <head></head>
  <body>
    {{hostname}}
  </body>
</html>

1 个答案:

答案 0 :(得分:0)

Express没有任何原生支持缓存服务器端,只需添加标头/标签告诉客户端浏览器缓存x秒,以便缓存服务器端,您需要在每个路由中自己实现它。

我建议使用Redis或Memcached等密钥/值服务器来保存缓存,因为它们很简单,并且可以根据需要进行扩展。

在这个例子中,我将使用名为cachey的NPM模块(完全披露:我写了它)

var express = require("express");
var app = express();
var redis = require('redis').createClient();
var cachey = require('cachey')(redis);

app.get("/", function (req, res, next) {
  // Arg 1: Key to save data under in Key/Value Store
  // Arg 2: Time To Live (In Seconds)
  // Arg 3: getData Function (returning via async callback "cb") This will be called if data isn't already cached
  // Arg 4: doWork Function / When the data is returned from cache or getData(), this is called providing the data
  cachey.cache("renderedHomepage", 10, function(cb) {
    cb(null, app.render("home.html"));
  }, function(err, homepageHTML) {
    res.send(homepageHTML);
  });
});

这个例子说实话是毫无意义的,因为它只需要缓存,因为它需要更长的时间来生成数据,而不是从缓存中接收它,但希望它向您展示如何在NodeJS,Express和Redis中执行此操作的结构。 / p>

Cachey链接:NPM GitHub ExpressJS链接:API Docs