6

前提:私は車輪の再発明を試みているのではなく、理解しようとしているだけです。

出力キャッシュは簡単に実装できます。

//GetFromMyCache returns the page if it finds the file otherwise returns FALSE
if( ($page = GetFromMyCache($page_id)) !== FALSE )
{
   echo $page; //sending out page from cache
   exit();
}

//since we reach this point in code, it means page was not in cache
ob_start(); //let's start caching

//we process the page getting data from DB

//saving processed page in cache and flushing it out
echo CachePageAndFlush(ob_get_contents());

別の記事別の回答でよく説明されています。

しかし、次にAPC が登場します(これはデフォルトでPHP6に含まれます)。

  1. APCは、サーバーにインストールされると、既存のPHPコードを変更せずに高速に実行するモジュールですか?

    APCは自動ですか?

  2. では、なぜこのような機能があるのapc_addでしょうか。

    APCを使用してページ全体をキャッシュするにはどうすればよいですか?

  3. APCがインストールされている場合でも、自分の側でキャッシュを実行する必要がありますか?

  4. APCがホスティングプロバイダーのお金を節約しようとしているのなら、なぜ彼らはそれをインストールしないのですか?(私は彼らがそれをインストールするために競争しているべきであることを意味します、しかし私はそれが起こっているのを見ません。)

    APCのインストールには、これらのホスティングプロバイダーにとって不利な点がありますか?

4

3 に答える 3

3

APCはオペコードキャッシュです。

Alternative PHP Cache(APC)は、PHP用の無料でオープンなオペコードキャッシュです。その目標は、PHP中間コードをキャッシュおよび最適化するための、無料でオープンで堅牢なフレームワークを提供することです。

これはテンプレートキャッシュ(デモンストレーションしているもの)と同じではなく、出力バッファリングにはほとんど影響しません。それは同じことではありません。

オペコードキャッシングとは、PHPコードが解釈された後にキャッシュすることを意味します。これは任意のコードフラグメントである可能性があります(必ずしもHTMLを出力するものである必要はありません)。たとえば、クラスとテンプレートエンジン自体をオペコードキャッシュに固定できます。PHPインタープリターはコードを再度「解釈」する必要がなく、キャッシュから「解釈された」バージョンをロードするだけでよいため、これによりコードが劇的に高速化されます。

出力バッファリングとキャッシュを混同しないでください。キャッシングには多くのレベルがあります。たとえば、よく知っている最も一般的な2つのレベルです。

セッションのキャッシュ

これの非常に基本的なバージョンは、いくつかの設定を保存するCookieです。設定を「計算」するコードを1回だけ実行し(ユーザーがログインしたとき)、セッションの残りの部分では、Cookieから「キャッシュされた」設定を使用します。

レンダリングされたテンプレートのキャッシュ

これは、一度生成する必要があるが、あまり頻繁に変更されないページの場合に実行されます。たとえば、テンプレートである「日替わり」ページ。これを1回だけ生成してから、キャッシュから「レンダリングされた」ページを提供します。

これらはいずれもAPCを使用していません

于 2012-04-02T13:49:08.647 に答える
2

APCは、PHPをそれ自体でより高速に実行できるようにしますか?

はい。ある意味で。ただし、メリットは大きく異なります。

APCを使用する場合でも、レンダリングされたHTMLをキャッシュする必要がありますか?

バイトコードは、結果のHTMLとは異なります。通常のPHPスクリプトと同じプログラムです。APCが有効になっている場合でも、PHPはデータを処理してHTMLをレンダリングする必要があります。

違いをご理解いただければ幸いです。

APCキャッシュは、ユーザーデータを格納するためのバイトコードキャッシュとメモリベースのストレージの両方を提供します。
したがって、これを使用してユーザー定義データを保存することもできます。
また、レンダリングされたページ全体も保存します(ここでの混乱はわかりません。話している「ページ」データ型は何ですか?obの結果は単なる通常の文字列ではありませんか?)。
ただし、結果のHTMLのキャッシュは、想像するほど簡単ではありません。

時期尚早の最適化はすべての悪の根源です。
理由がある場合にのみ、サイトの最適化を開始してください。

Web HostersがAPCのインストールを待っているのはなぜですか?

いくつかの理由があります。しかし、1つで十分です。バイトコードキャッシュは、通常のPHPベースの醜いホームページのeコマースサイトには何の利益ももたらしません。

于 2012-04-02T14:00:04.103 に答える
1

APCはバイトコードをキャッシュします。PHPは、ファイルが要求またはインクルードされたときに、作成したソースコードをこれらに変換し、それらを削除します。APCを使用すると、バイトコードはそのまま残ります。

ob_startは出力バッファをオンにします。これは、プログラムコードの1つの効果、つまり印刷するテキストをキャッシュするために使用できます。

プログラムをより高速に実行し、CPUパワーの消費を抑えたい場合は、APCを使用してください。データベースのスループットには影響しません。

プログラムを時々実行し、最後の出力を静的に提供するだけの場合は、ob_start出力をキャッシュします。これにより、情報の鮮度とパーソナライズを犠牲にして、データベースのスループットが節約されます。

APCは、各ページ要求が新しい情報、またはユーザーに固有の情報を伝達する場合に適しています。

重い計算やデータアクセスを実行している場合は、ob_start出力をキャッシュします。誰もが同じ、まったく新鮮ではない出力を取得しても問題ありません。

于 2012-04-02T13:48:16.293 に答える