canvasタグを8倍高速化する方法&FlashCanvasが4倍速くなった
最近、ブログを書いて、毎回、読んだくださった方から、貴重な情報を教えてもらっています。大変ありがとうございます。
ベンチマーク for canvasタグとcanvas on Flash 2010 - yukobaのブログですが、コメント欄&http://www.revulo.com/blog/20100311.html#p01によると、drawImage()で渡す座標は、仕様上 "float" となっているのですが、ここに "int" を渡すと高速化するそうです。具体的には、Math.random() * 750 を Math.random() * 750 | 0 にします。"| 0"で、float → int です。
また、FlashCanvas Pro は今、1.2 α3 ですが、1.2になって、高速化したので(上のブログ参照)、それを含めてテストしてみました。
ブラウザ | 時間 | 高速化の速度比 |
---|---|---|
Chrome 4.1β | 733ms | 1.0倍 |
Safari 4.0.5 | 879ms | 4.6倍 |
Opera 10.50 | 1,268ms | 4.0倍 |
Firefox 3.6.0 | 1,417ms | 8.1倍 |
FlashCanvas Pro 1.2 α3 | 1,864ms | 4.3倍 |
uuCanvas.js 2.02 | 8,224ms | 1.4倍 |
FlashCanvas 自体は、1.1→1.2による高速化を含み、それの要因が、ほとんどだと思います。
ベンチマークのアドレスはここ。
- http://accelart.jp/blog/CanvasBench/FlashCanvas1_2_Alpha3/FlashCanvas2.html
- http://accelart.jp/blog/CanvasBench/UUCanvas2.html
ところで、座標に float を受け付けて、どうするつもりなのでしょうか?ズームした時に差が出る?アンチエイリアス関係あるの??
あと、setTimeout() で、フレームを次に進める話において、setTimeout に渡す数字が 0ms では、ちゃんと描画しない問題ですが、FlashCanvas Pro では、どうも、最初の2フレームだけ、飛んでしまうようで、setTimeout(doBenchInner, k <= 2 ? 100 : 0); とやると、全てのフレーム描画されるようになります。なんでなんでしょう?
drawImage の座標が float であるという情報は、4.8.10.1 The 2D context - 4.8.10 The canvas element ― HTML5 (including next generation additions still in development)より。ImageDataの大きさは、unsigned longですが、座標系は全て float です。
2010年の夏くらいに、WebGL がウェブブラウザで実装されるのではないかと思うのですが、それに合わせて、誰かが WebGL on Flash 10 を作ったら、すご〜〜く嬉しいです!
(追記)won't fix: canvasベンチというレスのような記事を見つけました。Firefox 3.7 (まだ未リリース)についてです。