Hackathonにはなんかいかない方向になってきたのと、早く起きてしまったのでとりあえず少しハックしてた。
まず朝方にRTからバグレポートが来てたのでDateTime::Format::Pgをフィックス。こちらはCPANにすでにあげた。
あとはParams::Validateハックしてみた。Params::ValidateはNO_VALIDATIONというオプションがあって、コードを書いている人のほうが決め打ちで「絶対に平気」な値を渡す場合のように特にvalidationを行う必要がない時に使えるオプションがある。
残念ながらNO_VALIDATIONをオンにしてもコードパスがほぼ一緒なのでたいしたパフォーマンスの差が出ない:
daisuke@beefcake Params-Validate$ perl benchmark.pl
Rate validate_on validate_off
validate_on 2404/s -- -19%
validate_off 2985/s 24% --
というわけでNO_VALIDATIONが有効な時にはコードをショートサーキットして、その辺りをすっ飛ばして処理するようにしてみた:
daisuke@beefcake Params-Validate$ perl benchmark.pl
Rate validate_on validate_off
validate_on 2597/s -- -30%
validate_off 3731/s 44% --
30%ほどの差。ちなみにこれであちこちにちりばめられたno_validation()の使用を全体で4個までにおさめられるので分岐が減り、ベースパフォ-マンスも5%くらいあがるよう。PatchはとりあえずHackathon参加中のDaveに送っておいた。
(追記)Params::Validate 0.81でこれがアップされた。