検索
ホームページバックエンド開発PHPチュートリアルrequire_once のパフォーマンスは実際には非常に低い_PHP チュートリアル

テスト後、require_once はパフォーマンスが低い構文構造です。もちろん、このパフォーマンスの低さは、プロジェクトで現在使用されている require メソッドについて説明し、同時に実験コードを通じてその効率性を証明します。使用中に問題が発生しても、他の人が同じ問題に遭遇することを防ぐことができます。

  • require: ファイルをインポートし、実行時にコンパイルしてインポートします。
  • require_once: この関数は、このファイルが参照されるとコンパイルおよび導入されなくなる点を除いて、require と同等です。

上記が2つの違いです。 2 つの唯一の違いは、require_once が参照されているかどうかを判断するメカニズムを備えていることであることがわかります。インターネットで検索すると、require_once のパフォーマンスが require よりもはるかに低いというデータが数多く見つかります。この実験はここでは行いません。

私たちのプロジェクトのアプローチは次のとおりです: 必要な場合は、isset($xxxxxx) または require 'xxxxx.php' を使用して、各ファイルの先頭でグローバル変数を定義します。

このアプローチの欠点は何ですか?

$xxx にグローバル変数が定義されている場合、そのファイルが関数内で必要な場合、その変数はグローバルではなく関数のローカル変数として解析されます。そのため、関数内で isset($xxx) または require 'xxx を実行します。文法構造 .php' は無効になり、クラスの再定義、メソッドの再定義など、予期せぬ結果が確実に発生します。

過去の教訓から、グローバル変数を定義するには、 $GLOBALS['xxx'] を使用してください。直接定義すると少し遅くなりますが、間違っているよりははるかに優れています。

以前のグローバル変数は直接定義されていたため、今日同僚と議論しているときに、別の書き方を考えました:

定義された場所は引き続き $xxx メソッドを使用して直接定義され、require メソッドで変更されます (ファイル ヘッダーで定義されたグローバル変数はファイル名に関連付けられます)。

リーリー

この方法は動的変数を使用します。直接 GLOBALS 方法と比較すると、次の 2 つの重大な欠点があります。

動的変数の導入により、パフォーマンスは GLOBALS メソッドより約 2 倍遅くなります。
  1. 間接参照の問題は、間接参照されるファイルの名前を予測できないため解決できません。したがって、間接参照されるファイル内で定義されているマーク付きグローバル変数を宣言するために global を使用することはできません。
  2. さて、これが GLOBALS メソッドの require と require_once のテストです:

require_requirionce.php

リーリー

require_requirionce_require.php (requireのテストに使用する導入ファイル)

リーリー

require_requirionce_requirionce.php (require_onceのテストに使用される導入ファイル)

リーリー

テスト結果は以下の通りです(単位:秒):

メソッドを使用せずにメソッドを設定または要求する: 0.22953701019287
  • isset または require メソッドを使用します: 0.23866105079651
  • require_once メソッド: 2.3119640350342
  • メソッドを使用しない場合の require 速度は、メソッドを使用する場合よりもわずかに高速であることがわかります。どちらも、require_once の速度の約 10 倍です。

それでは、パフォーマンスの低下は正確にどこで発生するのでしょうか?

上記の require_requireone.php ファイルの test1 メソッドで、 pathinfo($filename) とコメントしました。これは、私の当初の意図は、マークされたグローバル変数名としてサフィックスのないファイル名を使用することであったためですが、 pathinfo を使用すると、このメソッドのパフォーマンス消費は基本的に require_once と同じです。そこで、pathinfo への別の呼び出しを追加してテストを行いました。確かに、pathinfo が問題を引き起こしていました。そこで、後で現在のバージョンに修正し、ファイル名を直接変数名として使用しました。ファイル名が重複するのが怖い場合は、パス名を追加することもできます...

推測: pathinfo を追加した後、require と require_once のパフォーマンス消費は基本的に同じなので、PHP の require_once の内部処理はそれに基づいていると推測できますか? PHP5.3 では require_once が大幅に最適化されたと言われていますが、私はテスト中に PHP5.3.5 バージョンを使用しましたが、以前のバージョンよりも大幅に最適化されているだけでしょうか。これはまだテストされていません....

test1 メソッドを次のように変更してみてください: isset($GLOBALS[substr($filename, 0, strlen($filename) - 4)]) または require $filename;

手動の文字列インターセプトを使用します。もちろん、インターセプトには時間がかかりますが、pathinfo バージョンよりも優れています。今回の検証結果は以下の通りです

メソッドを使用せずにメソッドを設定または要求する: 0.21035599708557
  • isset または require メソッドを使用します: 0.92985796928406
  • require_once メソッド: 2.3799331188202
  • require_once を isset または require モードに変更する場合は、次の点に注意する必要があります:

各ファイルヘッダーは、$GLOBALS['XXX'] = 1; を使用して定義された一意のマーカー変数を定義し、変数名はファイル名またはパスを含むファイル名にすることをお勧めします (別のファイル名が繰り返される場合) )
  1. カスタム require メソッドを定義します:
  2. リーリー
  3. www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/752440.html技術記事テスト後、require_once はパフォーマンスが低い構文構造です。もちろん、このパフォーマンスの低さは、現在プロジェクトで使用されている require メソッドについて説明します。
声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
PHP対Python:違いを理解しますPHP対Python:違いを理解しますApr 11, 2025 am 12:15 AM

PHP and Python each have their own advantages, and the choice should be based on project requirements. 1.PHPは、シンプルな構文と高い実行効率を備えたWeb開発に適しています。 2。Pythonは、簡潔な構文とリッチライブラリを備えたデータサイエンスと機械学習に適しています。

PHP:それは死にかけていますか、それとも単に適応していますか?PHP:それは死にかけていますか、それとも単に適応していますか?Apr 11, 2025 am 12:13 AM

PHPは死にかけていませんが、常に適応して進化しています。 1)PHPは、1994年以来、新しいテクノロジーの傾向に適応するために複数のバージョンの反復を受けています。 2)現在、電子商取引、コンテンツ管理システム、その他の分野で広く使用されています。 3)PHP8は、パフォーマンスと近代化を改善するために、JITコンパイラおよびその他の機能を導入します。 4)Opcacheを使用してPSR-12標準に従って、パフォーマンスとコードの品質を最適化します。

PHPの未来:適応と革新PHPの未来:適応と革新Apr 11, 2025 am 12:01 AM

PHPの将来は、新しいテクノロジーの傾向に適応し、革新的な機能を導入することで達成されます。1)クラウドコンピューティング、コンテナ化、マイクロサービスアーキテクチャに適応し、DockerとKubernetesをサポートします。 2)パフォーマンスとデータ処理の効率を改善するために、JITコンパイラと列挙タイプを導入します。 3)パフォーマンスを継続的に最適化し、ベストプラクティスを促進します。

PHPの抽象クラスまたはインターフェイスに対して、いつ特性を使用しますか?PHPの抽象クラスまたはインターフェイスに対して、いつ特性を使用しますか?Apr 10, 2025 am 09:39 AM

PHPでは、特性は方法が必要な状況に適していますが、継承には適していません。 1)特性により、クラスの多重化方法が複数の継承の複雑さを回避できます。 2)特性を使用する場合、メソッドの競合に注意を払う必要があります。メソッドの競合は、代替およびキーワードとして解決できます。 3)パフォーマンスを最適化し、コードメンテナビリティを改善するために、特性の過剰使用を避け、その単一の責任を維持する必要があります。

依存関係噴射コンテナ(DIC)とは何ですか?また、なぜPHPで使用するのですか?依存関係噴射コンテナ(DIC)とは何ですか?また、なぜPHPで使用するのですか?Apr 10, 2025 am 09:38 AM

依存関係噴射コンテナ(DIC)は、PHPプロジェクトで使用するオブジェクト依存関係を管理および提供するツールです。 DICの主な利点には、次のものが含まれます。1。デカップリング、コンポーネントの独立したもの、およびコードの保守とテストが簡単です。 2。柔軟性、依存関係を交換または変更しやすい。 3.テスト可能性、単体テストのために模擬オブジェクトを注入するのに便利です。

通常のPHPアレイと比較して、SPL SPLFIXEDARRAYとそのパフォーマンス特性を説明してください。通常のPHPアレイと比較して、SPL SPLFIXEDARRAYとそのパフォーマンス特性を説明してください。Apr 10, 2025 am 09:37 AM

SplfixedArrayは、PHPの固定サイズの配列であり、高性能と低いメモリの使用が必要なシナリオに適しています。 1)動的調整によって引き起こされるオーバーヘッドを回避するために、作成時にサイズを指定する必要があります。 2)C言語アレイに基づいて、メモリと高速アクセス速度を直接動作させます。 3)大規模なデータ処理とメモリに敏感な環境に適していますが、サイズが固定されているため、注意して使用する必要があります。

PHPは、ファイルを安全に処理する方法をどのように処理しますか?PHPは、ファイルを安全に処理する方法をどのように処理しますか?Apr 10, 2025 am 09:37 AM

PHPは、$ \ _ファイル変数を介してファイルのアップロードを処理します。セキュリティを確保するための方法には次のものが含まれます。1。アップロードエラー、2。ファイルの種類とサイズを確認する、3。ファイル上書きを防ぐ、4。ファイルを永続的なストレージの場所に移動します。

Null Coulescingオペレーター(??)およびNull Coulescing Assignment Operator(?? =)とは何ですか?Null Coulescingオペレーター(??)およびNull Coulescing Assignment Operator(?? =)とは何ですか?Apr 10, 2025 am 09:33 AM

JavaScriptでは、nullcoalescingoperator(??)およびnullcoalescingsignmentoperator(?? =)を使用できます。 1.??最初の非潜水金または非未定されたオペランドを返します。 2.??これらの演算子は、コードロジックを簡素化し、読みやすさとパフォーマンスを向上させます。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません