PHPコード最適化メンバ変数取得速度比較_PHPチュートリアル
以下に 4 つのコード例がありますが、オブジェクトの作成とメンバー変数の取得はどの順番で行われると思いますか?
1: メンバー変数を public に設定し、代入操作でメンバー変数に値を代入し、変数を直接取得します
class Foo {
public $id;
}
$data = new Foo;
$data->id = 10;
echo $data->id;
?>
2: メンバー変数を次のように設定します。 public にして、コンストラクターを通じてメンバー変数の値を設定し、変数を直接取得します
class Foo2 {
public $id;
public function __construct($id) {
$this->id = $id ;
}
}
$data = new Foo2(10);
echo $data->id;
?>
3: メンバー変数を protected に設定し、コンストラクターを通じてメンバー変数の値を設定し、変数を取得しますマジックメソッドを使用して
class Foo3 {
protected $id;
public function __construct($id) {
$this-> id = $id;
}
public function getId() {
return $this->id;
}
}
$data = new Foo3(10);
echo $data->getId();
?>
4:メンバー変数を protected に設定し、コンストラクターを通じてメンバー変数の値を設定し、メンバー メソッドを通じて変数を取得します
class Foo4 {
protected $id;
public function __construct($id) {
$this-> id = $id;
}
public function __get($key) {
return $this->id;
}
}
$data = new Foo4(10);
echo $data->id;
?>
実行によると速度ソート: 1243
まずオペコードを見てみましょう:
1:
1 ZEND_FETCH_CLASS 4 :4 'Foo'
2 NEW $5 :4
3 DO_FCALL_ BY_NAME 0
4 ASSIGN !0 , $5
5 ZEND_ASSIGN_OBJ !0, 'id'
6 ZEND_OP_DATA 10
7 FETCH_OBJ_R $9 !0, 'id'
8 ECHO ! $9
2:
1 ZEND_FETCH_CLASS 4 :10 'Foo2'
2 NEW $14 !1, 'id'
7 ECHO $ 14
3:
コードをコピーします
7 DO_FCALL_BY_NAME 0 $20
8 ECHO $20
4:
コードをコピーします
コードは次のとおりです:
1 ZEND_FETCH_CLASS 4 :21 'Foo4'
2 NEW :21
3 END_VAL 10
4 DO_FCALL_BY_NAME 1
5 ASSIGN !3, $22
6 FETCH_OBJ_R !3, 'id'
7 ECHO $25
に基づく上記のオペコードについては、zend_vm_execute.h ファイル内の対応するオペコード実装を参照してください。
1. PHP カーネルでオブジェクトを作成するプロセスは 3 つのステップに分かれています:
ZEND_FETCH_CLASS は、クラス名に従ってストレージ クラスの変数を取得し、ハッシュタルブ EG(class_table) の検索操作として実装されます。 NEW オブジェクトを初期化し、EX(call)->fbc がコンストラクター ポインターを指します。
コンストラクターを呼び出します。呼び出しは他の関数呼び出しと同じで、すべて zend_do_fcall_common_helper_SPEC を呼び出します
2. マジック メソッドの呼び出しは、直接呼び出しではなく、条件によってトリガーされます (メンバー変数 ID の取得など)。例
(zend_std_read_property) の手順は次のとおりです:
オブジェクトのプロパティを取得し、存在する場合は 2 番目のステップに進み、関連する属性がない場合は 3 番目のステップに進みます
に対応するプロパティがあるかどうかを確認しますオブジェクトのプロパティから名前を取得し、存在する場合は結果を返し、存在しない場合は 3 番目のステップに進みます
__get マジック メソッドがある場合は、このメソッドを呼び出して変数を取得します。存在する場合、エラーが報告されます
並べ替えの問題に戻ります:
1. 最初と 2 番目の違いは何ですか?
2 番目のオペコードは最初のオペコードよりも少ないですが、コンストラクターのパラメーターが多く、パラメーター処理用のオペコードが 1 つ多いため、最初のオペコードよりも遅くなります。パラメーターの処理は比較的時間のかかる操作です。コードの最適化を行う場合、関数に複数のパラメーターがある場合は、それらを配列にカプセル化して渡すことを検討できます。
2. 3 番目が最も遅いのはなぜですか?
パラメータの取得は本質的にオブジェクトのメンバーメソッドの呼び出しであるため、メソッドを呼び出すコストは変数を取得するよりも高くなります
3 なぜ 4 番目の方が 3 番目よりも速いのでしょうか?
4番目の操作は実際に変数を取得するのですが、内部でマジックメソッドの呼び出しを実装しているため、ユーザー定義メソッドに比べて内部関数の呼び出し効率が高くなります。したがって、呼び出し可能なメソッドが PHP カーネルによって実装されている場合は、車輪の再発明をすべきではありません。
4. 4 番目の方が 2 番目よりも遅いのはなぜですか?
PHP オブジェクトが変数を取得するプロセスで、メンバー変数がクラスの定義に含まれなくなると、PHP 独自のマジック メソッド __get が呼び出され、マジック メソッドの呼び出しが 1 つ追加されます。
要約すると:
1. PHP 組み込み関数を使用する
2. オブジェクト指向 (OOP) である必要はなく、各メソッドとオブジェクトの呼び出しは多くの時間を消費します。メモリ。
3. マジック メソッドの使用は最小限に抑えます。フレームワークには多数のマジック メソッドが含まれているため、必要な場合を除き、フレームワークを使用しないでください。
4. パフォーマンス優先のアプリケーション シナリオでは、OOP を使用する必要がある場合、メンバー変数がより良い方法です。
5. PHP 構文構造を使用できる場合は、関数を使用しないでください。関数を使用できる場合は、オブジェクトを使用しないでください。
http://www.bkjia.com/PHPjc/736832.html

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック









PHP を使用して Baidu Wenxin Yiyan API インターフェイスを開発および実装するためのパフォーマンス最適化手法インターネットの普及に伴い、アプリケーション コンテンツを充実させるためのデータを取得するためにサードパーティ API インターフェイスを使用する開発者が増えています。 Baidu Wenxin Yiyan API インターフェイスは人気のあるデータ インターフェイスであり、プログラム インターフェイスを美しくしたり、ユーザー エクスペリエンスを向上させたりするために使用できる、インスピレーションを与える、哲学的、または温かい文章をランダムに返すことができます。ただし、Baidu Wenxinyiyan API インターフェイスを使用する場合は、パフォーマンスに関する考慮事項もいくつか発生します。 API呼び出し速度

現在、PHP はインターネット開発において最も人気のあるプログラミング言語の 1 つとなっており、PHP プログラムのパフォーマンスの最適化も最も差し迫った問題の 1 つとなっています。大規模な同時リクエストを処理する場合、1 秒の遅延がユーザー エクスペリエンスに大きな影響を与える可能性があります。現在、APCu (AlternativePHPCache) キャッシュ テクノロジは、PHP アプリケーションのパフォーマンスを最適化するための重要な方法の 1 つとなっています。この記事では、APCu キャッシュ テクノロジを使用して PHP アプリケーションのパフォーマンスを最適化する方法を紹介します。 1.APC

インターネットの発展に伴い、インターネット アプリケーションの分野では PHP アプリケーションがますます一般的になりました。ただし、PHP アプリケーションによる同時アクセスが多いと、サーバーの CPU 使用率が高くなり、アプリケーションのパフォーマンスに影響を与える可能性があります。 PHP アプリケーションのパフォーマンスを最適化するには、Memcached キャッシュ テクノロジが良い選択肢となっています。この記事では、Memcached キャッシュ テクノロジを使用して PHP アプリケーションの CPU 使用率を最適化する方法を紹介します。 Memcached キャッシュ テクノロジの概要 Memcached は、

PHP コード仕様を通じてパフォーマンスの最適化を標準化する方法 はじめに: インターネットの急速な発展に伴い、PHP 言語に基づいて開発される Web サイトやアプリケーションがますます増えています。 PHP 開発プロセスでは、パフォーマンスの最適化が重要な要素となります。高性能の PHP コードにより、Web サイトの応答速度とユーザー エクスペリエンスが大幅に向上します。この記事では、PHP コード仕様を通じてパフォーマンスの最適化を標準化する方法を検討し、参考として実用的なコード例をいくつか示します。 1. データベース クエリの削減: 開発プロセスではデータベース クエリが頻繁に発生するのが一般的です。

PHP を使用して SuiteCRM のクライアント パフォーマンスを最適化する方法の概要: SuiteCRM は強力なオープンソースの顧客関係管理 (CRM) システムですが、大量のデータや同時ユーザーを処理するときにパフォーマンスの問題が発生する可能性があります。この記事では、PHP プログラミング手法を通じて SuiteCRM クライアントのパフォーマンスを最適化するいくつかの方法を紹介し、対応するコード例を添付します。適切なデータ クエリとインデックスの使用 データベース クエリは、CRM システムの中核となる操作の 1 つです。クエリのパフォーマンスを向上させるには、適切なデータ クエリを使用します。

PHP のデータベース接続とクエリのパフォーマンスを最適化するにはどうすればよいですか?データベースは Web 開発に不可欠な部分であり、広く使用されているサーバーサイド スクリプト言語として、PHP のデータベースへの接続とクエリのパフォーマンスはシステム全体のパフォーマンスにとって重要です。この記事では、PHP データベース接続とクエリのパフォーマンスを最適化するためのヒントと提案をいくつか紹介します。永続的な接続を使用する: PHP では、データベース クエリが実行されるたびにデータベース接続が確立されます。永続的な接続では、複数のクエリで同じデータベース接続を再利用できるため、

PHP を使用して Web サイトのパフォーマンスと読み込み速度を最適化する方法 インターネットの急速な発展に伴い、Web サイトのパフォーマンスと読み込み速度がますます注目を集めています。 PHP はサーバーサイドのスクリプト言語として広く使用されており、Web サイトのパフォーマンスと読み込み速度の最適化に重要な役割を果たします。この記事では、PHP を使用して Web サイトのパフォーマンスと読み込み速度を向上させるためのヒントと方法を紹介します。キャッシュ メカニズムの使用 キャッシュは、Web サイトのパフォーマンスを向上させる効果的な方法です。 PHP は、ファイル キャッシュ、メモリ キャッシュ、データ キャッシュなど、さまざまなキャッシュ メカニズムを提供します。

さまざまな PHP バージョンで関数のパフォーマンスを最適化する方法には、分析ツールを使用して関数のボトルネックを特定すること、オペコード キャッシュを有効にするか外部キャッシュ システムを使用すること、型アノテーションを追加してパフォーマンスを向上させること、および PHP バージョンに応じて適切な文字列連結およびソート アルゴリズムを選択することなどが含まれます。
