ブラウザ別のタイマ性能比較

えええ、先月あったMozilla Japan - The Future of JavaScript -presented by Mozilla & Shibuya.JS-にかなり遅刻して行って、まんまとじゃんけんで勝ち残ってJohn Resigと握手してもらってサイン入りFirefoxマウスパッドを持って帰った熊谷です。

そのJohn ResigがFirefox3でタイマの性能がどうなったか、FirefoxのほかにSafariとOperaとあわせて
  1. タイマ呼び出しの遅延
  2. タイマ呼び出し間隔の安定度
  3. 複数タイマを使用するときのスケーラビリティ
  4. 利用可能な最小呼び出し間隔
について調べたはなしを John Resig - Analyzing Timer Performance で書いていたのでご紹介。


この記事ではOSXでFirefox2, Firefox3, Opera9, Safari3について、タイマを同時に1~128個設定したときに、タイマが設定した時間通りに安定してイベントを伝達するか、タイマのタイムアウトを0ms, 10ms, 20msに変えて調査されています。タイマとして使われているものはsetTimeout, setInterval, nsITimerのみっつです。nsITimerというのはFirefoxの内部で
setTimeoutやsetIntervalが内部的に呼び出しているもので、FirefoxをOSにたとえたらOSのタイマAPIみたいなものだと思えばいいでしょう。

グラフの横軸は記事でrecursion depth of the timer callと書かれていてtest case)を見ると、タイマの繰り返し回数です。縦軸は実際にタイマのタイムアウトイベントが来た時間になっています。

で、OSX上で調べた結論として
  • WebKitのタイマは理想的。信じられないくらい。
  • Operaは常にひどい。
  • Firefox2はだいたい安定してるけど、すごく遅れることがある(ガベージコレクタが動いたとき)
  • Firefox3は2より、ひどい遅れの程度が小さくなっているけど、なんでか0-2msになることがある
  • Firefox2, Opera, Safariは10msより早くはならない。Firefox3はなにかの理由で15msより早くならない
  • タイマを同時に64以上動かすのは厳しい
  • nsITimerは早いタイマを1-2個しか同時に動かせない
  • Firefox3のnsITimerはなんか根本的におかしい
  • Firefox3のタイマフィルタリングコードを外してみるとDOMのコードですごく時間を喰ってるのがわかる。
と書かれています。

とりあえずSafariがすごいっていうのと、同時に使うタイマは10くらいにしておくのが無難、インターバルは10ms~20msくらいが最小、くらいがフロントエンドを書くときに関係してくる事柄でしょうか。


どうでもいいけど個人的にはどう見てもOperaよりもFirefoxのほうがmessyに思えます...


コメント欄にLinuxとWindowsでおなじテストを走らせた結果が寄せられていて、タイママニアならこちらも必見です。Linux上のOperaはOSXのSafariなみにいい結果を出しています。
どちらもどういう設定でとられた評価なのかが書かれていないのですが、グラフからするとLinuxは10msのタイムアウトでとられたもの、Windowsは0msのタイムアウトでとられたものでしょう。

余談

タイママニアの間では、Windowsには16ms単位の何かがある、というのが知られていますが、このグラフでもはっきりそれが出ています。Windows上ではFirefoxのタイマは16ms単位でしかイベントを生成しないようなのです。ちなみにOSXの場合は10ms以上であれば1ms単位でそれもかなり安定してイベントを発生させられます。 Firefox2のタイマはOSの提供するタイマAPIを使っているわけではなく、Firefox側で時間の管理をしてイベントを発生させているのでスレッドのスケジューリング間隔と深い関連があるはずなので、いつかそのへんをまとめられたらなーと思います。

tags

  • javascript
  • 「ブラウザ別のタイマ性能比較」のはてなブックマーク数
  • 「ブラウザ別のタイマ性能比較」deliciousブックマーク数
  • 「ブラウザ別のタイマ性能比較」をはてなブックマークに追加
  • save "ブラウザ別のタイマ性能比較" to del.icio.us
  • 「ブラウザ別のタイマ性能比較」をリアルタイムブログ検索
  • permalink
  • 次のページへのリンクをみつけるFastForwardアプローチの定量的評価
  • HTMLのドキュメントから繰り返し部分をみつけてSITEINFOをつくるAutoPagerize Iteration Detector

comments

TypeKey Enabled
スタイル用のHTMLタグが使えます。
*required

trackbacks

トラックバック元エントリにこのエントリへのリンクがない場合はトラックバックを受け付けません。

http://labs.gmo.jp/mt/mt-tb.cgi/187
©2010 Kentaro Kumagai, GMO Internet Labs., GMO Internet, inc.
bits and bytes
2007 .12. 21 15:03

tagcloud

  • API1
  • C/C++2
  • E4X1
  • FUSE2
  • Firefox28
  • HTML4
  • IE1
  • MySQL1
  • OSX4
  • Opera2
  • PHP4
  • UI2
  • WebKit1
  • XML1
  • XPCOM4
  • XPath4
  • apache2
  • binary2
  • book1
  • data13
  • debug5
  • design1
  • experiments4
  • extension14
  • geo1
  • google gears2
  • google maps API1
  • greasemonkey4
  • httpd5
  • javascript22
  • linux1
  • logging2
  • mobile4
  • perl5
  • tips6
  • tool11
  • vim2
  • visualization3
  • widget1
  • wii3
  • windows7
  • サービス7
  • 和訳1

Archives

  • 2008.06 (2)
  • 2008.05 (5)
  • 2008.04 (4)
  • 2008.03 (4)
  • 2008.02 (6)
  • 2008.01 (3)
  • 2007.12 (4)
  • 2007.11 (5)
  • 2007.10 (4)
  • 2007.09 (4)
  • 2007.08 (4)
  • 2007.07 (8)
  • 2007.06 (7)
  • 2007.05 (4)
  • 2007.04 (5)
  • 2007.03 (6)
  • 2007.02 (4)
  • 2007.01 (6)

about

  • bits and bytesのXML
  • 「bits and bytes」のCreative Commons
  • Powered by Movable Type
  • イベントと地図 - モグ
  • Use ecto to blog!
  • bits and bytesのはてなブックマーク数
  • bits and bytesをMy Yahoo!に追加
  • Subscribe with Bloglines