ホームページ  >  記事  >  バックエンド開発  >  (転送)PHPのECHOを高速化する

(転送)PHPのECHOを高速化する

WBOY
WBOYオリジナル
2016-06-13 13:03:56795ブラウズ

(転送) PHP の ECHO を高速化する
http://www.laruence.com/2011/02/13/1870.html

PHP で ECHO を使用して大きな文字列を出力すると、実行時間が大幅に長くなることに気づいたかもしれません。 PHP の ECHO パフォーマンスが悪いと思っている友人もいるかもしれません。

その理由は前回の記事で説明しましたが、「PHP の ECHO パフォーマンスが悪い」という誤解を正したいと思います。

しかし前回の記事では理由のみを述べ、この問題を回避する方法については紹介していませんでしたが、本日、社内の特定の製品ライン(Apache with PHP)で問題が発見され、短期間のうちに一部のユーザーから報告がありました。大量のダウンロード要求が開始され、http 接続とデータベース接続の数が急激に増加します。

データベース接続の数が急激に増加する理由は、データベース接続が単一であるためです。 -column モードでは、リクエストが処理されるまでデータベース リンクが解放されません。リクエストの処理時間が長すぎると、大量のデータベース リンクが存在します。

ユーザーのネットワーク速度が非常に遅いということは、ECHO の「パフォーマンス」が非常に悪く、ダウンロード時間が非常に長いことを意味します。


ECHO 実行図

これは、今日話したい質問、ECHO を Quickly にする方法、PHP リクエスト処理プロセスをできるだけ早く終了させる方法にもつながります...

ECHO が高速になる理由は次のとおりです。遅いのは「書き込みデータ」が正常に返されるのを待っているため、比較的簡単な方法は出力キャッシュをオンにすることです。

Edit php.ini

Output_buffering = 4096 //byte Ofもちろん、スクリプト内で ob_start() を明示的に呼び出すこともできます。

ob_start();echo $huge_string; //Otherlogic.ob_end_flush(); ここで、ob_start がファイルを開くことに注意してください。

これで、データが出力バッファに一時的に書き込まれるため、ECHO は正常に実行され、「即時」に返されます。バッファが十分に大きい場合、コンテンツはクライアントに一度に送信される前にスクリプトの終わりまで待機します (厳密に言えば、Web サーバーに送信されます)。

しかし、これは問題を解決しません。今日私たちが遭遇したのは、最終的にこれらのデータをクライアントに送信するために PHP が必要であるため (この時点では Web サーバーは出力バッファーとして考慮されていません)、このプロセスは終了せず、リクエストは閉じられず、PHP は実行されません。 DB のデストラクタ~

ということで、夢なのでもっと大きくして、Apache の出力キャッシュを使えるようにしましょう。つまり、次のような実行プロセスに変更されます:


高速化された ECHO 図

PHP が 100K データを出力すると仮定すると、Apache の出力キャッシュは 100K より大きくなければなりません。そうしないと、Apache の出力キャッシュがいっぱいになると、実際にはクライアントに送信されます。このプロセス中、その時点で実行される ECHO はブロックされて待機します。

では、Apache の出力キャッシュを変更するには、Apache 設定ファイルの SendBufferSize 設定ディレクティブを使用します。

SendBufferSize 4096 //バイト固有の SendBufferSize の説明であることに注意してください。 http://httpd.apache.org/docs/2.0/en /mod/mpm_common.html#sendbuffersize

注: 他の Web サーバーの場合php-cgi モードを使用する場合は、関連する Web サーバーのマニュアルを読んで同様の設定を見つけてください。

PHP の ECHO は、PHP の実行後にコンテンツを Apache に直接渡します。完了するためにクライアントに送信されますが、コンテンツは PHP 処理の完了後に Apache によってクライアントに送信されます。

無意味: printf、print、file_put_contents。 (“php://output”)…などはECHOと同じです。

最後にこれを行うには、 ECHOの待ち時間はApacheに転送されることがわかりました。クライアントがコンテンツを取得する時間が大幅に短縮されるだけで、PHP の処理が高速化され、PHP の終了時間が短縮され、PHP がリソースを消費する時間が間接的に増加します。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。