Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js express.static()是否在内存中缓存文件?_Node.js_Caching_Express - Fatal编程技术网

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

Node.js express.static()是否在内存中缓存文件?,node.js,caching,express,Node.js,Caching,Express,在针对NodeJS的ExpressJS中,我们可以执行以下操作: app.use(express.static(__dirname + '/public')); 为所有静态CSS、JS和图像文件提供服务。我的问题是: 1) 当我们这样做时,Express是自动将文件缓存在服务器的内存中,还是每次提供一个资源时都从硬盘中读取 2) 当我们这样做时,默认情况下使用ETag的Express是将资源保存在客户机的硬盘上,还是仅保存在客户机的内存上 静态中间件不进行服务器端缓存。它允许您执行两种客户端缓

在针对NodeJS的ExpressJS中,我们可以执行以下操作:

app.use(express.static(__dirname + '/public'));
为所有静态CSS、JS和图像文件提供服务。我的问题是:

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

2) 当我们这样做时,默认情况下使用ETag的Express是将资源保存在客户机的硬盘上,还是仅保存在客户机的内存上

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

    app.use(express.static(myStaticPath, {
      etag: false
    }))
    
    Max ageis会将Max age设置为某个时间量,因此浏览器只会在一天后请求该资源

    app.use(express.static(myStaticPath, {
      maxAge: '5000' // uses milliseconds per docs
    }))
    
    有关更多详细信息,请阅读此

  • 默认情况下,它在硬盘上,但有人可以使用

  • 1.请注意,即使express没有这样做(我不确定),您的操作系统实际上也可能会这样做。因此,它每次都尝试从服务器硬盘读取数据…浏览器如何?当浏览器关闭时,浏览器是否仍然记得资源?如果缓存仍然存在。Dan D……我想你是说资源确实存储在客户端的硬盘中。。。在什么情况下缓存会持久而不会持久?@Chonglippang用户是否清除了他们的浏览器历史记录?它们是否在私密/匿名模式下运行(即无缓存)?他们是否使用显式禁用缓存的开发工具?缓存文件是否已过期?这取决于用户。他们的客户端处理缓存的方式超出了服务器的控制范围(除了设置expires的长度)。哈哈,他用了一种很好的Ram磁盘方法。几年前我用它来加速MSSQL数据库。如果采用这种方法,则需要一个监视程序来在ramdisk和持久性存储之间进行同步。