フレームワークは高速ですか、Hello Worldのパフォーマンスをテストするのに十分ですか

最速のフレームワーク「Phalcon」と「handmade」の例について。

ソースコードをコンパイルせずにPhalconを追い越します。









なぜPhalconなのか? これはパフォーマンスに関してかなり新鮮で有望なソリューションですが、どのフレームワークでも代用できます(これは記事から明らかになります)。



OpenSuseで使用されるphalcon 1.2.0beta1 64Bitをテストするため

接続された追加ライブラリのうち、PHP 5.3は実験の純度のためにphp5-APCのみでした。



マニュアルに従って、Phaclonアプリケーションを作成します
index.php

<?php try { //Register an autoloader $loader = new \Phalcon\Loader(); $loader->registerDirs(array( './app/controllers/', './app/models/' ))->register(); //Create a DI $di = new Phalcon\DI\FactoryDefault(); //Setting up the view component $di->set('view', function(){ $view = new \Phalcon\Mvc\View(); $view->setViewsDir('./app/views/'); return $view; }); //Handle the request $application = new \Phalcon\Mvc\Application($di); echo $application->handle()->getContent(); } catch(\Phalcon\Exception $e) { echo "PhalconException: ", $e->getMessage(); }
      
      





./app/controllers/IndexController.php

 <?php class IndexController extends \Phalcon\Mvc\Controller { public function indexAction() { echo "<h1>Hello!</h1>"; } }
      
      







開始し、動作します。memory_get_usage()は、692kbのメモリが使用されていることを示しており、これは素晴らしい結果です。

Apache Benchmarkは8707 rpsを生成します。





驚くほど素晴らしいパフォーマンス。



私たちはxdebugプロファイルを調べ、楽観的な見方を示し、多くのことが明らかになりました。 このアプリが特別な理由は何ですか? ただのエコーです。 私はPhalconに対して何もしていませんが、より複雑なタスクはどうですか?



ソースコードをコンパイルする必要なく、Phalconよりも高速なPHPフレームワークを作成することは可能ですか? 質問はありません、今すぐ行います。 そして、テストによってそれがより高速であることを証明します。



競合他社を作成し、ハンドメイドと呼びます
index.php:

 <?php require_once './Autoloader.php'; $autoloader = new Autoloader(array( 'paths'=>array( './app', './lib' ) )); $app = new Application(); $app->run();
      
      





Autoloader.php

オートローダーは彼のプロジェクトから取ることを決め、時間を節約しました。

ここのソースコード 、特に洗練されたものではなく、通常のPSR-0互換のスタートアップです。



./lib/Application.php

 <?php class Application { public function run() { $uri = $_SERVER['REQUEST_URI']; $paths = explode('/' , $uri); if(isset($paths[0]) && !empty($paths[0])){ $controller = ucfirst(strtolower($paths[0])).'_Controller'; }else{ $controller = 'Index_Controller'; } if(isset($paths[1]) && !empty($paths[1])){ $action = strtolower($paths[1]).'Action'; }else{ $action = 'indexAction'; } $controller = new $controller; $controller->$action(); } }
      
      





アプリ/インデックス/ Controller.php

 <?php class IndexController extends Controller { public function indexAction() { echo "<h1>Hello!</h1>"; } }
      
      







開始し、動作します。memory_get_usage()は、624kbのメモリが使用されたことを示しています。 素晴らしい結果です!



Apache Benchmarkは11793 rpsを生成します。





Voila 11793対8707 rps、15分間のプログラミング、最適化なしでそれほど難しくないことが判明しました。

美しいグラフィックを作成し、それらを記事のタイトルに近づけることは残っています。



おそらく、疑問が生じます。なぜ私が突然決定したのでしょうか。彼のお気に入りのフレームワーク「名前を挿入」を、機能性のないハックワークと比較できます。 目標と機能において比類のないプラットフォームテストが満載のインターネットをご覧ください。



これがトピックの全体のポイントです。比較する2つのソリューションのペイロードを見てみましょう。 xdebugが提供するプロファイルを開きます。 視覚化には、kcachegrindを使用します。



何が見えますか:

ファルコン 手作り






両方のソリューションは、ほぼ同じゼロ作業を実行します。



なぜこれすべて。


開発者として、私はしばしばさまざまなソリューションを検討します。使用するプラットフォームのパフォーマンスは私にとって重要なことです。 しかし、残念ながら、次のフレームワークを開いたので、実際のパフォーマンスを理解することはできません。開発者は何も言わないHello Worldテストを提供します。 ナビゲートするのは困難です。個人の経験と明らかにシステムの速度を低下させているものの理解に基づいて、特定のプラットフォームの実際のパフォーマンスを見つけることは残っています。

次のような指標:



利便性、機能性、パフォーマンスのためにバランスの取れたソリューションを選択する必要があります。 私の意見では、後者が最適化が最も簡単な場所です。



道徳


ポピュリストのスローガンと美しい広告、トレンドに注意を払ってはいけません。 可能な限り多くのソリューションを学び、それらから最善を引き出し、成功した実装を組み合わせます。 テストを書いたり読んだりしないでくださいHello Worldは時間の無駄です。 特定の問題を解決するために調整されたツールを選択してください。



All Articles