JS:Сколько времени занимает вызов функции?

Итак, я программирую двухмерную симуляцию физики Javascript. Производительность хорошая, но я занимаюсь оптимизацией, чтобы сделать ее лучше. Итак, поскольку программа работает с большим количеством физической геометрии, я делаю в программе несколько вычислений по теореме Пифагора. Всего около пяти вычислений; вместе они выполняются около миллиона раз в секунду. Итак, я решил, что производительность повысится, если я вставлю этот простой код теоремы Пифагора в новую функцию и вызову ее; в конце концов, таким образом браузеру приходится меньше компилировать. Итак, я запустил код в Firefox и получил... увеличение времени выполнения этого вычисления на 4000000% .

Как? Это тот же код:Math.sqrt(x*x+y*y), так как же добавление его в качестве функции замедляет его? Я предполагаю, что причина в том, что функция требует времени только для вызова, без выполнения кода, и что добавление того, что миллион этих задержек в секунду замедляет ее?

Это кажется мне довольно тревожным. Будет ли это применимо к предопределенным функциям js? Это кажется маловероятным, и если да, то как этого избежать?

Раньше код выглядел так:

function x()
{
    dx=nx-mx;
    dy=ny-my;
    d=Math.sqrt(dx*dx+dy*dy);
    doStuff(...
}

Я пробовал вот так:

function x()
{
    dx=nx-mx;
    dy=ny-my;
    d=hypo(dx,dy);
    doStuff(...
}
function hypo(x,y)
{
    return Math.sqrt(x*x+y*y);
}

Спасибо!

10
задан mindoftea 21 November 2013 в 20:37
поделиться