首页 > 解决方案 > 将大对象作为纯参数或对象传递

问题描述

我的问题很简单,将veryLargeObjpass作为参考吗?如果是的话,除了创建对象之外,这两个示例之间是否有任何性能影响?

样品 1:

import veryLargeObj from './here'

function someFn(veryLargeObj){
    ...
}

样本 2:

import veryLargeObj from './here'

function someFn( {veryLargeObj} ){
    ...
}

此外,示例 2 参数是否会创建如下:

                           {"veryLargeObj": veryLargeObj}
normal property name  -------^^^^^^^^^^^^   ^^^^^^^^^^^^------- reference to large obj? 

标签: javascriptnode.jses6-modules

解决方案


是的,它们将是完全相同的对象。例如,如果第一个模块导入了第二个模块并以某种方式相互交互,他们会看到导入的对象是===.

正如您所指出的,唯一重要的开销是在对象创建时。一个 ES6 模块的顶层只会运行一次,即使它被导入了多个地方。

但我认为你的符号有点混乱:

import veryLargeObj from './here'

function someFn(veryLargeObj){
    ...
}

在这里,您没有在任何地方使用大对象 - 相反,您声明它someFn接受一个碰巧被命名的参数veryLargeObj。如果您想使用导入,请执行以下操作

import veryLargeObj from './here'

function someFn(){
    // use veryLargeObj here
}

或者

import veryLargeObj from './here'

function someFn(veryLargeObj){
    // use veryLargeObj here
}
someFn(veryLargeObj);

其他模块也一样。


推荐阅读