8

PHP コードの 2 つのキャッシュ技術について聞いたことがあります。

  1. PHP スクリプトが出力を生成すると、それはローカル ファイルに保存されます。スクリプトが再度呼び出されると、以前の出力を含むファイルが存在するかどうかがチェックされ、true の場合はこのファイルの内容が返されます。ほとんどの場合、「出力バッファー」をいじって行います。このようなことは、この記事で説明されています。

  2. コンパイルされた PHP コードがメモリに格納される、一種のオペコード キャッシュ プラグインを使用します。この中で最も人気があるのは APC で、これも eAccelerator です。

問題は、両方の手法を使用することに意味があるのか​​、それともどちらか一方だけを使用することに意味があるのか​​ということです。最初の方法は少し複雑で実装に時間がかかると思いますが、2 番目の方法はモジュールをインストールするだけの単純な方法のようです。

Ubuntu/Debian で PHP 5.3 (PHP-FPM) を使用しています。

ところで、ここで言及しなかった PHP コードまたは出力をキャッシュする他の方法はありますか? それらは検討する価値がありますか?

4

5 に答える 5

7

APCのようなオペコードキャッシュが常に必要です。その目的は、コードの解析を高速化することであり、将来のバージョンでPHPにバンドルされる予定です。今のところ、これはどのサーバーにも簡単にインストールでき、コードを記述したり変更したりする必要はありません。

ただし、オペコードをキャッシュしても、コードの実際の実行を高速化することはできません。ボトルネックは通常、データベースとの通信やディスクとの読み取り/ディスクからの読み取りに費やされる時間です。プログラムの出力をキャッシュすることで、不要なリソースの使用を回避し、応答を桁違いに高速化できます。

スタックに沿ったさまざまな場所で、さまざまな方法で出力キャッシュを実行できます。あなたがそれを行うことができる最初の場所は、あなたが提案したように、出力をバッファリングし、それをファイルに書き込み、その後のリクエストでそのファイルから読み取ることによって、あなた自身のコードで行うことです。

ただし、それでもリクエストごとにPHPコードを実行する必要があります。Webサーバーレベルで出力をキャッシュして、それをスキップすることもできます。mod_rewriteルールのセットを作成すると、ApacheはPHPコードが存在する場合、静的ファイルの代わりに静的ファイルを提供できますが、PHPコードは実行されないため、キャッシュされたバージョンを手動またはスケジュールされたタスクで再生成する必要があります。そうするための各要求。

Webサーバーの前にプロキシを貼り付け、それを使用して出力をキャッシュすることもできます。ワニスは最近人気のある選択肢であり、同じサーバーでPHPスクリプトを実行しているApacheよりも、キャッシュを使用して1秒あたり数百倍のリクエストを処理できます。キャッシュはプロキシレベルで作成および構成されるため、キャッシュの有効期限が切れると、リクエストはスクリプトに渡され、スクリプトは通常どおりに実行されて、新しいバージョンのページが生成されます。

于 2011-01-27T21:34:28.297 に答える
2

私にとって、 optcache 、 filecache .. などは、データベース呼び出しを減らすためにのみ使用します。コードを高速化することはできません。ただし、キャッシュを使用して訪問者にサービスを提供することで、ページの読み込みを改善します。

私の場合、mySQL Server を保存するためにウィジェット $object をキャッシュする必要がある場合、VPS または Dedicated Server には APC で十分です。

サーバーが 2 つ以上ある場合は、Memcacheを使用するのが好きです。メモリを使用してキャッシュするのが得意です。しかし、それはあなた次第です。誰もが memcached を好むわけではなく、誰もが APC を好むわけではありません。

Web ページ全体をキャッシュするために、多くのワードプレスを実行し、W3Total Cache のようないくつかのキャッシュ プラグインで APC、Memcache、Filecache を使用しました。そして、私は(私自身の経験):ファイルキャッシュはウェブサイト全体をキャッシュするのに適しています、メモリキャッシュは$ objectをキャッシュするのに適しています

ハードドライブが遅い場合、Filecache は CPU を増やします。VPS に十分なメモリがない場合、Memory キャッシュはひどいものです。

SSD HDD はファイルの読み取り/書き込み速度が非常に優れていますが、メモリは常に高速です。しかし、人間にはこれらの速度の違いはわかりません。プロジェクトとサーバー (RAM、HDD) に基づいて 1 つのメソッドのみを選択しますか、それとも共有 Web ホスティングを使用していますか?

root権限もphp.iniもなしで共有ホスティングを使用している場合、 phpFastCacheを使用するのが好きです。これは、set、get、stats、deleteのみの単純なファイルキャッシュメソッドです。

さらに、.htaccess を使用して、画像、js、css、または html ヘッダーなどの静的ファイルをキャッシュするのが好きです。訪問者がページを高速化し、サーバーの帯域幅を節約するのに役立ちます。

また、ページ全体をキャッシュする場合、.htaccess を使用して静的な .html キャッシュにリダイレクトできる場合は、すばらしいことです。

将来的には、APC または一部の Optcache が PHP バージョンにバンドルされる予定ですが、すべてのキャッシュでコードを高速化することはできないと確信しています。

  1. データベース/クエリの呼び出しを減らします。
  2. キャッシュを使用してサービスを提供することで、ページの読み込み速度を向上させます。
  3. API トランザクション ( Bing など) または cURL リクエストを保存します...

等...

于 2013-04-30T20:24:00.833 に答える
0

これが本当に機能するかどうかはわかりませんが、私が持っていたPHPスクリプトでパフォーマンスの問題に遭遇しました。データをタイトルとして格納するプレーンテキストファイルと、各レコードが改行で区切られたURLタブがあります。私のスクリプトは、各URLでファイルを取得し、それを独自のフォルダーに保存します。
次に、ローカルファイル(この場合は画像)を実際に表示する別のページがありpreg_replace()、サーバーで表示できるように、を使用して各行の出力をリモートURLから相対URLに変更します。タブ区切りのファイルが1MBを超え、実行に数秒かかるpreg_replace()ため、出力キャッシュを調べることにしました。決定的なものが見つからなかったので、自分で試してみることにしました。これが私が思いついたものです。

ページにローカルでコンテンツを表示するように要求すると、グローバルスコープの変数からページを読み取ろうとします。これが空の場合は、このアプリケーションがまだ実行されておらず、このグローバルニーズが設定されている可能性があります。空の場合は、出力ファイル(出力するすべてのものを文字通り表示するプレーンなhtmlファイル)から読み取り、内容をグローバル変数に保存してから、グローバルからの出力を表示します。
これで、スクリプトを実行してタブ区切りファイルを更新すると、出力ファイルとグローバル変数が更新されます。このように、実行速度が遅いものを実際に実行するスクリプトの部分は、データが更新されているときにのみ実行されます。

今はまだ試していませんが、理論的には、実際にはスクリプトを実行しますが、パフォーマンスが大幅に向上するはずですが、データが古くなることはなく、読み込み時間が大幅に短縮されるはずです。

お役に立てれば。

于 2012-03-08T21:47:33.017 に答える
0

はい、これらは 2 つの異なるキャッシュ技術であり、正しく理解しています。

ただし、1)に注意してください:

1.) スクリプトで生成された出力をファイルまたはプロキシにキャッシュすると、コンテンツが急速に変化する場合に問題が発生する可能性があります。

2.) x-cache も存在し、ubuntu に簡単にインストールできます。

よろしく、 /t

于 2011-01-27T21:57:46.037 に答える
0

多くの場合、PHP Web アプリケーションに関して言えば、データベースがボトルネックになります。そのため、実行できる最善の方法の 1 つは、memcachedを使用して結果をメモリにキャッシュすることです。xhprofのようなものを使用してコードをプロファイリングし、実際に最も時間がかかっているものにダイヤルインすることもできます。

于 2011-01-27T21:53:44.003 に答える