【问题标题】:does size of argument in a javascript function affects its performance?javascript 函数中参数的大小会影响其性能吗?
【发布时间】:2015-04-28 18:47:52
【问题描述】:

我有一个键值对,其中包含五个键,每个键的值都是由数千个对象组成的巨大数组。我可以在将其传递给函数时对其进行子集化,也可以在函数中传递整个数组。

例如:

keyVal ={"first_array": Object[1000],
"second_array": Object[1000],
"third_array": Object[1000],
"fourth_array": Object[1000]
}
var first_arr = keyVal.first_array

两种可能:

function notSubsettedArgs(keyVal){
$.each(keyVal.first_array,function(i,item){
//some processing});
}

function subsettedArgs(first_array){
$.each(first_array,function(i,item){
//do some processing});
}

这对 javascript 有影响吗?
函数是否需要加载参数大小?
谢谢

【问题讨论】:

  • 你试过测试了吗?
  • 由于数据似乎会在相关函数调用之前和之后存在,因此可能没有区别,无论哪种方式您都在传递“指针”。
  • 使用jsperf 运行比较测试。
  • @dandavis 是否像将参数作为指针传递?
  • 是的,就是这样。不要对语义太具体,否则我们会整天都在这里,但是当你在 js 中传递一个对象时,你本质上是向该对象传递了一个 ref。如果处理没有阻止垃圾收集,则 cpu/ram 使用应该是恒定的。

标签: javascript function arguments subset


【解决方案1】:

JavaScript 通过将引用的副本传递给数组/对象来将数组和对象传递给函数,因此传递整个事物可能没问题。只要知道如果你在函数中改变它,这些改变就会影响你原来的数组/对象!

如果这是浏览器代码而不是服务器(例如 Node.js)代码,您可以使用 jsperf.com 进行测试。小心点。 It's easy to do JS benchmarks wrong!

【讨论】:

  • "JavaScript 通过引用将数组和对象传递给函数" 更准确地说,JavaScript 通过 传递所有内容,但值是引用到一个对象。这与按引用传递的实际含义不同。
  • 谢谢。我试图使语言更精确:“JavaScript 通过将引用的副本传递给数组/对象来将数组和对象传递给函数”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-09
相关资源
最近更新 更多