Переназначение переменных или возврат новых объектов? - PullRequest
0 голосов
/ 22 апреля 2019

Я работаю над определенным проектом в 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 голосов
/ 15 мая 2019

Я провел тест, и кажется, что они оба работают с одинаковой скоростью, и поэтому вам лучше переназначить переменные, чтобы сохранить несколько кусочков, но вы знаете, что не слишком беспокоит вас эффективностью; легко читаемый код важнее.

...