ブラウザ別速度比較【第 N 章】 2 種類のクロージャ
概要
プログラミング言語 JavaScript における 2 種類のクロージャをさまざまな Web ブラウザで実行し、実行にかかった時間を記録する。
実行方法
ロケーションバーに以下のコードを入力して Enter キーを押す。
コード
以下 2 種類のコードを実行すると、いずれも、クロージャが 9e5 = 900000 回実行され、 alert dialog が出現し、かかった時間が表示される。
function 篇(一般によく使用される)
javascript: closure = (function(x) { return function() { return x++ }; })(0); for (time = new Date; closure() < 9e5;); alert(new Date - time)
with 篇(一般にあまり使用されない)
javascript: with ({x:0}) closure = function() { return x++ }; for (time = new Date; closure() < 9e5;); alert(new Date - time)
速度記録の詳細
上記 2 種類のコードをそれぞれ 5 回ずつ実行する。 5 回実行すれば、合計 5 つの alert dialog が出現することになる。 5 つの alert dialog にはそれぞれ数値が表示されているが、そのうち最小のものを「スコア」とする。ブラウザ別に「スコア」を記録し、表を作成する。
実行結果
ブラウザ | かかった時間 | |
---|---|---|
function 篇 | with 篇 | |
Opera 9.6 | 219 | 234 |
Opera 10.7 | 73 | 148 |
Firefox 3.6 | 154 | 306 |
Internet Explorer 8.0 | 640 | 640 |
Google Chrome 7.0 | 0 | 360 |
Safari 5.0 | 62 | 132 |
あとがき
function 篇では Chrome が最速で、 0 という追い抜きようのないスコアであった。一方、 with 篇では Safari が最速であった。これら 2 つのブラウザに搭載されている JavaScript エンジンは、どちらも同じく V8 と呼ばれており、ロボット型検索サイトの老舗 Google が開発したものである。
訂正: Chrome の JavaScript エンジンは V8 であるが、 Safari のそれは JavaScriptCore と呼ばれており、 Macintosh の生みの親である Apple が開発したものである。 http://mobile.twitter.com/@t_ashula/status/11760759650390016
今回の結果は、環境に左右されるものであり、絶対ではない。また、今回使用したブラウザは、いずれも、日々バージョンアップを続けており、 Opera に限っていえば、その進歩を表の中で見ることができる。とりわけ断言できそうなのは、クロージャを実現する際、 with 篇より function 篇を使ったほうが高い速度で実行できるということだ。