【问题标题】:Does readFile caches the content?readFile 是否缓存内容?
【发布时间】:2016-07-14 23:00:45
【问题描述】:

说我有:

var fs = require('fs');
var a= fs.readFile(__dirname + '/someBigFile.txt', function(err, data) {
    console.log(data);
});

我注意到,如果首先读取 someBigFile 需要 2 秒,现在则需要几毫秒。当您多次阅读 Node.js 时,是否会发生一些内部缓存?例如:

for(var i =0; i < 10000; i++)
{
    var greet = fs.readFile(__dirname + '/greet.txt', "utf-8", function(err, data) {
    });
}

【问题讨论】:

  • 我的回答对你有用吗?

标签: node.js readfile fs


【解决方案1】:

所以我遇到了这个问题,但在不同的上下文中,我编写了一个节点 js 服务器,它读取网络驱动器上的文本文件,这对我来说本质上是只读的,但是,另一个应用程序偶尔会写入该文件并我想立即看到这些变化。尽管我可以看到文件已更改,但我的 Node js 应用程序一直在读取文件的陈旧版本。

我在阅读帮助后解决了它并添加了一个绕过系统本地文件缓存的“rs”https://nodejs.org/api/fs.html#fs_file_system_flags

   fs.readFile( path,  {"flag": 'rs'} , (err, data) => {} ) 

【讨论】:

  • 在文档中他们只提到了“r”、“r+”、“rs+”。那么你在哪里找到这个“rs”选项?
【解决方案2】:

没有。它可能是您的存储系统缓存(在某些情况下,它可能是操作系统或一些额外的软件缓存)。尝试将一些数据写入文件并尝试再次读取。

【讨论】:

    【解决方案3】:

    简单的答案是 - 这不是像 node.js 中那样的内部缓存。

    但是如果您多次读取相同的文件和目录,您可以将 fs 模块包装在 cached read-only version 中以加速事情,而事情并没有'不要在光盘上更改。

    【讨论】:

      【解决方案4】:

      fs 模块不会缓存它读取的内容。

      但是,如果您需要缓存版本并且(幸运地)尝试读取 JSON 文件缓存,您可以使用 require。它会读取和缓存。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-09-03
        • 2014-08-04
        • 1970-01-01
        • 2014-07-27
        • 1970-01-01
        • 2010-09-15
        相关资源
        最近更新 更多