【问题标题】:Memory usage requiring parts of JavaScript files需要部分 JavaScript 文件的内存使用情况
【发布时间】:2018-04-15 17:55:34
【问题描述】:

假设有一个文件mod.js 包含很多函数和变量,其中大部分是使用module.exports 导出的。

如果我只想使用这些导出函数之一,在这些选项之间:

const mod = require("./mod");
mod.function();

const {function} = require("./mod");
function();

内存使用量是否存在敏感差异?节点是否会删除mod.js 中未引​​用的元素以节省内存?

【问题讨论】:

    标签: javascript node.js memory


    【解决方案1】:

    加载模块会将模块中的所有代码加载到服务器内存中。它不知道可以调用或不调用什么代码,也不会删除任何未使用的代码。

    通常,服务器上代码的内存使用是无关紧要的(服务器端内存,代码只加载一次)。如果您不想加载您不使用的代码,那么您需要重构您的模块,以便您只能加载实际需要的代码。这是节点模块的要点之一。加载你需要的,不要加载你不需要的。将模块设计为有用的代码包以一起加载。

    内存使用量是否存在敏感差异?

    通常不用于服务器,除非你有一个巨大的模块。模块通常不应该足够大,以至于它们仅仅通过加载它们的代码就会在服务器端内存中产生很大的影响。如果是,那么它们可能应该被分解成更小的块,以便根据需要加载。

    node 是否会删除 mod.js 中未引用的元素以节省内存?

    不,它没有。

    【讨论】:

    • 我同意refactor your modules so that you can only load code that is actually needed 的引用,但这对我来说听起来不切实际。一些例子:loadash,一个你只需要一些东西的加密库,等等......
    • @lilezek - 好吧,您要求的是 node.js 没有的功能。我正在向您描述它是如何工作的以及您的选择是什么。如果某个特定的第三方模块确实以这种方式存在问题,那么您可以找到其他一些不太麻烦的解决方案,将所需的代码从模块中复制到您自己的模块中,等等......这些是你的选择。除非您处于内存受限的服务器环境中(例如在 Raspberry Pi 或其他设备上),否则您确定您的服务器确实存在代码占用过多内存的问题吗?
    猜你喜欢
    • 1970-01-01
    • 2011-09-18
    • 1970-01-01
    • 2014-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-14
    • 1970-01-01
    相关资源
    最近更新 更多