OpenRestyで正規表現を利用する場合、
高機能なre.matchを利用したくなりますが
Lua純正のstring.matchと比較してどの程度性能に差があるのかを調べてみました。
環境
Dockerfileを公開しているので、こちらで再現できると思います。
サーバ
- EC2: t2.medium
ベンチマークコマンド
re.matchがOpenRestyのコアライブラリのため
HTTP経由でベンチマークを取っています。
c
というパラメータを付けると正規表現のループ回数を指定できます。
curl localhost/lua/string_match\?c=10000000
ソースコード
こちら をご参照ください。
結果
短いほど良い値です。
パス | pcre_jit | かかった時間(sec) |
---|---|---|
string_match | - | 2.18 |
re_match | off | 12.86 |
re_match | on | 12.63 |
re_match_optimize | off | 5.55 |
re_match_optimize | on | 4.48 |
まとめ
性能だけ比較すると string_match の勝ち。
re_matchを利用してもoptimizeオプションを付けておけば
だいぶマシになりました。
またre_matchの非optimize時、メモリがモリモリ増えてしまって大変でした。
optimize必須ですね。