我正在开发一个需要基于url加载特定模块的项目,并且有很多模块,我想知道如果你不断需要模块会破坏内存吗?如果是,那么在每个模块执行后是否还要释放内存?或者有没有比要求模块更好的?比如fs.readFile然后评估一下吗?
答案 0 :(得分:0)
您可以根据需要加载任意数量的模块,但硬件限制仍然存在。如果你的内存会爆炸 - 将取决于每个模块的内存消耗,程序正在执行的任务以及你拥有的RAM量。如果您继续要求模块只是为了测试它是否中断,我相信它会在一定数量的模块加载到内存后中断。
当你使用内存密集型模块时,你可以将它们作为范围,即require()它们在一个函数中:确保它们在操作完成后从内存中卸载。
user=> (doc reduce-kv)
-------------------------
clojure.core/reduce-kv
([f init coll])
Reduces an associative collection. f should be a function of 3
arguments. Returns the result of applying f to init, the first key
and the first value in coll, then applying f to that result and the
2nd key and value, etc. If coll contains no entries, returns init
and f is not called. Note that reduce-kv is supported on vectors,
where the keys will be the ordinals.
user=> (reduce-kv (fn [m k v] (assoc m (.toLowerCase k) v)) {} {"A" 1 "B" 2})
{"a" 1, "b" 2}
// this code does image manipulation
function resizeImage(filename, cb) {
require('gm').open(filename).size(function (err, size) {
console.log(size);
// do something else with the image
cb(null);
// gm is queued for garbage collection
// after this operation
});
}
和eval不会比fs.readFile
好。
如果您已完成所有内存优化并且仍然没有足够的内存,则应用程序将中断,您将需要扩展您的计算机。