前のエントリで紹介した HTTP::Entity::Parser ですが、プロファイリングとるとPOSTデータの解析で半分弱の時間を使っていたのでそこをXSにしたら良いんじゃないかということで、新しく WWW::Form::UrlEncoded ってのを書いて出しました。

https://metacpan.org/release/WWW-Form-UrlEncoded
https://github.com/kazeburo/WWW-Form-UrlEncoded

似たモジュールに URL::EncodeText::QueryString がありますが、HTTP::Bodyのパーサと互換性あるこの仕様を満たしていないので、新しく書き起こしてみました。URL::Encode(::XS) がかなり速いのですが、それに近い速度がでています。

              Rate wwwform_pp    text_qs    wwwform  urlencode
wwwform_pp 11933/s         --       -77%       -87%       -88%
text_qs    52609/s       341%         --       -43%       -46%
wwwform    91995/s       671%        75%         --        -5%
urlencode  97303/s       715%        85%         6%         --

そして、これをHTTP::Entitiy::Parserに組み込んで0.03としてリリースしました

https://metacpan.org/release/HTTP-Entity-Parser
https://github.com/kazeburo/HTTP-Entity-Parser/

ベンチマークはPOSTデータのサイズを変えながら3つとってみました

## content length => 38

Benchmark: running http_body, http_entity for at least 1 CPU seconds...
 http_body:  1 wallclock secs ( 1.08 usr +  0.00 sys =  1.08 CPU) @ 36201.85/s (n=39098)
http_entity:  1 wallclock secs ( 1.12 usr +  0.00 sys =  1.12 CPU) @ 76799.11/s (n=86015)
               Rate   http_body http_entity
http_body   36202/s          --        -53%
http_entity 76799/s        112%          --

## content length => 177

Benchmark: running http_body, http_entity for at least 1 CPU seconds...
 http_body:  1 wallclock secs ( 1.11 usr +  0.00 sys =  1.11 CPU) @ 14901.80/s (n=16541)
http_entity:  1 wallclock secs ( 1.08 usr +  0.00 sys =  1.08 CPU) @ 64474.07/s (n=69632)
               Rate   http_body http_entity
http_body   14902/s          --        -77%
http_entity 64474/s        333%          --

## content length => 1997

Benchmark: running http_body, http_entity for at least 1 CPU seconds...
 http_body:  1 wallclock secs ( 1.16 usr +  0.00 sys =  1.16 CPU) @ 1930.17/s (n=2239)
http_entity:  1 wallclock secs ( 1.11 usr +  0.00 sys =  1.11 CPU) @ 29519.82/s (n=32767)
               Rate   http_body http_entity
http_body    1930/s          --        -93%
http_entity 29520/s       1429%          --

データが大きくなればなるほど差が大きくなります。

このブログ記事について

このページは、Masahiro Naganoが2014年2月 7日 16:26に書いたブログ記事です。

ひとつ前のブログ記事は「HTTP::Entity::Parser をリリースしました」です。

次のブログ記事は「dstat + fluentd + Elasticsearch + kibana でサーバモニタリングする」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

ウェブページ

OpenID対応しています OpenIDについて
Powered by Movable Type 4.27-ja