2010-02-16
HTML タグをエスケープする方法 3 通りと速度比較
HTML::Entities を使う方法と、正規表現を段階的に使う方法と、変換テーブルを用意して正規表現で置換する方法と、どれが一番速いか気になったので計測してみました。& から順番に変換していく方法が一番速かったです。ベンチマークスクリプトは以下です。
| Rate | cpan | once | step | |
| cpan | 372/s | -- | -32% | -56% |
| once | 550/s | 48% | -- | -35% |
| step | 847/s | 127% | 54% | -- |
use strict; use warnings; use Benchmark ':all'; use HTML::Entities; my $html = join '', <DATA>; my %table = ( '&' => '&', '<' => '<', '>' => '>', '"' => '"', "'" => ''', ); my $regex = join '', '([', keys(%table), '])'; cmpthese(timethese(1000, { 'step' => \&step, 'once' => \&once, 'cpan' => \&cpan, })); sub step { my $str = $html; $str =~ s/&/&/go; $str =~ s/</</go; $str =~ s/>/>/go; $str =~ s/"/"/go; $str =~ s/'/'/go; $str; } sub once { my $str = $html; $str =~ s/$regex/$table{$1}/go; $str; } sub cpan { my $str = encode_entities($html, q{&<>"'}); $str; } __DATA__ ベンチマーク用の HTML をここに用意 このエントリでは vim で下記ページのソースを使用しました。 :r! GET http://www.perl.org/
コメントを書く
トラックバック - http://d.hatena.ne.jp/Craftworks/20100216/1266309363
リンク元
- 196 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CCgQFjAA&url=http://d.hatena.ne.jp/Craftworks/20100216/1266309363&ei=lX5xT_HeBIXNmQXDzYCsDw&usg=AFQjCNE04DnlGa5h59DBebc7euKVt9J9Qg
- 192 https://www.google.co.jp/
- 134 http://pipes.yahoo.com/pipes/pipe.info?_id=tDfBdGWF3RGl9XNm1L3fcQ
- 123 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&cts=1331285929778&ved=0CDQQFjAB&url=http://d.hatena.ne.jp/Craftworks/20100216/1266309363&ei=Us9ZT-HvAeucmQX8t_iVDw&usg=AFQjCNE04DnlGa5h59DBebc7euKVt9J9Qg&sig2=877tpok9Hkn7esy8zFj
- 102 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=3&cts=1331196448216&ved=0CEQQFjAC&url=http://d.hatena.ne.jp/Craftworks/20100216/1266309363&ei=_nFYT5yHEI_NmQWKpuGkDw&usg=AFQjCNE04DnlGa5h59DBebc7euKVt9J9Qg&sig2=noG1rPdWUGHZ7x7_jqj
- 88 http://school.rainbowapps.com/
- 64 http://www.google.co.jp/url?sa=t&rct=j&q=perl html エスケープ&source=web&cd=5&sqi=2&ved=0CEMQFjAE&url=http://d.hatena.ne.jp/Craftworks/20100216/1266309363&ei=9UakTv-HN6nemAWa38GbCQ&usg=AFQjCNE04DnlGa5h59D
- 54 http://www.google.co.jp/url?sa=t&rct=j&q=html タグをエスケープ perl&source=web&cd=3&ved=0CDIQFjAC&url=http://d.hatena.ne.jp/Craftworks/20100216/1266309363&ei=po6hTo5q7NGYBbak3ZIJ&usg=
- 51 http://www.google.co.jp/url?sa=t&rct=j&q=タグをエスケープ&source=web&cd=3&ved=0CDwQFjAC&url=http://d.hatena.ne.jp/Craftworks/20100216/1266309363&ei=VDyFTv_LK6HMmAWmtcEr&usg=AFQjCNE04DnlGa
- 46 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&frm=1&source=web&cd=4&ved=0CFMQFjAD&url=http://d.hatena.ne.jp/Craftworks/20100216/1266309363&ei=7v10T_-JM-eeiAeDqsHnDg&usg=AFQjCNE04DnlGa5h59DBebc7euKVt9J9Qg&sig2=TafmU6DyLMkJ2PbZlU3WAA


