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

require_once のパフォーマンスは実際には非常に低い_PHP チュートリアル

Jul 13, 2016 am 10:33 AM
require_once

テスト後、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 までご連絡ください。

ホット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ヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

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

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

Laravelでフラッシュセッションデータを使用します Laravelでフラッシュセッションデータを使用します Mar 12, 2025 pm 05:08 PM

Laravelは、直感的なフラッシュメソッドを使用して、一時的なセッションデータの処理を簡素化します。これは、アプリケーション内に簡単なメッセージ、アラート、または通知を表示するのに最適です。 データは、デフォルトで次の要求のためにのみ持続します。 $リクエスト -

PHPのカール:REST APIでPHPカール拡張機能を使用する方法 PHPのカール:REST APIでPHPカール拡張機能を使用する方法 Mar 14, 2025 am 11:42 AM

PHPクライアントURL(CURL)拡張機能は、開発者にとって強力なツールであり、リモートサーバーやREST APIとのシームレスな対話を可能にします。尊敬されるマルチプロトコルファイル転送ライブラリであるLibcurlを活用することにより、PHP Curlは効率的なexecuを促進します

Laravelテストでの簡略化されたHTTP応答のモッキング Laravelテストでの簡略化されたHTTP応答のモッキング Mar 12, 2025 pm 05:09 PM

Laravelは簡潔なHTTP応答シミュレーション構文を提供し、HTTP相互作用テストを簡素化します。このアプローチは、テストシミュレーションをより直感的にしながら、コード冗長性を大幅に削減します。 基本的な実装は、さまざまな応答タイプのショートカットを提供します。 Illuminate \ support \ facades \ httpを使用します。 http :: fake([[ 'google.com' => 'hello world'、 'github.com' => ['foo' => 'bar']、 'forge.laravel.com' =>

Codecanyonで12の最高のPHPチャットスクリプト Codecanyonで12の最高のPHPチャットスクリプト Mar 13, 2025 pm 12:08 PM

顧客の最も差し迫った問題にリアルタイムでインスタントソリューションを提供したいですか? ライブチャットを使用すると、顧客とのリアルタイムな会話を行い、すぐに問題を解決できます。それはあなたがあなたのカスタムにより速いサービスを提供することを可能にします

PHPロギング:PHPログ分析のベストプラクティス PHPロギング:PHPログ分析のベストプラクティス Mar 10, 2025 pm 02:32 PM

PHPロギングは、Webアプリケーションの監視とデバッグ、および重要なイベント、エラー、ランタイムの動作をキャプチャするために不可欠です。システムのパフォーマンスに関する貴重な洞察を提供し、問題の特定に役立ち、より速いトラブルシューティングをサポートします

PHPにおける後期静的結合の概念を説明します。 PHPにおける後期静的結合の概念を説明します。 Mar 21, 2025 pm 01:33 PM

記事では、PHP 5.3で導入されたPHPの後期静的結合(LSB)について説明し、より柔軟な継承を求める静的メソッドコールのランタイム解像度を可能にします。 LSBの実用的なアプリケーションと潜在的なパフォーマ

フレームワークのカスタマイズ/拡張:カスタム機能を追加する方法。 フレームワークのカスタマイズ/拡張:カスタム機能を追加する方法。 Mar 28, 2025 pm 05:12 PM

この記事では、フレームワークにカスタム機能を追加し、アーキテクチャの理解、拡張ポイントの識別、統合とデバッグのベストプラクティスに焦点を当てています。

フレームワークセキュリティ機能:脆弱性から保護します。 フレームワークセキュリティ機能:脆弱性から保護します。 Mar 28, 2025 pm 05:11 PM

記事では、入力検証、認証、定期的な更新など、脆弱性から保護するためのフレームワークの重要なセキュリティ機能について説明します。

See all articles