Lua(Luajit)のSplit実装ベンチマーク比較
Luaはsplit関数がバンドルされていません。 そのためいくつか実装が存在しています。
今回、実装違いにより色々問題が出たため再検討していたのですが、
その際にどの実装がパフォーマンス良いのか気になったので比較してみました。
(今回存在を知ったのですが特にOpenRestyのコア実装がどのくらい出るのか試してみたかった)
バージョンなど
Docker Image openresty/openresty:1.15.8.1-3-alpine-fat で実行
ベンチマークコード
コード/セットアップ/実行方法はこちら。
https://github.com/toritori0318/Dockerfiles/blob/master/openresty-split-bench/
結果
10000000回ループでMac上で検証しました。処理時間が短いほど速いです。
項目 | 処理時間(sec) |
---|---|
ngx_re_split | 23.3 |
lua_split_a | 32.8 |
lua_split_b | 49.9 |
lua_split_c | 14.5 |
lua_split_d | 8.91 |
lua_split_e | 29.5 |
考察
- ngx_re_split はきちんとメンテされていそうなので品質的には一番安心?OpenRestyで相当なパフォーマンスを要求されない場合はこれで良さそう。また、パターン指定はPCREが利用できるので高機能。
- Lua 実装は速いもののあるが、実装毎に使い方や仕様が違うので注意(パターン指定方法とか、empty stringの扱いとか)