2009-05-19 5 views
2

ダイナミックなPHPページをキャッシュするのは不思議でした。 PHPコードをあらかじめコンパイルしてバイトコードで保存するのは本当ですか? Pythonの.pycに似たものがあります。これはよりコンパイルされて実行可能なバージョンです。したがって、.pycファイルが.pyファイルよりも新しいと見なされた場合、.pyファイルに再コンパイルする必要はありません。誰かが動的なPHPページのキャッシュについて少し説明できますか?

これは主にこれに関するPHPのキャッシュですか?誰かがこれに関する少しの情報を提供することができますか?

答えて

3

あなたが話しているキャッシングのタイプによって異なります。オペコードキャッシングはあなたが言っているのとまったく同じです。オペコードを取得してキャッシュします。そのため、ユーザが特定のページにアクセスするたびに、そのオペコードがすでにコンパイルされキャッシュ内にある場合、そのページを再コンパイルする必要はありません。 phpファイルを変更すると、キャッシュ機構はこれを検出し、コードを再コンパイルしてキャッシュに入れます。

ページ自体のデータをキャッシュすることについて話している場合、これはまったく異なるものです。

オペコードキャッシングの詳細については、Alternative PHP Cacheを参照してください。

+0

私はコマンドプロンプトでPHPプログラムを実行すると、コンパイル済みのバージョンもコンパイルする必要がないので、次回に生成するようにお願いできますか? –

+0

"ページ自体のデータをキャッシュする"とは何ですか?PHPページの内容は動的ではありませんか?どのように動的コンテンツをキャッシュすることができますか? –

+0

実行しているものをキャッシュするために、特定のPHPアクセラレータをセットアップする必要があります。しかし本質的に、そうです、それは可能です。詳細については、アクセラレータのドキュメントを参照してください。 –

2

説明しているのはPHP acceleratorであり、あなたの言ったとおりです。キャッシュされたコンパイル済みバイトコードを格納して、同じスクリプトを複数回実行するとコンパイルが1回だけ必要になります。

PHPスクリプトの実行結果をキャッシュすることもできます。これは通常、キャッシュされてからページの内容が変更されている可能性があるため、少なくともロジックは少し必要です。たとえば、general cache feature provided by CodeIgniterを見ることができます。

0

実際には、いくつかの異なる形式のキャッシュがあります。これはあなたが本当にパフォーマンスの向上を得るでしょうどこいくつかは、実際に該当する場合はHTML出力をキャッシュ、またはキャッシュ内にある役立つだろうが、あなたがなど、MMCache、などeAcceleratorなどのパッケージによって処理されるまで

を参照しています反復クエリのDB結果セット(memcacheなど)

opcodeキャッシュ機構のインストールは非常に簡単ですが、私が参照した他の2つのキャッシュ領域は、パフォーマンスの大幅な向上をもたらします。

1

Peter D's answerは、オペコードキャッシングをうまくカバーします。ページがシンプルであれば、ページ生成時間の50%以上(主観的)を節約できます!

もう1つのキャッシングはデータのキャッシュです。これは、データベースの結果セット、Webサービスの応答、HTMLの塊、またはページ全体をキャッシュすることができます!

シンプル「の例では、」説明する必要があります

$cache = new Cache(); 
    $dataset; 

    if (!$dataset == $cache->get('expensiveDataset')){ 

     //run code to fetch dataset from database 
     $dataset = expensiveOperation(); 
     $cache->set('expensiveDataset', $dataset); 

    } 
echo $dataset; //do something with the data 

オブジェクト、機能、ページレベルのキャッシングを支援するためのライブラリがあります。 Zend Framework's Zend_Cacheコンポーネントは、あなたが見ているものが好きなら、思考のための食糧であり、素晴らしい実装です。

関連する問題