XML::Simpleのパフォーマンスの話
WebService::Simpleは内部的にXML::Simpleを使っている。古い話だけど、XML::Simpleといえばこちらにもあるように「遅い」と評されることがあって、それはここに原因と対策がまとめられていて、掻い摘んで説明すると・XML::SimpleはデフォルトでXML::SAX::PurePerlを内部的にパーサとして使用している。
・XML::SAX::PurePerl*が*遅いのであって、XML::Parserを使えば速度が改善される。
ということになる。そのためには
$XML::Simple::PREFERRED_PARSER = 'XML::Parser';という具合に、XML::Simpleが内部的に使用するパーサにXML::Parserを指定すれば良い。
本題
のっけから脱線したけど、これはWebService::Simpleのparse_response()の結果が文字化けを起こすという現象にも、同様の事が言える模様。use WebService::Simple; my $ws = WebService::Simple->new( base_url => 'http://example.com/api', param => { api_key => '***' }, ); my $res = $ws->get( 'hoge/fuga', { q => 'piyo' } ); my $xml = $res->parse_response;
例えば、こんな具合で生成されたWebService::Simpleのオブジェクトがあって、parse_responseの戻り値が文字化けしていたとする。そんな時はまず、
use WebService::Simple; use WebService::Simple::Parser::XML::Simple; $XML::Simple::PREFERRED_PARSER = 'XML::Parser'; my $ws = WebService::Simple->new( base_url => 'http://example.com/api', param => { api_key => '***' }, response_parser => WebService::Simple::Parser::XML::Simple->new( xs => $xs ), ); my $res = $ws->get( 'hoge/fuga', { q => 'piyo' } ); my $xml = $res->parse_response;この様な具合でresponse_parserを食わせてみると、文字化けが治ったりするかもしれない。
0 件のコメント:
コメントを投稿