函数参数中的数据与指定变量之间的任何性能差异

Any performance difference between data from function arguments vs assigned variable?

本文关键字:任何 之间 性能 变量 参数 数据 函数      更新时间:2023-09-26

这听起来像是一个愚蠢的问题,但这里是;基本上,我将大量数据从一个对象传递到另一个对象。下面是一个简化的例子。

//示例1职能人员(hugeData){this.info=函数(){console.log(hugeData);}}Homer=新人(hugeData);Homer.info();

与相比

//示例2函数Person(){var hugeData;this.set=函数(数据){hugeData=数据;}this.info=函数(){console.log(hugeData);}}Homer=新人物();荷马集(hugeData);Homer.info();

这两个代码片段在性能方面有很大区别吗?请关注示例的上下文,而不是代码本身(设置对象变量与传递参数)。

虽然上面的例子是针对Javascript的,但我也想知道同样的原理是否适用于其他编程语言,如PHP。

谢谢。

不,一点也不。

现在不详细介绍,形式参数局部变量都存储在所谓的激活对象(在ES3中)或词汇环境记录中(ES5)。

因此,根据规范,访问时间应该相同


如果你想知道详细信息,请结账:

http://dmitrysoshnikov.com/ecmascript/javascript-the-core/

http://dmitrysoshnikov.com/ecmascript/es5-chapter-3-2-lexical-environments-ecmascript-implementation/


测试用例:http://jsperf.com/formal-parameters-vs-local-variables-access-time

我想你问题的重点是这行。。。

hugeData = data;

在您的代码中可能会影响性能。

答案是否定的,不是(至少不会影响应用程序的性能)。

如果hugeData引用一个对象(记住JS中的数组本质上是对象),那么它实际上只存储对该对象的引用。引用是将被复制的内容,而不会复制对象的内容。

如果hugeData指的是字符串,则可能会更复杂。。。但据我所知,大多数现代浏览器(例如查看MDN)现在都实现了"写时复制"技术。换句话说,字符串在这里也不会重复。

传递变量是最好的方法。因为很明显,你的庞大数据不是一个基元,所以你只会在函数上下文中引用它。看看jAndy的回答。

在这种情况下很难概括,因为Javascript的每个实现都不同。

我可以想象,当你在创建一个对象时传递大量数据时,你节省了内存的重新分配,当你先创建一个数据很少的对象,然后再添加大量数据时就会发生这种情况。但大多数JS实现都会将大数据块存储在引用中,所以它不太可能真正重要。

相关文章: