Сегодня я провел профилирование. Вот пример данных из сохраненной игры Epoch 7, которую я имею здесь. Довольно близко к сценарию наихудшего случая, и , это с отключением импульса, поэтому я начинаю думать, что, возможно, мне удастся сойти с пульсации, и проблема в другом месте.
Function Calls Percent Own
Time(ms) Time(ms) File
mouseEvent() 658 4.69% 75.67 1596.14 GamesByEmail.js (line 4150)
onmousemove 576 1.07% 17.32 1575.29 26 (line 1)
mouseMove() 576 1.18% 19.04 933.05 Game.js (line 2122)
findAtPoint() 576 4.14% 66.9 594.48 EmpiresT...ritory.js (line 415)
containsPoint() 16217 6.00% 96.91 518.51 GamesByEmail.js (line 5676)
normal() 16217 14.65% 236.61 421.59 Foundati...ometry.js (line 485)
cancelScroll() 658 21.51% 347.38 347.38 GamesByEmail.js (line 4109)
mouseMoveHidePrevious()
576 0.18% 2.94 266.65 Game.js (line 2153)
updateMouseHtml()61 0.16% 2.64 256.51 Game.js (line 2178)
updateMouseHtmlPosition()
639 11.69% 188.87 216.47 GamesByEmail.js (line 3783)
setMouseHtml() 61 0.53% 8.58 206.75 GamesByEmail.js (line 3767)
containsPoint() 16217 5.78% 93.41 144.65 Foundati...ometry.js (line 312)
setInnerHtml() 61 1.99% 32.19 116.9 GamesByEmail.js (line 2578)
toString() 183 6.40% 103.33 103.33 Foundation.js (line 476)
washHtml() 61 0.10% 1.54 84.71 GamesByEmail.js (line 2566)
insertStyleForElements()
122 0.40% 6.49 83.17 GamesByEmail.js (line 280)
mousePoint() 578 2.57% 41.53 67.59 GamesByEmail.js (line 4119)
containsXY() 16217 3.17% 51.24 51.24 Foundati...ometry.js (line 308)
getElement() 1008 1.98% 31.98 41.18 Foundation.js (line 507)
normal 16411 2.50% 40.34 40.34 Foundati...ometry.js (line 487)
Point() 1155 1.88% 30.34 36.38 Foundati...ometry.js (line 15)
canAttack() 614 0.30% 4.79 35.41 Empire.js (line 477)
...
То, что я вижу, показывает, что все время съедено внутри mouseMove и его subfns.
Определение, над какой территорией находится мышь, обычно является задачей O (n). Итерация по каждому полигону каждой территории, пока мы не найдем тот, который содержит мышь X, Y. (такие вещи, как «normal ()» являются частью этого процесса. Он также использует ограничивающие рамки, поэтому некоторая оптимизация там).
Но я не понимаю, как эта производительность может стать намного хуже в конце игры (с большим количеством наложений территории) по сравнению с началом игры с очень небольшим количеством наложений территории.
Поиск по территориям, чтобы определить, в какой из них находится мышь, сам по себе может и не быть проблемой ... но некоторый побочный эффект, возникающий при этом, ИЛИ, что браузеры в Linux и Mac перегружены объемом элементов DOM созданный таким количеством крошечных изображений на экране (?)
Оценка изображений на экране:
- возможно 120 изображений для цветных территорий
- еще 130 или около того для выделенных территорий
- «куски.гиф», созданные для показа памятников, городов и парней армии, еще 240+ из них
Это только около 500 изображений на экране одновременно, или 250 изображений и 1 изображение в 240 раз
Это говорит о том, что либо я из базового API делает что-то действительно дорогое, когда территория имеет цветное наложение. (потому что на заре истории производительность довольно хороша, когда мы копаемся вокруг доски).
Может быть, мне нужно просмотреть весь код внутри территории.updateHtml ();
(кто сказал, что это не кодовый вопрос? ... ха! Не думаю, что он видел 15000 строк JavaScript-спагетти-безумия, которое я написал: o).
Может быть, мне следует запустить аналогичный профиль, запущенный в эпоху 1, чтобы посмотреть, как это выглядит?
Я отправлю, если узнаю больше.
Трой