我正在处理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);
答案 0 :(得分:0)
我做了一个测试,看来它们都以相同的速度工作,所以是的,最好是重新分配变量以节省一些花招,但是您知道什么与效率无关紧要。易于阅读的代码更为重要。