Этот вопрос похож по духу на этот другой вопрос, заданный два года назад: Почему частота кадров Рафаэля замедляется по этому коду?
Я использую Raphael 2.1.0 в Chromium 25 следующим образом:
<html>
<head>
<title>Drawfun</title>
<style>
* {
margin: 0;
padding: 0;
}
</style>
</head>
<body>
<script src="raphael.js"></script>
<script>
var paper = Raphael(10, 50, 320, 200);
var anim = Raphael.animation({transform: "R360"}, 500).repeat(Infinity);
var rect = paper.rect(50, 40, 10, 20);
rect.attr("fill", "#f00");
rect.attr("stroke", "#fff");
rect.animate(anim);
</script>
</body>
</html>
Первоначально прямоугольник вращается плавно, как и следовало ожидать. Через минуту или две вращение работает на ~ 15 FPS. Через пять или восемь минут анимация работает на ~ 5 FPS.
Профили Chrome CPU показывают, что по мере того, как анимация становится более прерывистой, script тратит все меньше и меньше времени на (program)
и все больше времени в repush
и eve.listeners
.
Диспетчер задач Chrome не указывает на утечку памяти в пуле JS-памяти или в Chrome, но показывает, что с течением времени страница потребляет все больше и больше CPU.
При запуске этой страницы в последней версии Firefox анимация становится очень изменчивой, намного быстрее. Эти результаты были проверены в Linux и Windows, поэтому это не проблема ОС:).
Есть ли у кого-нибудь представление о том, что может быть неправильно с моим кодом или внутренними компонентами Рафаэля?