PRESSMAN*Tech

HTML5, CSS3からWordPress, AWS, Elasticsearchまで。プレスマンのスタッフが綴る技術ブログ。

Zend_Configの速さ比較

Zend_Configはini,xml,json,yamlと配列で書くことができます。何が速いってそりゃ、PHPの配列で書くのが速いでしょうけど(確かめていませんが)それはおいておいてきます。
配列を除いた4つの形式で何が一番速いかを調べてみました。環境はWindowsXP上のPHP5.3.3です。
やり方は単純で同じ内容の設定ファイルを1000回パースするだけです。つまり

$config = new Zend_Config_Ini('test.ini', 'common');
$config = new Zend_Config_Xml('test.xml', 'common');
$config = new Zend_Config_Json('test.json', 'common');
$config = new Zend_Config_Yaml('test.yaml', 'common');

をそれぞれ1000回繰り返すだけ。当然、ファイルの読み込みも1000回繰り返されますが、実際にはファイルも読み込まれるわけなので問題なしということで。
また、設定ファイルの内容でも速度は変わってきます。そこで色々なファイルを試してみてつかんだ結果です。

まず、YamlはYaml用のライブラリが無く、PHPのYaml関数を使えなかったので使えないと思いきや使えます。ただし、ライブラリを使ってるわけではないので他の数十倍の遅さです。
Zend_Config_Yaml::decodeのコメントを見ると
Very dumb YAML parser
なんて書いてあったりします。ってことで残念ながら論外。

で、テスト前の予想では単純に

ini > json > xml

の順で速いんじゃないかなと予想でしたが結構条件によって変わりました。

 

まず、

hogehoge = piyo

みたいな設定が簡単でたくさんあるだけの場合は文句なしにiniがぶっちぎり。xmlとJsonは遅くは無いけどiniが速すぎる感じ。

ini >>> xml >= json

10行と1000行でテストしてみたが多くなっても変わらず。

次にZend_Applicationを使うような場合の

includePaths.library = APPLICATION_PATH "/modules"
bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
bootstrap.class = "Bootstrap"
pluginPaths.Pressman_Application_Resource = APPLICATION_PATH "/../library/Pressman/Application/Resource"
autoloaderNamespaces[] = "Pressman"
resources.frontController.defaultmodule     = "index"
resources.frontController.prefixDefaultModule  = true
resources.frontController.controllerDirectory.index = APPLICATION_PATH "/modules/index/controllers"
resources.frontController.controllerDirectory.admin = APPLICATION_PATH "/modules/admin/controllers"

みたいにちょっと複雑な100行程度の設定ファイルだと

xml >= json > ini

これが300行になると

json >= xml >> ini

さらに多くなると

json > xml >>> ini

つまり、設定数が多くなればなるほどjsonが早くなるというか他が遅くなる傾向になっています。

まあ、相対的には速度差は出ますが、すべての形式で問題になるほど遅いわけではなさそうなので、書きやすさや見易さで書けばいいんじゃないのという身も蓋も無い結論になってしまいました。

おまけ:Zend_Configでの配列

設定ファイルで配列を扱いたいときにiniだと

hoge[] = 1
hoge[] = 2

もしくは

hoge.0 = 1
hoge.1 = 2

とすればよかったりします。これがxmlだと

<hoge>1</hoge>
<hoge>2</hoge>

と書けばいいんですが、値が一つだけの配列の場合困ります。iniならば単純にhoge[]=1と書けばいいだけですがxmlだと書きようが無いです。なにかやり方があるのかも知れませんが・・・・。また、xmlは値がすべて文字列扱いになります。当たり前といえば当たり前なんですが、iniやjsonはその点便利ですね。

投稿者:taichi

taichi の紹介

何でもやりますが、一応プログラマです。
このエントリーをはてなブックマークに追加

私たちと一緒に働きませんか?

株式会社プレスマンでは、プログラミングが大好きな方、仕事を通してさらにスキルを磨きたい方を募集しています。まずは募集職種をご覧の上、お気軽にお問い合わせください。あなたとお会いできるのを楽しみにしています。

プレスマンの採用情報を見る →

コメントは受け付けていません。

▲ 先頭へ戻る