Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript内存:返回新对象与结果中的存储_Javascript_Memory_Garbage Collection - Fatal编程技术网

JavaScript内存:返回新对象与结果中的存储

JavaScript内存:返回新对象与结果中的存储,javascript,memory,garbage-collection,Javascript,Memory,Garbage Collection,我一直想知道在返回新的临时对象时JavaScript中的内存使用和垃圾收集。假设我有一个返回多个值的函数: 函数foo{ 返回{a:0,b:1,c:2}; } 这将在每次调用函数时创建一个新对象。现在,如果我只对返回值感兴趣,我并不真正需要那个对象,所以我想到了一种不同的模式: 函数barresult{ 结果:a=0; 结果:b=1; 结果:c=2; } 理论上,bar应该比foo节省一些内存。事实上,我在现实世界的应用程序中多次看到这种模式,例如在three.js中,Ray类中有optiona

我一直想知道在返回新的临时对象时JavaScript中的内存使用和垃圾收集。假设我有一个返回多个值的函数:

函数foo{ 返回{a:0,b:1,c:2}; } 这将在每次调用函数时创建一个新对象。现在,如果我只对返回值感兴趣,我并不真正需要那个对象,所以我想到了一种不同的模式:

函数barresult{ 结果:a=0; 结果:b=1; 结果:c=2; } 理论上,bar应该比foo节省一些内存。事实上,我在现实世界的应用程序中多次看到这种模式,例如在three.js中,Ray类中有optionalTarget参数,因此函数不必在内部创建新向量,而是在目标上设置结果


然而,在摆弄了自定义基准之后,我在实践中找不到任何差异。我是Javascript基准测试的新手,所以问题是:你能创建一个令人信服的基准来显示差异吗?如果没有,这是否意味着垃圾收集器足够聪明,可以立即扔掉该对象?

是否确实存在性能问题,可以让API变得更复杂?提示:不是这里,我正在开发碰撞检测,所以是的,每一点都有帮助。另外,three.js示例还表明,人们确实做到了这一点。如果没有区别的话,让API更简单就更好了!始终保持API的简单性,在看到瓶颈之前不要使用任何技巧。然后,才更改API。如果你不能测量任何差异,那么你的用例中可能没有任何差异。使用现代JS引擎,对象/函数的创建速度非常快,特别是如果你总是使用相同的属性名称是的,引擎是智能的。我建议您首先通过关注API的可用性和简单性来编写程序,然后再研究优化,例如,从阅读一些关于它是如何工作的开始。