【问题标题】:Reassigning variables or returning new objects?重新分配变量或返回新对象?
【发布时间】:2019-09-11 07:56:33
【问题描述】:

我正在处理 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);

【问题讨论】:

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


    【解决方案1】:

    我做了一个测试,似乎它们都以相同的速度工作,所以是的,你最好重新分配变量以节省一些花絮,但你知道什么不要太在意效率;易于阅读的代码更重要。

    【讨论】:

      猜你喜欢
      • 2014-08-03
      • 1970-01-01
      • 1970-01-01
      • 2012-07-13
      • 1970-01-01
      • 1970-01-01
      • 2014-12-07
      • 2012-07-21
      • 2017-09-23
      相关资源
      最近更新 更多