【问题标题】:What are the performance/memory differences between passing Javascript objects of different sizes?传递不同大小的 Javascript 对象之间的性能/内存差异是什么?
【发布时间】:2020-08-16 15:07:36
【问题描述】:

在 Javascript 中,假设我有两个对象 x 和 y。 y 通过解构是 x 的子集。如果我将其中一个对象多次传递给另一个函数,性能/内存影响是什么?最初我认为 y 因为它包含较少的数据,但在 Javascript 中,对象是通过引用传递的 - 所以我是否正确地假设任何一个对象都会影响我正在调用的函数的内存?

【问题讨论】:

  • JavaScript 是按值调用,更好地描述为按对象共享调用。这些值恰好是非原始类型的“引用”(实现细节)。因此,所有对象都需要相同数量的(无关紧要的)时间来传递作为参数;不需要“复制”或额外的空间。
  • @user2864740 解构数组和对象的目的仅仅是确保代码简洁和职责分离(即不使用不需要的函数/变量)吗?
  • 这绝对是一个用途,是的。此外,由于重组(?)(到一个新对象)创建一个新对象,这在控制副作用的情况下也可能有用。这也可以在没有更新/简洁的解构语法的情况下完成。

标签: javascript performance dictionary memory ecmascript-6


【解决方案1】:

对象在 Javascript 中作为指针传递给函数。因此,传递一个指向大对象的指针并不比传递一个指向小对象的指针花费更多,并且当它作为函数参数传递时,不会生成对象的副本。在任何一种情况下(大对象或小对象),它只是传递一个指向对象的指针,而不是实际传递对象。而且,无论传递给它的对象是大还是小,被调用函数的内存使用量都不会改变。

现在,如果函数对它传递的对象进行显式复制(如Object.assign() 或解构),那么函数的内存使用将受到对象复制的大小的影响,我认为这完全合乎逻辑。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-29
    • 2015-11-02
    • 1970-01-01
    • 2011-02-27
    相关资源
    最近更新 更多