【问题标题】:Does express.static() cache files in the memory?express.static() 是否在内存中缓存文件?
【发布时间】:2015-11-16 05:52:33
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 1.请注意,即使 express 不这样做(我不确定),您的操作系统实际上也可能这样做。

标签: node.js caching express


【解决方案1】:
  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之类的东西

【讨论】:

  • 所以它每次都尝试从服务器硬盘读取...浏览器呢?浏览器关闭后浏览器是否还记得资源?
  • 如果缓存仍然存在。
  • Dan D.......我想你是说资源确实存储在客户端的硬盘中......在什么情况下缓存持久而不持久?
  • @ChongLipPhang 用户是否清除了浏览器历史记录?它们是否以私有/隐身模式运行(即没有缓存)?他们是否使用明确禁用缓存的开发工具?缓存文件是否过期?这取决于用户。他们的客户端如何处理缓存超出了服务器的控制范围(设置过期长度除外)。
  • 哈哈,他的 ol' Ram Disk 方法。几年前我用它来加速 MSSQL 数据库。如果您采用这种方法,您将需要一个观察者在 ramdisk 和持久存储之间进行同步。
猜你喜欢
  • 1970-01-01
  • 2010-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-24
  • 2017-02-07
相关资源
最近更新 更多