将大对象作为纯参数或对象传递
Passing large object as a pure argument or object
我的问题很简单,veryLargeObj
会在两者中作为参考通过吗?如果是,除了对象创建之外,这两个示例之间是否有任何性能影响?
样本 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?
是的,它们将是完全相同的对象。例如,如果第一个模块导入了第二个模块并以某种方式相互交互,他们会看到导入的对象是 ===
.
正如您所指出的,唯一重要的开销是在创建对象时。 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);
其他模块也一样。
我的问题很简单,veryLargeObj
会在两者中作为参考通过吗?如果是,除了对象创建之外,这两个示例之间是否有任何性能影响?
样本 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?
是的,它们将是完全相同的对象。例如,如果第一个模块导入了第二个模块并以某种方式相互交互,他们会看到导入的对象是 ===
.
正如您所指出的,唯一重要的开销是在创建对象时。 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);
其他模块也一样。