node.js - express.static() 是否在内存中缓存文件?

标签 node.js caching express

在 ExpressJS for NodeJS 中,我们可以执行以下操作:

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

提供所有静态 CSS、JS 和图像文件。我的问题是:

1) 当我们这样做时,Express 是自动将文件缓存在服务器的内存中,还是在每次提供资源时从硬盘读取?

2) 当我们这样做时,Express 是默认使用 ETag 将资源保存在客户端的硬盘上,还是只保存在客户端的内存上?

最佳答案

  1. 静态中间件不进行服务器端缓存。它允许您执行两种客户端缓存方法:ETag 和 Max-Age:

如果浏览器在页面中看到 ETag,它将缓存它。下次浏览器加载页面时,它会检查 ETag 编号是否更改。如果文件完全相同,它的 ETag 也是如此 - 服务器以 HTTP 304(“未修改”)状态代码进行响应,而不是再次发送所有字节并节省大量带宽。 Etag 默认是开启的,但是你可以像这样关闭它:

app.use(express.static(myStaticPath, {
  etag: false
}))

Max-age 会将 max-age 设置为某个时间量,因此浏览器只会在一天过后才请求该资源。

app.use(express.static(myStaticPath, {
  maxAge: '5000' // uses milliseconds per docs
}))

有关更多详细信息,您可以阅读此 article

  1. 默认情况下它在硬盘驱动器上,但有人可以使用 this 之类的东西

关于node.js - express.static() 是否在内存中缓存文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32154656/

相关文章:

node.js - 如何通过 typescript 使用 jest 配置

java - Hibernate Session.multiLoad L2 缓存问题

c# - HttpRuntime 缓存与静态字典/字段

javascript - Passport-socketio 破坏了 Passport 的实现?

javascript - 如何处理 NodeJS 模块中的 Assets

node.js - expressjs的API中如何识别不同平台

javascript - 带有 express Node js 服务器的 XMLhttpRequest

forms - Node Express 3.4.4 和 Jade 表单数据未定义

node.js - 发生此错误时 PM2 不会重新启动 Node JS 应用程序

java - 如何禁用 Ajax 缓存?