如何在 node.js 中缓存内部文件?
How to cache internal files in node.js?
我一直在使用如下路由功能来重复我网站的总体布局(A.jade):
exports.overview = function(req, res, next) {
res.render('A', {
main: jade.renderFile('./views/B.jade')
});
};
但是,当我尝试缓存视图时:
app.use(express.static(__dirname + '/public'));
app.enable('view cache');
,好像只有A.jade被缓存了,而B.jade是实时渲染的。我知道这一点是因为我在更新 B.jade.
时不必重新启动服务器
我可以在这个设置中缓存 B.jade 吗?
除了视图,我们如何在静态public目录中缓存其他资源,如CSS、JS、媒体文件等?
创建缓存变量
var cachedFiles = {};
exports.overview = function(req, res, next) {
var file = './views/B.jade';
cachedFiles[file] = cachedFiles[file] || jade.renderFile('./views/B.jade');
res.render('A', {
main: cachedFiles[file]
});
};
如果您需要向渲染函数添加变量,请使用 memoize
npm install memoizee
然后
var memoize = require('memoizee');
var memoizeRenderFile = memoize(jade.renderFile);
exports.overview = function(req, res, next) {
res.render('A', {
main: memoizeRenderFile('./views/B.jade', {v:100})
});
};
你可以使用这样的方式轻松缓存你的静态文件,注意你需要 npm 安装下面的包
var staticCache = require('express-static-cache');
app.use(staticCache(__dirname + '/public'), {
maxAge: 365 * 24 * 60 * 60
})
IMO,真的没有必要缓存静态文件,因为它们在异步读取文件时不会占用 cpu 太多空间。如果缓存它们,它们会占用内存。
我一直在使用如下路由功能来重复我网站的总体布局(A.jade):
exports.overview = function(req, res, next) {
res.render('A', {
main: jade.renderFile('./views/B.jade')
});
};
但是,当我尝试缓存视图时:
app.use(express.static(__dirname + '/public'));
app.enable('view cache');
,好像只有A.jade被缓存了,而B.jade是实时渲染的。我知道这一点是因为我在更新 B.jade.
时不必重新启动服务器我可以在这个设置中缓存 B.jade 吗?
除了视图,我们如何在静态public目录中缓存其他资源,如CSS、JS、媒体文件等?
创建缓存变量
var cachedFiles = {};
exports.overview = function(req, res, next) {
var file = './views/B.jade';
cachedFiles[file] = cachedFiles[file] || jade.renderFile('./views/B.jade');
res.render('A', {
main: cachedFiles[file]
});
};
如果您需要向渲染函数添加变量,请使用 memoize
npm install memoizee
然后
var memoize = require('memoizee');
var memoizeRenderFile = memoize(jade.renderFile);
exports.overview = function(req, res, next) {
res.render('A', {
main: memoizeRenderFile('./views/B.jade', {v:100})
});
};
你可以使用这样的方式轻松缓存你的静态文件,注意你需要 npm 安装下面的包
var staticCache = require('express-static-cache');
app.use(staticCache(__dirname + '/public'), {
maxAge: 365 * 24 * 60 * 60
})
IMO,真的没有必要缓存静态文件,因为它们在异步读取文件时不会占用 cpu 太多空间。如果缓存它们,它们会占用内存。