この質問は、2 年前に尋ねられたこの別の質問と精神的に似ています:このコードでラファエルのフレームレートが遅くなるのはなぜですか?
次のように、Chromium 25 で Raphael 2.1.0 を使用しています。
<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>
最初は、予想どおり、長方形がスムーズに回転します。1 ~ 2 分後、ローテーションは ~15 FPS で実行されます。5 ~ 8 分後、アニメーションは ~5 FPS で実行されます。
Chrome の CPU プロファイルは、アニメーションが途切れ途切れになるにつれて、スクリプトが と で費やす時間がますます短くなっていることを示してい(program)
ます。repush
eve.listeners
Chrome タスク マネージャーは、JS メモリ プールまたは Chrome のいずれかにメモリ リークがあることを示していませんが、時間の経過とともにページがより多くの CPU を消費していることを示しています。
そのページを最近のバージョンの Firefox で実行すると、アニメーションが非常に速く途切れ途切れになります。これらの結果は Linux と Windows で検証されているため、OS の問題ではありません :)。
私のコードまたは Raphael の内部構造のどこに問題があるのか、誰かが洞察を持っていますか?