当前位置: 首页 > 面试题库 >

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

罗烨霖
2023-03-14
问题内容

在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
}))

“最大寿命” 是将最大寿命设置为一定的时间,因此浏览器仅会在一天后请求该资源。

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

有关更多详细信息,您可以阅读本文

  1. 默认情况下,它的硬盘驱动器上,但有人可以使用类似于此


 类似资料:
  • 问题内容: 我阅读了JVM内存模型,并对以下内容感到困惑: JVM是否将.class实例存储在其内存中。如果是,则在哪个区域。 就像在加载类后,JVM生成了机器级代码,然后开始执行机器代码指令,然后仅在堆上创建对象,并填充了方法区域。 perm gen等区域存储字节码还是机器级代码? 烫发与方法面积 我真的很感谢您对此主题的任何帮助。 谢谢。 问题答案: 1)文件将在加载时存储在permgen存储

  • 问题内容: 它可能是实现细节,但是对于Oracle和IBM JDK而言,至少是对已编译模式进行了缓存,还是作为应用程序开发人员我们需要自己对已编译模式进行缓存? 问题答案: 我不认为结果会被缓存,并且代码或文档中也没有这种行为的证据。自己实现这样的缓存(当然)是比较琐碎的,但是我对这样的缓存很有用的用例感兴趣。 回覆。下面的注释和String.split(),有一种不同的方法,即代码采用简单的1或

  • 问题内容: 在工作面试中,一名招聘人员问我“休眠状态中有多少个缓存级别?”。 所以我描述了1级和2级。 他说的是正确的,但也有一个三级缓存,例如,缓存某些不经常更改的表的结果,例如“ CURRENCY”或“ COUNTRY”,然后每隔“ 12/24 /您想要什么时间”重新加载这些表。 我搜索了一下,但是什么也没找到。那么,实际上是否存在第三级缓存还是仅仅是某种功能,如果是,该功能的名称是什么,我该

  • 是否有可能在内存中实现缓存以避免完全堆消耗? 我的spring boot java应用程序使用内存缓存,过期策略设置为1小时(咖啡因库用于缓存目的)。在此之后,所有缓存实例都处于旧代,需要收集完整的GC。现在,当XMX设置为10GB时,我可以看到经过几个小时的测试,我的缓存包含大约100k个实例,但在heap中(正好是旧一代),我可以找到数百万个缓存对象的实例。是否有可能在内存中使用缓存并避免这种

  • 我注意到,每次我运行一个新作业时,它所花费的时间比我再次启动它时长20%左右? 如果一个作业运行多次,flink是否缓存一些结果并重用它们?如果是,我如何控制这一点? 我想测量我的任务运行了多长时间,但每次我重新运行它们时,速度都比以前快。

  • void is_cached(string template, [string cache_id]) This returns true if there is a valid cache for this template. This only works if caching is set to true. 在指定模板的缓存存在是返回真。只有在缓存设置为真时才可用。 Example 13-18