Это сложно, если MoveTo () на самом деле является вашим узким местом, так как там не так много всего происходит. О единственных вещах, о которых я могу думать, сразу же, это
1) Кэшируйте свойство стиля изображения и позиции для более быстрого поиска. Каждый раз, когда вы видите точку в цепочке объектов, требуется пройти через цепочку областей видимости. В идеале вы можете кэшировать это свойство во время создания родительского объекта MoveTo ().
2) Требуются ли строки 'px'? Это может привести к неверной спецификации CSS, но все еще может работать. Мне трудно поверить, что 2-х струнный конкат действительно все так сильно изменит.
Основная проблема здесь, вероятно, заключается в том, что каждый раз, когда вы меняете DOM, браузеры повторно отображают всю страницу. Единственным другим вариантом может быть рефакторинг, чтобы вместо изменения стилей вы фактически удалили предыдущее содержимое и заменили его фрагментом документа, описывающим новое состояние. Это приведет к 2 повторным потокам за весь этап (1 для удаления, 1 для добавления) вместо 2 для каждого шара.
РЕДАКТИРОВАТЬ: Что касается № 1 выше, когда я говорю кэш, я имею в виду не только локально в вызове функции. Но, возможно, как замыкание в родительском объекте. Например:
var Ball = function(img){
var style = img.style;
var posX;
var posY;
function MoveTo(){
style.left = posX + "px";
style.right = posY + "px";
}
};