国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

目次
キーテイクアウト
実行時間
これは、コンテナによって行われた內(nèi)部キャッシングをトリガーした可能性もありますが、それを公正に保つために同じ処理が各容器に適用されました
結(jié)論
依存噴射は、PHPの固體原理にどのように関連していますか?
ホームページ バックエンド開発 PHPチュートリアル PHP依存関係噴射コンテナパフォーマンスベンチマーク

PHP依存関係噴射コンテナパフォーマンスベンチマーク

Feb 20, 2025 pm 12:23 PM

PHP依存関係噴射コンテナパフォーマンスベンチマーク

キーテイクアウト

  • 依存関係噴射コンテナ(DIC)は、より大きなPHPアプリケーションとフレームワークでコードベースを維持するための重要なツールですが、パフォーマンスに影響を與える可能性があります。 PHPの有名なDICには、PHP-DI、SymfonyDependencyInjection、Zenddi、Ornodi、Dice、およびAura.di.
  • が含まれます。 DICのパフォーマンスは、実行時間、メモリ使用量、および含まれるファイルの數(shù)の観點から測定されます。最後のメトリックは、アプリケーションの全體的な重みに大きく影響する可能性があるため、特に重要です。
  • テスト済みの容器の中で、サイコロ、オーラ、オルノの中で最速で、サイコロは全體的に最速でした。 PHP-DIは、ユニークな機能を持っているにもかかわらず、パフォーマンスが大幅にヒットしました。 Symfonyは、設(shè)定がより困難ですが、中央で実行され、有名なプロジェクトからコンテナを探している人にとっては好ましい選択となります。
  • パフォーマンスの違いにもかかわらず、DICの選択は構(gòu)成の構(gòu)文と機能も考慮する必要があります。サイコロ、オーラ、Ornoのパフォーマンスの違いは、実際のアプリケーションではごくわずかです。したがって、開発者は、どのような作業(yè)を好むかに基づいて選択する必要があります。
  • ほとんどのフレームワークと大規(guī)模なPHPアプリケーションは、よりメンテナンス可能なコードベースの目標を持って依存関係噴射コンテナを使用します。ただし、これはパフォーマンスに影響を與える可能性があります。読み込み時間が重要であるため、サイトを迅速に保つことは相変わらず重要です。今日は、相対的なパフォーマンスがどのようなものかを確認するために、いくつかのPHP依存噴射容器をベンチマークします。
  • コンセプトに不慣れな人のために、依存関係噴射コンテナは、オブジェクトツリーを自動的に構(gòu)築するソフトウェアです。たとえば、データベースインスタンスを必要とするユーザーオブジェクトを検討してください。
依存関係噴射コンテナを使用して、パラメーターを手動で提供する必要なく、オブジェクトツリーを自動的に構(gòu)築できます。

これが呼ばれるたびに、ユーザーオブジェクトはデータベースオブジェクトを「注入」して作成されます。

PHPで利用できるいくつかのよく知られている(そしてあまり知られていない)容器があります:

  • php-di、人気のあるdiコンテナ
  • symfony -dependencyinjection、symfonyフレームワークによって提供される依存関係噴射コンテナ
  • Zenddi Zend Framework
  • によって提供される依存関係噴射コンテナ
  • Ornodi、機能が限られているが、パフォーマンスを念頭に置いて開発されたあまり知られていないコンテナ
  • ダイス、軽量であることに焦點を當てたもう1つのあまり知られていない容器。完全な開示、私はこのコンテナの著者ですが、この分析では完全に目的にほかなりません。
  • aura.di、最小限の機能を備えたかなり人気のある容器

Pimpleの単語:Pimpleは依存関係噴射コンテナとして宣伝されていますが、コンテナからオブジェクトを取得することは常に同じインスタンスを返します。テストされます すべてのコンテナはさまざまな機能をサポートしていますが、このベンチマークは、依存噴射容器に必要な基本的な機能をカバーします。つまり、オブジェクトを作成し、必要な場所で依存関係を注入します。

依存噴射のどの側(cè)面が測定されますか?

実行時間

    メモリの使用
  1. 含まれるファイルの數(shù)。これはパフォーマンスにほとんど影響を與えませんが、ライブラリがどれほど軽量でポータブルであるかを示す良い指標です。 DIの選択のためにプロジェクトで何百ものファイルを出荷する必要がある場合、それはあなた自身のアプリケーションの全體的な重みに大きな影響を與える可能性があります。
  2. 環(huán)境のテスト
  3. すべてのテストは、2014年7月7日の時點で、Arch Linux(3.15カーネル)、PHP 5.5.13、および各コンテナの最新バージョンを?qū)g行している同じマシンで実行されました。

提示されたすべての実行時間數(shù)は、最速よりも20%を超えているものを破棄した後、平均10回の実行です。

テスト1 - オブジェクトのインスタンスを作成

このテストでは、各コンテナを使用して、10,000回のシンプルなオブジェクトを作成します

依存関係噴射コンテナがない場合、これは次のように記述されます。

テストコード(githubで):オーラ、サイコロ、ornodi、php-di、symfonydependencyinjection、zenddi

ご覧のとおり、ここには2つの明確なキャンプがあります。オーラ、サイコロ、オルノは、PHP-DI、Symfony、Zenddiの約10倍高速です。

<span>$user = new User(new Database());</span>

実行時間と同様に、中央のどこかにシムフニーが座っている2つの異なるグループがあります。

PHP依存関係噴射コンテナパフォーマンスベンチマーク

これは、各コンテナがどれほど軽量であるかを非常に示しており、メモリの使用の違いを説明するために何らかの形で進んでいます。 Zenddiで使用される多くのファイルは一般的なフレームワークファイルであるため、Zend Frameworkを使用している場合、Zenddiを使用すると、ファイルがアプリケーションの他の場所で再利用される可能性が高いため、Zenddiを使用すると同じメモリオーバーヘッドが発生しないことに注意してください。

同様に、PHP-DIは教義図書館に大きく依存しています。プロジェクトで教義を使用している場合、PHP-DIのメモリオーバーヘッドが削減されます。

しかし、フレームワークスタックの一部であるにもかかわらず、Symfony -dependencyInjectionは完全にスタンドアロンであり、他のSymfonyプロジェクトからの依存関係なしに機能することを見るのは素晴らしいことです。

オーラ、サイコロ、ornoには外部依存関係がありません。これにより、ファイルがカウントされるのに役立ちます。

テスト2 - オートローディングを無視

ファイルの読み込みはパフォーマンスに影響を與え、ZendとPHP-Diの両方がかなりの數(shù)のファイルをロードすると、最初にクラスの単一のインスタンスを作成することにより、自動裝置時間を無視して同じテストが実施され、必要なクラスが測定する前に自動浸漬されたことを確認しました。時間。

これは、コンテナによって行われた內(nèi)部キャッシングをトリガーした可能性もありますが、それを公正に保つために同じ処理が各容器に適用されました

同等のPHPコード:

テストコード(githubで):オーラ、サイコロ、ornodi、php-di、symfonydependencyinjection、zenddi

<span>$user = new User(new Database());</span>

PHP依存関係噴射コンテナパフォーマンスベンチマーク

PHP依存関係噴射コンテナパフォーマンスベンチマーク予想通り、メモリの使用は変更されず、オートローダーの時間が測定されていないため、パフォーマンスはわずかに優(yōu)れています。ただし、これは、42ファイルを読み込むことでさえ、総実行時間に無視できる影響を與え、相対パフォーマンスが同じままであることを示しています。數(shù)十のファイルをロードすることは、PHP-DIとZenddiのパフォーマンスが比較的遅い原因ではありません。 ??>

ロードファイルのオーバーヘッドを無視した後でも、ここにはまだ2つの異なる球場があります。オーラ、サイコロ、オルノはパフォーマンスとメモリの使用量が非常に似ていますが、PHP-DI、Zend、Symfonyは互いに競爭しています。

今後のすべてのテストは、自動裝備時間を無視して、測定されているコンテナのパフォーマンスであることを確認します。 PHP依存関係噴射コンテナパフォーマンスベンチマークテスト3 - ディープオブジェクトグラフ

このテストは、コンテナにこのオブジェクトのセットを10,000回構(gòu)築させることによって行われます。

テストコード(githubで):オーラ、サイコロ、ornodi、php-di、symfonydependencyinjection、zenddi

注:テストコードを見ることでわかるように、Symfony、PHP-DI、およびAURAには、このテストを?qū)g行するために他のコンテナよりもかなり多くの構(gòu)成コードが必要です。構(gòu)成時間はテストに含まれていませんでした

PHP依存関係噴射コンテナパフォーマンスベンチマーク

再び、トップ3の間にはほとんど違いがありません。ダイスはオーラよりも20%速く、Ornoよりも70%高速です。 3つすべては、Zend、Php-Di、Symfonyよりもかなり高速です。 3つのトップコンテナの違いは非常にわずかであるため、このような人工ベンチマークの外側(cè)の速度の違いに気付かないでしょう。

zend、php-di、および程度は低いsymfonyはここで遅くなります。 Zendは37秒かかり、Diceが1秒未満で管理するタスクを?qū)g行します。確かに些細な違いではありません。繰り返しになりますが、Symfonyは有名な容器の中でリードしています。

PHP依存関係噴射コンテナパフォーマンスベンチマーク

メモリとファイルカウントは、他のテストで見たものと一致しています。 PHP依存関係噴射コンテナパフォーマンスベンチマークテスト4 - コンテナからサービスを取得

diコンテナも、アプリケーション全體で再利用されるサービスを保存および取得する必要があります。このテストでは、コンテナから単一のインスタンスを繰り返し取得します。

純粋なPHP相當:

テストコード(githubで):オーラ、サイコロ、ornodi、php-di、symfonydependencyinjection、zenddi

<span>$user = new User(new Database());</span>

これは、以前の結(jié)果に基づいて予想外です。 ZendとSymfonyを除くすべての容器は、わずか0.01が上位4つの結(jié)果を分離してほぼ等しくなります。 Symfonyはそれほど遅れていませんが、Zendは他のZendよりも10倍遅いです。

PHP依存関係噴射コンテナパフォーマンスベンチマーク

メモリの使用量とファイルの數(shù)は、実行時間全體で見たコンテナ間の同じ分割で予測可能になりつつあります。 PHP依存関係噴射コンテナパフォーマンスベンチマークテスト5 - サービスを挿入

最終テストは、オブジェクトをどれだけ迅速に構(gòu)築できるかを確認し、サービスを注入することです。これには、形式が表示されます:PHP依存関係噴射コンテナパフォーマンスベンチマーク

テストコード(githubで):オーラ、サイコロ、ornodi、php-di、symfonydependencyinjection、zenddi

興味深いことに、オーラはこのテストでわずかなリードを奪いました。ただし、SymfonyとAuraには明示的な構(gòu)成のいくつかの行が必要なため、他のコンテナが依存関係を自動的に解決するため、それはまったく似たようなテストではありません。コンテナを構(gòu)成するのにかかった時間は、ベンチマークの一部ではありませんでした。
<span>$user = $container->get('User');</span>
驚くべきことに、PHP-DIはこのタスクで最も遅いです。

PHP依存関係噴射コンテナパフォーマンスベンチマーク

結(jié)論

パフォーマンスだけでも、サイコロ、オーラ、オーノはすべて強力な競爭相手であり、サイコロは全體的に最も速く、最終テストではオーラが最速です。 2つの異なるグループの違いは明らかですが、各コンテナの機能を比較するのは興味深いものです。あなたが期待するように、機能の數(shù)とパフォーマンスは完全に相関しません。 PHP-DIとDICEの両方にユニークな機能が含まれていますが、PHP-DIはそうするために大きなパフォーマンスヒットを取ります。オーラは高速ですが、多くの手動構(gòu)成が必要であり、予想されるように非常に最小限の機能を持っていますが、サイコロとORNOのパフォーマンスは非常に似ていますが、構(gòu)成するためにははるかに少ないコードが必要です。

Symfonyはすべてのテストで非常に中間地域にありますが、Auraと同様に、サポートタイプのヒントされたパラメーターではないため、はるかに困難なタスクです。有名なプロジェクトからコンテナを探している場合は、パフォーマンスが重要な場合は、Symfonyが選択のコンテナでなければなりません。

それは、純粋なパフォーマンスがあなたがその後のものである場合、その後のサイコロとオーラは、Ornoが非常に近いという明確な勝者です。ただし、サイコロ、オーラ、オーノのパフォーマンスの違いが実際のアプリケーションでは無視できるように、構(gòu)成の構(gòu)文とそれぞれの機能を調(diào)べる価値があります。

テスト用のすべてのコードはGitHubで入手できます。注:githubリポジトリには、プロジェクトにコンポーザーを使用するのではなく、テストされたライブラリのコピーが含まれています。これは、テストした正確なバージョンでコードを?qū)g行して同じ結(jié)果を取得できるようにするためです。 > PHP依存関係噴射コンテナパフォーマンスベンチマークに関するよくある質(zhì)問(FAQ)PHP依存関係噴射コンテナパフォーマンスベンチマークの重要性は何ですか? ??

依存関係噴射コンテナパフォーマンスベンチマークは、異なる依存関係噴射コンテナの効率と速度を理解する上で重要です。これらのベンチマークは、さまざまなコンテナの比較分析を提供し、開発者が特定のニーズに基づいて使用するコンテナについて情報に基づいた決定を下すのに役立ちます。彼らは、PHPアプリケーションのパフォーマンスを最適化する際の重要な要因であるメモリの使用と時間消費の観點から、各コンテナのパフォーマンスに関する洞察を提供します。 > PHPの依存関係注射(DI)は、ゆるい結(jié)合、テスト可能性の向上、およびコードの再利用性の向上を促進することにより、コードの品質(zhì)を向上させます。依存関係を注入することにより、コンポーネントはより獨立し、コードの変更とテストが容易になります。また、各クラスがすべきことのみを行い、よりクリーンで保守可能なコードにつながるため、単一の責任の原則を奨勵します。PHPにおける異なるタイプの依存性注入は

PHPには、コンストラクターインジェクション、セッター注入、界面注入の3つの主要なタイプがあります。コンストラクターインジェクションは、クラスコンストラクターを介して依存関係が提供される場所です。セッターインジェクションには、メソッドを介して依存関係を提供することが含まれます。インターフェイスインジェクションでは、依存関係を注入するインターフェイスを?qū)g裝するために従屬クラスが必要です。コンテナ、アプリケーション內(nèi)のサービスまたはオブジェクトのインスタンス化と構(gòu)成を管理します。依存関係のインスタンスの作成と返卻を擔當する工場として機能します。また、共有インスタンスを管理し、共有サービスが要求されるたびに単一のインスタンスが返されるようにします。コンテナ、使いやすさ、パフォーマンス、コミュニティサポート、プロジェクトとの互換性などの要因を考慮してください。パフォーマンスは特に重要であり、PHP依存噴射コンテナパフォーマンスベンチマークが役立つ場所です。さまざまなコンテナのパフォーマンスの比較分析を提供し、情報に基づいた決定を下すのに役立ちます。クラスの依存関係。これにより、テスト中に依存関係をock笑またはスタブを張ることができ、クラスを単獨でテストすることができます。また、予測可能な応答を提供する模擬依存関係を挿入し、テストをより信頼性が高く書きやすくするため、ユニットテストを簡単に記述することができます。

はい、そのサイズや複雑さに関係なく、任意のPHPプロジェクトで依存関係を使用できます。これは、コードの再利用可能性、モジュール性、およびテスト可能性を促進する設(shè)計パターンであり、PHP開発者にとって貴重なツールになります。追加の抽象化レイヤーのためにわずかなオーバーヘッドを?qū)毪扦蓼?。アプリケーションのパフォーマンスへの影響は一般に無視できます。コードの品質(zhì)、テスト可能性、保守性の改善の利點は、しばしばマイナーなパフォーマンスコストを上回ります。

依存噴射は、PHPの固體原理にどのように関連していますか?

??

依存噴射は、特に依存関係の反転原理(DIP)に密接に関連しています。 DIPは、高レベルのモジュールは低レベルのモジュールに依存してはならないが、どちらも抽象化に依存する必要があると述べています。依存関係の噴射により、コンクリートクラスではなく、インターフェイスまたは抽象クラスとして依存関係を注入できるようにすることでこれを可能にします。単一のPHPプロジェクトで複數(shù)の依存関係噴射コンテナを使用することができますが、通常はお勧めしません。複數(shù)のコンテナを使用すると、管理と理解が困難なコードにつながる可能性があります。通常、プロジェクトのニーズに最適なコンテナを1つ選択し、それに固執(zhí)することをお勧めします。

以上がPHP依存関係噴射コンテナパフォーマンスベンチマークの詳細內(nèi)容です。詳細については、PHP 中國語 Web サイトの他の関連記事を參照してください。

このウェブサイトの聲明
この記事の內(nèi)容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰屬します。このサイトは、それに相當する法的責任を負いません。盜作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡(luò)ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脫衣畫像を無料で

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード寫真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

寫真から衣服を削除するオンライン AI ツール。

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中國語版

SublimeText3 中國語版

中國語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統(tǒng)合開発環(huán)境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

PHPベースのAPIをバージョン化するためのベストプラクティスは何ですか? PHPベースのAPIをバージョン化するためのベストプラクティスは何ですか? Jun 14, 2025 am 12:27 AM

Toversionaphp Basedificefectivivivity、useurl Basedversioning forclarity-andeaseaseasedease、depateversionedcodetoavoidconflicts、deprecateoldversions withclearcommunication、andconsider-customheadersally whendary.starttheversionionintheurl(e.g。、/api/v

PHPに認証と承認を?qū)g裝するにはどうすればよいですか? PHPに認証と承認を?qū)g裝するにはどうすればよいですか? Jun 20, 2025 am 01:03 AM

tosecurelyhandLeauthenticationAndauthorizationInizationInization、followTheSteps:1.LwayShashPasswordswithPassword_hash()andverifyusingpassword_verify()、usepreparedStatementStatementStatementStatementStatementStain、andstoreUserdatain $ _SessionAfterlogin.2.implementRementRementRementRementRementRementRementRole

PHPにおける手続き型とオブジェクト指向のプログラミングパラダイムの違いは何ですか? PHPにおける手続き型とオブジェクト指向のプログラミングパラダイムの違いは何ですか? Jun 14, 2025 am 12:25 AM

ProceduralAndObject-OrientedProgramming(OOP)InphpdifferSifically-datability、andDatahandling.1.proceduralprogramsessusessuseSideSized funized、surtableforsmallscript.2.ooporganizescodeIntoclassesandobjects、ModelingReal-worden

PHPの弱い參照(WeakMap)とは何ですか? PHPの弱い參照(WeakMap)とは何ですか? Jun 14, 2025 am 12:25 AM

phpdoesnothaveabuiltinweakmapbutofferswutreferenceforsimilarfunctionality.1.weakreferenceallowsholdingReferences withoutpreventinggarbagecollectrection.2.itisusfulfurcaching、eventlisteners、およびmetadatawithectingovecting objectinimulatea

PHPでファイルアップロードを安全に処理するにはどうすればよいですか? PHPでファイルアップロードを安全に処理するにはどうすればよいですか? Jun 19, 2025 am 01:05 AM

PHPでファイルアップロードを安全に処理するために、コアはファイルタイプを確認し、ファイルの名前を変更し、権限を制限することです。 1。Finfo_File()を使用して実際のMIMEタイプを確認し、Image/JPEGなどの特定のタイプのみが許可されます。 2。uniqid()を使用してランダムファイル名を生成し、非webルートディレクトリに保存します。 3. PHP.iniおよびHTMLフォームを介してファイルサイズを制限し、ディレクトリ権限を0755に設(shè)定します。 4. Clamavを使用してマルウェアをスキャンしてセキュリティを強化します。これらの手順は、セキュリティの脆弱性を効果的に防止し、ファイルのアップロードプロセスが安全で信頼性が高いことを確認します。

PHPのNOSQLデータベース(Mongodb、Redisなど)とどのように対話できますか? PHPのNOSQLデータベース(Mongodb、Redisなど)とどのように対話できますか? Jun 19, 2025 am 01:07 AM

はい、PHPは、特定の拡張機能またはライブラリを使用して、MongoDBやRedisなどのNOSQLデータベースと対話できます。まず、MongoDBPHPドライバー(PECLまたはComposerを介してインストール)を使用して、クライアントインスタンスを作成し、データベースとコレクションを操作し、挿入、クエリ、集約、その他の操作をサポートします。第二に、PredisライブラリまたはPhpredis拡張機能を使用してRedisに接続し、キー価値設(shè)定と取得を?qū)g行し、高性能シナリオにPhpredisを推奨しますが、Predisは迅速な展開に便利です。どちらも生産環(huán)境に適しており、十分に文書化されています。

PHPの==(ゆるい比較)と===(厳密な比較)の違いは何ですか? PHPの==(ゆるい比較)と===(厳密な比較)の違いは何ですか? Jun 19, 2025 am 01:07 AM

PHPでは、==と==の主な違いは、タイプチェックの厳格さです。 ==タイプ変換は比較の前に実行されます。たとえば、5 == "5"はtrueを返します。===リクエストは、trueが返される前に値とタイプが同じであることを要求します。たとえば、5 === "5"はfalseを返します。使用シナリオでは、===はより安全で、最初に使用する必要があります。==は、タイプ変換が必要な場合にのみ使用されます。

PHP(、 - 、 *、 /、%)で算術(shù)操作を?qū)g行するにはどうすればよいですか? PHP(、 - 、 *、 /、%)で算術(shù)操作を?qū)g行するにはどうすればよいですか? Jun 19, 2025 pm 05:13 PM

PHPで基本的な數(shù)學操作を使用する方法は次のとおりです。1。追加標識は、整數(shù)と浮動小數(shù)點數(shù)をサポートし、変數(shù)にも使用できます。文字列番號は自動的に変換されますが、依存関係には推奨されません。 2。減算標識の使用 - 標識、変數(shù)は同じであり、タイプ変換も適用されます。 3.乗算サインは、數(shù)字や類似の文字列に適した標識を使用します。 4.分割はゼロで割らないようにする必要がある分割 /標識を使用し、結(jié)果は浮動小數(shù)點數(shù)である可能性があることに注意してください。 5.モジュラス標識を採取することは、奇妙な數(shù)と偶數(shù)を判斷するために使用でき、負の數(shù)を処理する場合、殘りの兆候は配當と一致しています。これらの演算子を正しく使用するための鍵は、データ型が明確であり、境界の狀況がうまく処理されるようにすることです。

See all articles