0B

ブラウザ別速度比較【第 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.6219234
Opera 10.773148
Firefox 3.6154306
Internet Explorer 8.0640640
Google Chrome 7.00360
Safari 5.062132

あとがき

function 篇では Chrome が最速で、 0 という追い抜きようのないスコアであった。一方、 with 篇では Safari が最速であった。これら 2 つのブラウザに搭載されている JavaScript エンジンは、どちらも同じく V8 と呼ばれており、ロボット型検索サイトの老舗 Google が開発したものである。
訂正: ChromeJavaScript エンジンは V8 であるが、 Safari のそれは JavaScriptCore と呼ばれており、 Macintosh の生みの親である Apple が開発したものである。 http://mobile.twitter.com/@t_ashula/status/11760759650390016

今回の結果は、環境に左右されるものであり、絶対ではない。また、今回使用したブラウザは、いずれも、日々バージョンアップを続けており、 Opera に限っていえば、その進歩を表の中で見ることができる。とりわけ断言できそうなのは、クロージャを実現する際、 with 篇より function 篇を使ったほうが高い速度で実行できるということだ。