OrePHPはこれでさらに高速になった(OrePhalcon)
前回、OrePHPはシンプルで速いクールなフレームワーク - ぷぎがぽぎという内容の記事を書きましたが、これぐらいの速度で満足してはいけないということで更に高速化を考えました。
Cのエクステンションで書かれた超高速PHPフレームワーク Phalcon
Phalconというフレームワークをご存知でしょうか?フレームワークをCのエクステンションで書いちゃった超高速PHPフレームワークです。
最速フレームワークと宣言してあるだけのことがあるベンチマーク結果が以下のグラフです。
前回のベンチマークをも超越しそうな結果です。というわけで、早速HelloWorldでOrePHPと比べてみます。
まずはPhalconをインストール。
エクステンションなのでgitからcloneしてきたものをいつもどおりphpnizeしてmake。
あとはphp.iniに
extension=phalcon.so
を追加。
環境はPHP5.4 + nginx なので
nginxの設定に以下を追加
location / { if (!-e $request_filename) { rewrite ^/(.+)$ /index.php?_url=$1 last; break; } }
_urlというパラメータで渡すのを忘れずに。
準備はできたのでさっそくベンチ。
name | trans/sec | relative(%) |
---|---|---|
OrePHP | 484.76 | 100% |
Phalcon | 738.94 | 152% |
はい。簡単に負けましたw
最速と自負するだけのことはあります。
じゃあ、Phalconをベースにすればいいじゃまいか
OrePHPではSymfony ComponentsのRoutingコンポーネントを使っていましたが、たぶんこれがCで書かれていないから負けるんだということで、Phalconのルーティングを使うようにしてOrePhalconを作ってみました。
<?php ini_set('display_errors', 1); error_reporting(-1); $router = new Phalcon_Router_Regex(); $router->setBaseUri('/phalcon'); $router->add("hello/(\w+)", array( "controller" => "hello", "action" => "say", "name" => 1, )); $router->handle(); $controller = $router->getControllerName(); $action = $router->getActionName(); $params = $router->getParams(); try{ $controllerFilePath = __DIR__ . '/../app/controllers/' . $controller . ".php"; if (!file_exists($controllerFilePath)) { throw new Exception("controller file is not found"); } require $controllerFilePath; } catch (Exception $e) { echo $e->getMessage(); exit; } $class = ucfirst($controller); echo $class::$action($params);
今回は最速を目指すのでフレームワークとしてコアファイルはこのファイル1つです。
フレームワークのコアクラスはエクステンションで書かれているのでrequireすら不要です。
あとは、実際に呼び出されるコントローラーファイルをHello.phpとして用意します。
<?php class Hello { public static function say($params) { return "Hello " . $params['name']; } }
OrePhalconは最速になれたのか?
name | trans/sec | relative(%) |
---|---|---|
OrePHP | 484.76 | 100% |
Phalcon | 738.94 | 152% |
OrePhalcon | 923.60 | 191% |
はい。最速でした。
Phalconほんと速いですね。