シリアルサーチと正規表現の速度比較

なんかこれインチキなので調べ直した。まあ用途次第なんだけど……

Intel Core 2 Duo 3.16 GHz

UA ver. indexOf match search exec test
Internet Explorer 6.0.2900.2180.xpsp_sp2_qfe.090206-1239 29 54 32 52 29
Google Chrome 1.0.154.65 3 6 19 6 6
Mozilla Firefox 3.0.10 7 19 19 33 15
Opera 9.64 5 22 22 22 16
Safari 3.2.2 (525.28.1) 5 11 6 11 7
UA ver. indexOf match search exec test
Google Chrome 2.0.172.28 2 5 17 5 2
UA ver. indexOf match search exec test
Safari 4.0 (530.17) 2 4 2 4 2

Intel Celeron 2.93 GHz

UA ver. indexOf match search exec test
Internet Explorer 8.0.6001.18702 16 102 27 96 25
Google Chrome 1.0.154.64 3 13 50 12 12
Mozilla Firefox 3.0.10 13 40 41 117 31
Opera 9.64 11 47 50 43 35
Safari 3.2.2 (525.28.1) 9 26 11 26 12
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>bm</title>
<pre id="outputArea"></pre>
<script type="text/javascript">// <![CDATA[
window.onload = function() {
  var run = 10, num = 10000, outputArea = document.getElementById('outputArea');
  var refText = 'XYZ', refExpr = new RegExp(refText), srcText ='JavaScript Search/RegExp Sample, JavaScriptによるシリアルサーチ検索/正規表現のサンプル, XYZ';
  (function() {
    for (var callback, args = Array.prototype.slice.call(arguments); callback = args.shift();) {
      for (var time = 0, i = run; i--;) {
        for (var s = new Date, j = num; j--;)
          callback();
        time += new Date - s;
      }
      outputArea.innerHTML += Math.ceil(time / run) + '|';
    }
  })(
    function() { srcText.indexOf(refText); },
    function() { srcText.match(refExpr); },
    function() { srcText.search(refExpr); },
    function() { refExpr.exec(srcText); },
    function() { refExpr.test(srcText); }
    );
};
// ]]></script>