Итак, я программирую двухмерную симуляцию физики 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);
}
Спасибо!