web-dev-qa-db-ja.com

Symfony2がベンチマークでそれほどパフォーマンスが悪いのはなぜですか?

私の同僚と私は、トラフィックの多いWebサイトを開発するためのWebフレームワークを選択する過程にあります。 node.js + expressおよびphp + symfony2。どちらもすばらしいフレームワークですが、Symfony2は、ほとんどのWebフレームワークよりも優れているように見えるため、少し心配しています。

以下に、それを証明するベンチマークを示します。 http://www.techempower.com/benchmarks/

このため、おそらくnode.js + expressを使用しますが、ベンチマークでSymfony2のパフォーマンスがそれほど悪いのはなぜだろうかと思います。

45

最終的には、すべて正しいキャッシュ処理になります...

symfonyまたはPHP一般的にIS他の言語またはフレームワークよりも低速で、リッチで安全でテスト可能なWebアプリケーションを非常に高速に作成するツールを提供します。

Varnishおよび[〜#〜] esi [〜#〜](Edge side includes)などのリバースプロキシを使用する場合あなたが本当にsymfonyを通して更新する必要があるテンプレートの部分を提供することになります。あなたは非常に速い経験をするでしょう。

さらに、[〜#〜] apc [〜#〜]および最適化されたデータベースのようなオペコードキャッシュを使用する場合、人間のユーザー実際のアプリケーションでは数ミリ秒の違いに実際には気付かないでしょう。

リクエストに応じて、もう少し深く掘り下げて、考えるべきことをもう少しお伝えします。


キャッシングとパフォーマンス

クラウドサービス(s3、ec2、gae、...)をロードバランサーと組み合わせることでほとんど費用がかからず、簡単なプロビジョニング(シェフ、パペット、...)、そしてすべてのファンキーなものが利用可能になりました。大規模データやトラフィックの多いアプリケーションを実行および管理する中小企業。

より多くのストレージはキャッシュのためのより多くのスペースを意味します-より多くの計算能力はより速いキャッシュwarmimgを意味します。

人々がphpまたはフレームワークのパフォーマンスについて話している場合によく耳にするもの:

  • facebookはphpで実行されます
  • youp ** nはsymfonyで開発されました
  • ...

では、なぜこれらのサイトは完全に崩壊しないのでしょうか?キャッシングルーチンは賢いからです。

フェイスブック

たとえば、ステータスの更新を書く場合、facebookが何をするのか知っていましたか?

すべてのステータスの更新とともにデータベーステーブルに保存されません。また、友人がストリームにアクセスすると、すべての友人のすべてのステータスが提供される前にデータベースから取得されます。

facebookは、すべての友達のニュースストリームにステータスを書き込み、キャッシュのウォームアップを開始します。これで、すべてのストリームの配信準備が整い、友人の1人がストリームにアクセスすると、キャッシュバージョンが配信されます。コードの実行をほとんど伴わずに即座に。キャッシュウォーミングが終了すると、ストリームには新しく作成されたステータスのみが表示されます。私たちはここでmsについて話している...

これは何を教えてくれますか?現代の非常に頻繁なアプリケーションでは、ほとんどすべてがキャッシュから提供されており、ページの実際の計算に1msまたは5秒かかった場合、ユーザーは気づきません。

「現実の」シナリオでは、エンドユーザーはフレームワーク間でreq/secの違いに気付かないでしょう。マイクロキャッシングのようなシンプルなものであっても、hackernewsのランディングページにアクセスすると、vpsでホストされたブログがすぐにダウンすることはありません。

最後に、より重要なことは...私のフレームワークがツール、ドキュメント、チュートリアル、サンプルを提供していることです...このすべてをすばやく簡単に実行できるようにするためです。 symfonyは私に役立ちます!

あなたが立ち往生している場合...あなたのパフォーマンス関連の質問に喜んで答えることができる人は何人いますか?このフレームワークを使用して、すでにいくつの実世界のアプリケーションが作成されているか、近い将来作成されますか?

フレームワークを選択してコミュニティを選択します!

...大丈夫、それは重要な部分ですか...今、これらのベンチマークに戻ります:)


ベンチマークとセットアップ

ベンチマークのこれらすべての光沢のある色と派手なグラフでは、これらの各フレームワークでテストされたセットアップ(ウェブサーバー、データベースなど)が1つしかないのに、各フレームワークでさまざまな設定を行うことができます。

例:symfony2 + doctrineORM + mysqlを使用する代わりに、symfony + doctrineODM + MongoDBを使用することもできます。

MySQL ... MongoDB ...リレーショナルデータベース... NoSQLデータベース... ORM ...マイクロORM ...生SQL ...これらの構成ですべてが混ざり合っています------>リンゴとオレンジ。


ベンチマークと最適化

ほぼすべてのベンチマーク(PHPフレームワークを比較するだけの場合も含む)に共通する問題は、Webおよび「TechEmpower Web Framework Benchmarks」で見られますが、等しくない最適化です。

これらのベンチマークは、それらのフレームワークで可能な(そして経験豊富な開発者によって知られている)最適化を利用しません...少なくともsymfony2とそのテストでは、これは事実です。

最新のテストで使用されるsymfony2セットアップに関するいくつかの例:

  • 「composer install」は、最適化されたクラスマップオートローダーをダンプするために-oフラグで呼び出されていません( code
  • Symfony2は、Doctrine)のAPCキャッシュを使用しません( issue
  • 少数の必要なサービスだけではなく、DIコンテナー全体がコントローラーに注入されます。
  • これにより、セッターインジェクションが使用されます->コンテナをコンストラクタに直接インジェクトする代わりに、オブジェクトを作成してからsetContainer()メソッドを呼び出します(参照: BenchController extends Controller extends ContainerAware
  • エイリアス($ this-> get( 'service_name'))は、コンテナに直接アクセスするのではなく、コンテナからサービスを取得するために使用されます($ this-> container-> get( 'service_name'))。 ( コード
  • ...

リストは続きますが、これがどこにあるのか理解できたと思います。 90件の未解決の問題 今では...終わりのない物語。


開発とリソース

サーバーやストレージなどのリソースは安価です。本当に安い...開発時間と比較して。

私はかなり一般的な料金を請求するフリーランサーです。 2〜3日の時間を得ることができます...または計算能力とストレージの負荷を軽減できます!

フレームワークを選択するときは、迅速に開発するためのツールキットも選択します。完全に満足しない、機能を忍び寄る顧客と戦うための武器です。

代理店(またはフリーランサー)として、機能豊富なアプリケーションを短時間で構築したいと考えています。あなたは何かにこだわっているポイントに直面するでしょう...おそらくパフォーマンス関連の問題です。しかし、開発コストと時間にも直面しています。

もっと高価になるのは何ですか?追加のサーバーまたは追加の開発者?

127

このブログでは、質問の2番目の部分に回答しています。 http://symfony.com/blog/is-symfony-too-slow-for-real-world-usage

「hello、world」テストの速度がFooBarフレームワークの場合ほど良くないため、symfonyを終了するのは間違いです。生の速度は専門家にとって重要な要素ではありません。コストが重要な要素です。また、symfonyを使用したアプリケーションの開発、ホスティング、メンテナンスのコストは、他のソリューションのコストよりも低くなります。

フレームワークを選択するときは、開発の総コストを考慮する必要があります。つまり、フレームワークのコード品質(単体テスト、ドキュメントなど)、パフォーマンス(およびホスティングコスト)、すぐに使用できる機能の量と品質、コミュニティのサイズ、組織の使用状況を調べることを意味しますあなたやスケーラビリティなど.

Symfonyの開発者として、私はWordPress=技術的な観点から嫌いです。しかし、シンプルなWebサイトにはこれをお勧めします(さらには使用します!)。コミュニティの大きさ:WordPressデザイナー/開発者を雇うのは非常に簡単です。WordPressとSymfonyは何もしません。この場合の意味。

1