javascript - 如何在node.js中缓存内部文件?

标签 javascript node.js caching express pug

我一直在使用如下路由功能来重复我网站的总体布局(A.jade):

exports.overview = function(req, res, next) { 
  res.render('A', {
     main: jade.renderFile('./views/B.jade')
  });
};

但是,当我尝试缓存 View 时:

app.use(express.static(__dirname + '/public'));
app.enable('view cache');

,好像只有A.jade被缓存了,而B.jade是实时渲染的。我知道这一点是因为我在更新 B.jade 时不需要重新启动服务器。

我可以在此设置中缓存 B.jade 吗?

除了 View 之外,我们如何在静态公共(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。如果你缓存它们,它们会耗尽内存。

关于javascript - 如何在node.js中缓存内部文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33328586/

相关文章:

.net - 使用OutputCache和GetVaryByCustomString为多个路径缓存相同的内容

javascript - 使用 ServiceWorker 缓存 iframe 请求

用于维护海量数据的 Java 缓存框架

javascript - Ajax 请求被 onClick 请求覆盖

javascript - 使用空格作为千​​位分隔符

javascript - 识别 Javascript 字符串中连续的十六进制字符 block

php - SNMP 监控和 Web 界面

javascript - Qt WebView控件如何查看错误?

javascript - 使用 TypeScript 将 JSON(来自 Sentry)转换为 HTML

node.js - Meteor picker 服务器端路由器使用 express 中间件