【发布时间】: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