JavaScript初めたばかりで、やっと正規表現に出会ったので速度比較とかやってみたく色々調べてたら下記サイト様を見つけました。大変参考になりました!ありがとうございます。
indexOf と RegExp の速度比較
これが2010/03/30の記事でしたので、サクッと2013/05/08版をやってみた次第でございます。二番煎じ企画。乙!!
ベンチマーク
ベンチマーク用のhtmlベタ書きのJavaScriptソースはこんな感じで実装されています。ボタン押すだけ。今回はChromeと同じV8で動いているNode.jsでも試してみたのでそちらのソースはこんな感じ。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var a = [], n=10000; | |
for(var i=0; i<n; i++){ | |
a.push('item:' + i);} | |
var str = a.join('\n'); | |
// test1 | |
var s = new Date(); | |
for(var i=0; i<3000; i++){ | |
var m = str.indexOf('item:9999'); | |
} | |
console.log('#test1 ' + (new Date() - s) + '(ms) result:'+ m); | |
// test2 | |
var s = new Date(); | |
for(var i=0; i<3000; i++){ | |
var m = /item:9999/.exec(str); | |
} | |
console.log('#test2 ' + (new Date() - s) + '(ms) result:'+ m); | |
// test3 | |
var s = new Date(); | |
for(var i=0; i<3000; i++){ | |
var m = new RegExp('item:9999').exec(str); | |
} | |
console.log('#test3 ' + (new Date() - s) + '(ms) result:'+ m); | |
// test4 | |
var s = new Date(); | |
for(var i=0; i<3000; i++){ | |
var m = /item:9999$/.exec(str); | |
} | |
console.log('#test4 ' + (new Date() - s) + '(ms) result:'+ m); |
結果
PCブラウザ+Node.js
グラフの番号は
(1)indexOf : str.indexOf('item:9999')
(2)静的な正規表現 : /item:9999/.exec(str)
(3)動的生成の正規表現 : new RegExp('item:9999').exec(str)
(4)正規表現 : /item:9999$/.exec(str)
となっています。
Figure 1. PCブラウザとNode.jsの正規表現性能比較
Chromeェ…すげぇ…。4に関しては1msとかでした。
マジか…。
おまけ:iOSでの比較
Figure 2. iPhone標準ブラウザとアプリ内ブラウザの正規表現性能比較
こちらはちょっとおまけで調べたiPhoneでの性能比較。
アプリ内ブラウザにはChromeのiOS版を使ったんですが、Chromeって名前なだけなんですね。。というかAppleのネイティブにブラウザ埋め込んだアプリ締め出しの裏構図が見えてコワイ。。。
まとめ
Node.jsでの性能が知りたかっただけなんですが、色々やったら色々わかって面白かったです。NodeはChromeと同じくらいのパフォーマンスがでるというのがわかったので、カリカリに作る必要がなければどんなやり方でも行けそうですね。
ただ、$つかった時みたいに明らかな正規表現をするときは速度に差が出るみたいなので、適時パフォーマンス見るのが良さそうです。
iPhoneの結果は面白いくらいアプリ内ブラウザ開発やる気見えなくてコワイですね。
ブラウザアプリラップしただけのネイティブアプリが、一時期締め出し食らったりしてるみたいですし、不便さが勝ってみんな撤退しろー…なんてことを考えてるんですかね?
くわばらくわばら。
Androidは貸してもらえなかったのでまた今度出来ればやります。
えっIE…?おや、誰か来たみたいなのでこの辺で。
0 件のコメント:
コメントを投稿