PHP の Output_buffering
についてどれくらい知っていますか?1. php のキャッシュについて話しましょう。
PHP では、キャッシュをクライアント キャッシュ (ブラウザ キャッシュ) とサーバー キャッシュ (サーバー キャッシュ) に大別できます。 PHP は B/S アーキテクチャに基づいているため、ブラウザ側キャッシュとサーバー側キャッシュとして理解できます。
PHP に付属しているサーバー側のキャッシュは、大きく 2 種類のキャッシュに分けられます。プログラムキャッシュとOBキャッシュ!これは、サーバーサイド キャッシュの研究の主要な内容でもあります。
PHP にキャッシュされた出力シーケンスは次のとおりです:
php 出力キャッシュを開きます: echo,print -> php out_buffering -> -> ブラウザのバッファリング -> ブラウザの表示
php 出力キャッシュがオンになっていません: echo,print -> ブラウザのバッファリング ->
ブラウザ出力キャッシュ: IE の場合は 256 バイト、Chrome および FireFox の場合は 1000 バイト。出力データがこの長さに達するか、スクリプトが終了した場合にのみ、ブラウザはページにデータを出力します。 2. サーバー側の応答プロセス A. クライアントがサーバーにリクエスト応答を送信します。B. Apache サーバーは PHP モジュールをロードし、対応するプロセス (またはスレッド) を開始し、対応する PHP スクリプト ページを実行します。
C. OB キャッシュがオンになっていない場合、すべての実行結果はプログラム キャッシュに配置され、パッケージ化されてブラウザに送信されます。ブラウザはページをレンダリングし、最後に見た WEB ページを生成します。
D. OB キャッシュがオンになっている場合、実行結果は OB キャッシュとプログラム キャッシュにそれぞれ格納され、プログラムが最後の行まで実行されると、OB キャッシュ内のデータがフラッシュ バックされます。キャッシュされてからパッケージ化されてブラウザに返されます。ブラウザはページをレンダリングし、私たちが見ている WEB ページを生成します。
for($i=0; $i<5; $i++){ echo $i.'<br>'; sleep(1); }実行結果: データがすべて完了するまで待ちます。バッファのサイズを満たしません。 b、output_buffering=4096、出力するデータを少なくします (バッファー 1 つ未満)、output_buffering をオフにし、php.ini の Output_buffering=0 を変更します
echo str_repeat(" ",1024);//这里重复输出一个空白for($i=0; $i<5; $i++){ echo $i."<br/>"; flush(); sleep(1); }実行結果: OB が無効になっているため、出力する前にスクリプトの実行を待つ必要はありません。データは OB に残らず、断続的な出力が表示されます。 echo ->ブラウザ バッファリング -> ブラウザ表示 c、output_buffering=4096、より大きなデータ (1 つのバッファより大きい) を出力、ob_start()
for($i=0; $i<5; $i++){ echo file_get_contents('f.txt').$i.'<br/><br/><br/><br/>'; sleep(2); }実行結果: f.txt は 4kb を超えるファイルです。バッファの容量が足りないため、バッファごとに出力されます。がいっぱいであるため、断続的な出力が見られます。 d、output_buffering=4096、より大きなデータ (1 つのバッファーより大きい) を出力、ob_start() を使用
ob_start(); for($i=0; $i<5; $i++){ echo file_get_contents('f.txt').$i.'<br/><br/><br/><br/>'; sleep(2); }の実行結果: ob_start()を使用しているためバッファに十分な容量が設定されており、スクリプト実行まで保存され出力されます。 e、output_buffering=On、ob_start() を使用
ob_start(); echo "abc-";header("content-type:text/html;charset=utf-8");echo "hello-";ob_end_flush();echo "aa-";echo ob_get_contents();実行結果: abc-hello-aa-abc-hello- aa- f、output_buffering=Off、ob_start() を使用
ob_start(); echo "abc-";header("content-type:text/html;charset=utf-8");echo "hello-";ob_end_flush();echo "aa-";echo ob_get_contents();実行結果: abc-hello-aa-
出力バッファーはスタック可能です。つまり、1 つの ob_start() がアクティブなときに、別の ob_start() を呼び出すことができます。 ob_end_flush() を適切な回数だけ正しく呼び出すようにしてください。複数の出力コールバック関数がアクティブな場合、出力コンテンツは常にネストされた順序でフィルター処理されます。
注: PHP5.2 では、OB はデフォルトでオフになり、5.3 以降ではデフォルトでオンになります。 > 一般的に使用されるメソッド: 1.ob_start
Output_buffering メカニズムをアクティブ化すると、スクリプトはブラウザーに直接出力されなくなりますが、一時的に PHP バッファリング領域に書き込まれます。 。スクリプトの実行が完了するまで送信されません。2.ob_get_contents
PHP バッファリングでデータを取得します。 注: ob_end_clean() の前に呼び出す必要があります。そうしないと、空の文字のみが取得されます。
3.ob_end_flush と ob_end_clean
ob_end_flush は、php バッファリングにデータを出力しますが、クリアしません。
ob_end_clean は出力せず、php バッファリング内のデータをクリアするだけです。
4.ob_flush、flush、ob_implicit_flush
ob_flush は、php バッファリング内のデータをプログラム キャッシュに更新します
flush は、プログラム キャッシュをブラウザ キャッシュに更新します
ob_implicit_flush は、絶対的 (暗黙的) フラッシュをオンまたはオフにします。絶対的 (暗黙的) フラッシュでは、各出力呼び出しの後にフラッシュ操作が行われるため、flush() への明示的な呼び出しは不要になります
4. OB キャッシュの役割!
OB キャッシュはさまざまな側面で使用されますが、私が知っているのは主に 2 つの側面です。
a. Web サイトを静的にする場合は、OB キャッシュを選択することをお勧めします。
b. 「警告: ヘッダー情報を変更できません - ヘッダーはすでに送信されました!」というエラーを解決します。
エラーの理由: 応答ヘッダーと対応する本文の不整合が原因です。通常の状況では、サーバーからブラウザに返される対応するコンテンツは次のようになります。 応答ヘッダー 応答本文!
ただし、OB キャッシュを有効にすると、対応するヘッダー情報 (通常は header() 関数によって設定された情報) がプログラム キャッシュに配置されます。
echo print_r var_dump などの他の出力コンテンツは、最初に OB キャッシュに入れられます。
プログラムが終了するか、OB キャッシュが閉じたら、OB キャッシュの内容をプログラム キャッシュに入れます。これにより、応答ヘッダー情報が常に応答本文の内容よりも前に配置されるようになります。
5. 参考文献:
http://segmentfault.com/a/1190000000578885
http://blog.csdn.net/fdipzone/article/details/ 10367837
http://php.net

tomakephpapplicationsfaster、followthesesteps:1)useopcodecachinglikeopcacheTostoredscriptbytecode.2)最小化abasequeriesecachingingindexing.3)leveragephp7機能forbettercodeefficiency.4)

依存性注入(DI)は、明示的に推移的な依存関係によりPHPコードのテスト可能性を大幅に改善します。 1)DI分離クラスと特定の実装により、テストとメンテナンスが柔軟になります。 2)3つのタイプのうち、コンストラクターは、状態を一貫性に保つために明示的な式依存性を注入します。 3)DIコンテナを使用して複雑な依存関係を管理し、コードの品質と開発効率を向上させます。

DatabaseQueryoptimizationInpholvesseveralstrategESTOEnhancePerformance.1)selectonlynlynlyndorycolumnStoredatedataTransfer.2)useindexingtospeedupdataretrieval.3)revenmecrycachingtostoreres sultsoffrequent queries.4)

phpisusededemingemailsduetoitsbuilt-inmail()functionandsupportiveLibrarieslikephpmailerandswiftmailer.1)usethemail()functionforbasicemails、butithaslimitations.2)emploadforadvancedfeatureSlikelikelivableabableabuses.3)雇用

PHPパフォーマンスボトルネックは、次の手順で解決できます。1)パフォーマンス分析にXdebugまたはBlackfireを使用して問題を見つける。 2)データベースクエリを最適化し、APCUなどのキャッシュを使用します。 3)array_filterなどの効率的な関数を使用して、配列操作を最適化します。 4)bytecodeキャッシュ用のopcacheを構成します。 5)HTTP要求の削減や写真の最適化など、フロントエンドを最適化します。 6)パフォーマンスを継続的に監視および最適化します。これらの方法により、PHPアプリケーションのパフォーマンスを大幅に改善できます。

依存関係(di)inphpisadesignpatternativats anducesclassodulencies、拡張測定性、テスト可能性、および維持可能性。

cachingemprovesppperformancebystring of computationsorquickretrieval、還元装置の削減は、reducingerloadendenhancersponseTimes.efcectivestrategiesInclude:1)opcodecaching、compiledphpscriptsinmemorytoskipcompilation;


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

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

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境
