私たちのほとんどと同じように、私も print を echo に置き換えたり、$i を $i に置き換えたり、二重引用符を一重引用符に置き換えたりするような、無意味なマイクロ最適化に関するブログ投稿を読むのにうんざりしています。なぜでしょうか? 99.999999% の場合、それは問題ではないからです。 APC などの PHP アクセラレータをインストールするか、不足しているインデックスをデータベース列に追加するか、ホームページで 1000 件のデータベース リクエストを回避することをお勧めします。
この質問に対する答えを本当に知りたいとします。最速の速度を見つけるためにスクリプトを作成して何百万回も実行しようとするのではなく、PHP コードを作成している内容をよりよく理解できるため、場合によっては非常に役立つと思われる興味深いツールをいくつか紹介したいと思います。
VLD (「Vulcan Logic 逆アセンブラ」) を入力します。 VLD は Derrick Rethans によって書かれており、VLD のホームページでわかるように、「Zend エンジンに接続し、スクリプトのすべてのオペコード (実行ユニット) をダンプします」。
VLD のインストールは非常に簡単です。最新バージョンをダウンロードし、他の PHP 拡張機能と同様にインストールします。
$ phpize $ ./configure $ sudo make install
php で拡張機能を有効にします。 ini ファイル:
extension=vld.so
内部を見てみましょう。 2 つの単純なファイルを作成します。1 つは echo を使用し、もう 1 つは print を使用します。
// print.php
コマンド ラインからこれらのスクリプトを実行するには、-d vld を使用します。 activate=1 パラメータは VLD 出力をアクティブにします。これらのスクリプトによって生成されるオペコードを見てみましょう:
$ php -d vld.active=1 print.php
-
number of ops: 4 compiled vars: none line # op fetch ext return operands ------------------------------------------------------------------------------- 1 0 PRINT ~0 'foo' 1 FREE ~0 2 2 RETURN 1 3* ZEND_HANDLE_EXCEPTION
-
$ php -d vld.active=1 echo.php
-
number of ops: 3 compiled vars: none line # op fetch ext return operands ------------------------------------------------------------------------------- 1 0 ECHO 'foo' 2 1 RETURN 1 2* ZEND_HANDLE_EXCEPTION
違いに気づきましたか?はい、print は実際に何かを返すため、オペコードも使用します。 echo は print よりも高速であると結論付けることができます。ただし、スクリプトで印刷する呼び出しが何百回もあったとしても、オペコードにはコストはかかりません。
print は常に 1 を返すため、echo では不可能な次の興味深いことができます:
[php]
大量のコンテンツを含むスクリプトを実行するときに何をすべきか知りたいコードの数は? これを試してください:
$ php -d vld.active=1 print.php 2> output $ grep "number of ops" output | cut -f 5 -d ' ' | (tr '\n' +; echo 0) | bc
新しい WordPress インストールで試してみました。私のラップトップではスクリプトが「バス エラー」で終了する前に一時停止しますが、オペコードの数は 230 万を超えています。
以上がprint と echo、どちらが速いですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。