Я строю тестовую платформу для конкурса производительности JavaScript. Одна из задач позволяет участникам оптимизировать код JavaScript, отвечающий за обработку анимации холста. После отправки решения сервер запускает его с помощью phantomjs и считывает среднее число FPS после 20 секунд анимации. Проблема в том, что я получаю 3-4FPS для оптимизированного и неоптимизированного кода. Это делает невозможным определить, был ли улучшен код.Программно измерять производительность анимации холста
Пар фактов:
- Я 100% уверен, что phanotmjs правильно рендеринг анимации (сделано несколько скриншотов)
- в браузере неоптимизированного коде работает на 13FPS, оптимизированные бега на 58FPS
- phantomjs не поддерживает
requestAnimationFrame
поэтому мне пришлось использовать polyfill - Я использую этот код, приведенный ниже, чтобы проверить количество РЗУ
frameCounter.js
var frameCounter = (function() {
var frames = 0;
var startTime = new Date();
function bump() {
frames++;
window.requestAnimationFrame(bump);
}
bump();
return {
getFPS: function() {
var time = (new Date() - startTime)/1000;
return (frames/time).toPrecision(4);
}
}
})();
Мой вопрос: как я могу программно измерить производительность холста анимации?
Так phantomjs использует 'setTimeout' в то время как ваш браузер имеет фактическую' функцию requestAnimationFrame'? – Bergi
Выполняет ли ваша функция 'bump' реальную работу, или это просто счетчик для измерения производительности без анимации? – Bergi
@Bergi Да, phantomjs использует 'setTimeout', в то время как браузер использует' requestAnimationFrame'. Тем не менее, я заставил браузер использовать polyfill, а количество FPS все еще было намного выше для оптимизированного кода, чем для не оптимизированного. –