【发布时间】:2017-05-16 12:13:14
【问题描述】:
我正在使用一个处理文件的程序,我可以做一些事情,比如重命名它们,读取它们的内容等等。
今天我将它初始化如下:
return new Promise((resolve, reject) => {
glob("path/for/files/**/*", {
nodir: true
}, (error, files) => {
files = files.map((file) => {
// properties like full name, basename, extension, etc.
});
resolve(files);
});
});
因此,我读取特定目录的内容,返回数组中的所有文件,然后使用 Array.map 遍历数组并更改具有属性的对象的路径。
有时我会处理 200.000 个文本文件,所以这会成为一个问题,因为它消耗了太多的 RAM。
所以,我想用延迟加载的构造函数替换..但我以前从未这样做过...所以我正在寻找帮助。
这是我的代码:
class File {
constructor(path) {
this.path = path;
}
extension() {
return path.extname(this.path);
}
// etc
}
所以,我的主要问题是:我应该只返回属性的评估,还是应该替换它?像这样:
extension() {
this.extension = path.extname(this.path);
}
我知道这是一种权衡。我将通过 cpu 使用来交换内存。
谢谢。
【问题讨论】:
-
不使用类怎么样?你不能将文件数据存储在简单的对象中吗?
-
我将文件存储在对象数组中,其中一个是对象。我想更改类以提高内存使用率。
-
@FXAMN 为什么你认为类会减少内存使用?
-
@FXAMN 课程对您没有多大帮助。我建议使用没有原型的普通对象(使用
Object.create(null, properties)创建)。但是话又说回来,您永远不会在视图中看到 200k 元素,最好使用延迟加载,甚至将视图中的 only 元素保留在内存中,丢弃其他元素(意思是,仅保留路径字符串和丢弃其他统计属性)。 (顺便说一句,我不知道谁投了反对票,这确实是一个合法的问题,所以我投了反对票。) -
如果您使用this glob library,您可以考虑使用
match事件和pause方法来创建读取n 匹配项并返回它们的迭代器/生成器(一个一个)
标签: javascript node.js cpu ram