2017-03-08 113 views
0

根据this question express.static每次从硬盘读取文件。我想缓存服务器中的文件,因为它们不会改变,不会有太多内存可用。如何缓存express.static在内存中提供的文件?

因此,对于如下代码:

// serve all static files from the /public folder 
app.use(express.static(path.join(__dirname, 'public'))) 

// serve index.html for all routes 
app.get('*', (req, res) => { 
    res.sendFile(path.join(__dirname, 'public/index.html')) 
}) 

如何确保快递缓存文件通过在内存中express.static和res.sendFile服务?

+0

你可以看到这个:[缓存静态](http://stackoverflow.com/questions/32154656/does-express-static-cache-files-in-the-memory) –

+0

@BougarfaouiElhoucine这是我已经链接的问题。那里没有回答我的问题。 – vsjn3290ckjnaoij2jikndckjb

+0

还有一个问题:https://stackoverflow.com/questions/35068471/serving-static-files-in-express-is-it-cached。但最重要的答案与客户端缓存有关,而不是服务器端(这是我所追求的)。 – vsjn3290ckjnaoij2jikndckjb

回答

1

这通常不值得麻烦,因为操作系统会为您处理此问题。

所有现代操作系统将使用未使用的RAM作为"buffer cache" or "page cache"。最近使用的文件系统数据将被存储在RAM中,所以一旦文件被加载到存储器中,随后的读取将从存储器中被提供,而不是实际从磁盘读取。

依赖于此的优势在于,当流程内存消耗增加时,操作系统将自动清除缓冲区缓存中的数据,从而避免内存耗尽这些流程的风险(正如您可能当你在用户空间中实现某些东西时)。

0

简短的回答是你不能,至少不能用express.static()。您将需要使用第三方模块或编写自己的模块。另外,您可以在相应的问题跟踪器上打开一个功能请求问题,要求某种挂钩拦截调用以从磁盘读取请求的文件。

相关问题