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

时间:2015-08-22 09:46:50

标签: node.js caching express

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

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

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

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

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

1 个答案:

答案 0 :(得分:39)

  1. 静态中间件不进行服务器端缓存。它允许您执行两种客户端缓存方法:ETag和Max-Age:
  2. 如果浏览器在页面上看到 ETag ,它会缓存它。下次浏览器加载页面时,它会检查ETag编号的更改。如果文件完全相同,那么它的ETag也是如此 - 服务器以HTTP 304(“未修改”)状态代码响应,而不是再次发送所有字节并节省一堆带宽。 Etag默认处于开启状态,但您可以将其关闭:

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

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

    app.use(express.static(myStaticPath, {
      maxage: '2h'
    }))
    

    有关详细信息,请参阅此article

    1. 默认情况下,它位于硬盘驱动器上,但有人可以使用this
    2. 之类的内容