重新分配变量还是返回新对象?

时间:2019-04-22 04:19:56

标签: javascript function variable-assignment object-literal memory-efficient

我正在处理Processing JS中的某个项目,该项目具有使用等距投影将点从3D投影到屏幕上的功能。

var xy = function(x, y, z) {
    return {
        x: 300 + cos(30) * x + cos(30 + 120) * z;
        y: 300 + sin(30) * x + sin(30 + 120) * z - y;
    };
};

绘制点我会做的

var p = xy(10, 20, 30); // 10, 20, and 30 being the x, y, and z values respectively
point(p.x, p.y);

此函数在帧中被调用很多时间,因此我想提高效率。曾经有人告诉我,当我这样做

return {
    x: ...
    y: ...
};

每次调用该函数时,它将在内存中创建一个新对象。他说改为像这样做功能

var p = {x:0,y:0};
var xy = function(x, y, z) {
    p.x = 300 + cos(30) * x + cos(30 + 120) * z;
    p.y = 300 + sin(30) * x + sin(30 + 120) * z - y;
};

并绘制点图

xy(10, 20, 30);
point(p.x, p.y);

现在,如果我要保存内存,一切都很好,但是当我使用旧方法时,它的工作没有太多滞后,但是我认为带有重新分配变量的新方法似乎比较滞后,而且Safari也没有弹出窗口“此网页正在使用大量内存。关闭它可能会改善Mac的性能。”但是对于新方法,它确实做到了“此网页耗费了大量精力。关闭该网页可能会改善Mac的性能。” (JK表示两者都消耗了大量能量,但我认为新方法似乎要落后一些)

所以基本上我的问题是:

更糟

var xy = function() {
    return {key:"val"};
};
// do it lots of times nonstop
setInterval(function(){for (var i=0; i<amillion; i++) {xy();}}, 1000);

var p = {key:"val"};
var xy = function() {
    p.key = "val";
};
// do it lots of times nonstop
setInterval(function(){for (var i=0; i<amillion; i++) {xy();}}, 1000);

1 个答案:

答案 0 :(得分:0)

我做了一个测试,看来它们都以相同的速度工作,所以是的,最好是重新分配变量以节省一些花招,但是您知道什么与效率无关紧要。易于阅读的代码更为重要。