Javascript对象函数参数性能
Javascript object function parameters performance
我阅读了一些线程,了解当参数是对象时,javascript函数参数传递是如何工作的;我注意到传递方法有很多混乱,至少在术语上是这样:通过引用传递、通过复制引用传递等等。这个问题不是关于这个传递方法是如何命名的,也不是关于它在内部是如何工作的,而是涉及到这个问题的某种答案。
我有一些非常大的对象,作为参数传递给函数;我需要了解,对于每个函数调用(我有很多调用),对象传递是否意味着对象的某个副本,因此内存消耗、计算工作量和内存泄漏风险与传递的对象大小成正比,或者它是否以非大小成比例的后果方式传递。
由于在函数中更改对象的属性会更改外部范围中的对象,但更改对象本身不会,我认为函数内部用于存储和"引用"参数的内存并不取决于其大小,因为对象似乎不会被复制,但我需要确定它
抱歉我的英语解释不好!
EDIT:答案在某种程度上涉及对JS传递模式的深入了解,但核心问题是实际案例的性能改进,因此任何理论信息都很有用,但最重要的信息是计算和内存消耗。
用例1(性能):假设我有一个函数访问其参数的两个成员,并在第三个成员上写入一些结果,在1000个不同的对象上执行1000次。问题是:如果对象仅由3个属性组成,而如果它有其他100个属性,那么合成循环将花费几乎相同的时间?是否只有参数复制开销或在较大对象内选择属性才会导致差异?实际测试可能很大程度上取决于浏览器,所以我需要技术性的、通用的有效答案。
用例2:我有一个100MB的对象,传递给一个函数。在执行期间,我的内存占用是否增加了100MB?因此,任何内存泄漏,例如,由控制不当的机柜引起的,都是更危险的。
简单的答案是不复制对象,只传递对对象的引用作为参数。
更精确的答案是,在Javascript中,所有参数都是通过值传递的。对于数字等简单类型,这意味着值被复制。对于对象是指复制对对象的引用。
正如您所注意到的,参数本身是一个独立的副本,但该参数指向与您在函数调用中使用的变量相同的对象。
编辑:
对于用例1,唯一的区别在于从具有更多属性的对象访问属性。在少数或多个属性之间定位属性的差异很小,您将看到的唯一实际差异来自这样一个事实,即在循环遍历对象时,必须将对象带入内存缓存,但这与将它们传递给函数无关。
对于用例2,对象没有重复,对象在内存中仍然只存在一次。
请查看以下答案:
在Javascript 中通过引用传递变量
简单地说,您的对象是"通过引用"传递的,从性能的角度来看,用大对象或小对象调用函数应该没有区别。
话虽如此,整体性能取决于功能。它可以复制对象,执行AJAX调用等,所有这些都可能会执行,也可能不会执行,这取决于对象的大小。
对于专门进行的函数调用的性能,应该没有区别。
- 函数参数中的数据与指定变量之间的任何性能差异
- 使用Express捕获参数
- 提高JQuery的性能
- 参数变量出现ngTable指令问题
- AngularJS:我可以跳过函数参数回调吗
- 如何使用skip参数使用angular ui引导进行服务器端分页
- 要求未定义JS回调参数
- 我的jQuery插件参数没有正确启动,遇到了问题
- 获取@ResponseBody的一部分作为主干和Spring MVC控制器之间的参数
- jquery设置为使用参数运行
- Javascript”;类“;带有参数的扩展
- 为什么grunt contrib connect的中间件选项的第三个参数是未定义的
- 函数未将值作为参数传递
- 如何将参数传递到angularJs中的工厂
- Javascript:使用性能参数对函数进行原型设计
- 函数参数与此性能
- 闭包中变量的性能与作为函数参数的性能
- Javascript对象函数参数性能
- 将参数添加到'自变量'类数组对象,性能测试
- 在全局变量中存储mousemove事件参数可能会导致性能问题