print と echo、どちらが速いですか?

藏色散人
リリース: 2023-04-04 21:34:01
オリジナル
3359 人が閲覧しました

私たちのほとんどと同じように、私も print を echo に置き換えたり、$i を $i に置き換えたり、二重引用符を一重引用符に置き換えたりするような、無意味なマイクロ最適化に関するブログ投稿を読むのにうんざりしています。なぜでしょうか? 99.999999% の場合、それは問題ではないからです。 APC などの PHP アクセラレータをインストールするか、不足しているインデックスをデータベース列に追加するか、ホームページで 1000 件のデータベース リクエストを回避することをお勧めします。

print と echo、どちらが速いですか?

この質問に対する答えを本当に知りたいとします。最速の速度を見つけるためにスクリプトを作成して何百万回も実行しようとするのではなく、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 サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート