只是一个简单的问题。如果我在 nodejs 中有一个非常简单的把手模板,它可能会被渲染很多次,而无需更改缓存结果的最佳方法,以确保它不需要每次都渲染把手结果。
例如:
<html>
<head></head>
<body>
{{hostname}}
</body>
</html>
只是一个简单的问题。如果我在 nodejs 中有一个非常简单的把手模板,它可能会被渲染很多次,而无需更改缓存结果的最佳方法,以确保它不需要每次都渲染把手结果。
例如:
<html>
<head></head>
<body>
{{hostname}}
</body>
</html>
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 中执行此操作的结构。