你能在节点中需要无限模块吗?

时间:2015-07-21 08:06:03

标签: node.js

我正在开发一个需要基于url加载特定模块的项目,并且有很多模块,我想知道如果你不断需要模块会破坏内存吗?如果是,那么在每个模块执行后是否还要释放内存?或者有没有比要求模块更好的?比如fs.readFile然后评估一下吗?

1 个答案:

答案 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好。

如果您已完成所有内存优化并且仍然没有足够的内存,则应用程序将中断,您将需要扩展您的计算机。