OpenRestyのre.matchとstring.matchの性能差

  • 9
    いいね
  • 2
    コメント
この記事は最終更新日から1年以上が経過しています。

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必須ですね。