如何缓存node.js中的内部文件

How to cache internal files in node.js?

本文关键字:js 内部 文件 node 何缓存 缓存      更新时间:2023-09-26

我一直在使用路由功能,如以下一个来重复我的网站的总体布局(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 ?

除了视图,我们如何在静态公共目录中缓存其他资源,如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
})
在我看来,真的没有必要缓存静态文件,因为它们在异步读取文件时不会占用太多cpu。如果缓存它们,它们将会占用内存。