Server Management
ファイルメーカーWeb公開表示スピードをさらに高速化するために(2)キャッシュ機能 09/21/2008 22:39:41

ファイルメーカーのWeb公開表示スピードアップを考えるとき、リレーショナル、集計関数などで索引設定ができないフィールドがあると、それが足を引っ張ってしまうことは前回記述した。
それを回避するためにPHP側での集計処理が効果的、ということも述べた。

しかし、どうしても集計フィールドを使ったり、多数のクエリーを要求せざるを得ないページも存在する。また、人気サイトになると、いくらスクリプトをチューニングしても、特定時間にアクセスが集中し表示が遅くなることもあり、より効果的にCPUの負担を減らす工夫が必要になる。

どうしてもリアルタイム性が要求されるページは別にして、そうでないページであれば、キャッシュの利用という手段が最もスピード面での改善が見込まれる。つまり、PHPの処理やページ全体をスタティックなHTMLページのようにしてしまうのである。このあたりは大規模サイト、人気サイトでは常套手段になってきている。

ページのキャッシュ機能については、ファイルメーカーの計算式では難しいので、Webサーバー側でPHPスクリプトによる対応になる。Cache Liteなど、PHPのライブラリでキャッシュ機能を実現するものがあるので、Googleあたりで検索すれば適切なサンプルが見つかるだろう。

さもなければ、ページがGetメソッドで構成されていれば、PHPのファイル保存とファイル更新日時チェックスクリプト等を組み合わせてキャッシュ機能を実現させることも容易だ。ただし、もちろんだがそれぞれのケースに応じたセキュリティ設定や、会員ユーザーの個人情報ページ等はキャッシュされないような注意が必要だ。

(簡単なPHPスクリプトのイメージ)
//現在時刻取得
$time = mktime();
//キャッシュファイルが無い場合、キャッシュ時刻はゼロに
if (!file_exists("キャッシュファイルのパス")){
$cachetime=0;
}
//キャッシュファイルがある場合、キャッシュ時刻取得
else {
$cachetime = filemtime("キャッシュファイルのパス");
}
//キャッシュが60分以内だったらキャッシュを読み込み
if(($time-$cachetime)<60*60){
include("キャッシュファイルのパス");
exit;
} else{
$file = "http://ダイナミックな正規ページのURL";
$newfile = "キャッシュファイルのパス";
//ダイナミックページをキャッシュに保存/更新
if (!copy($file, $newfile)) {
echo "キャッシュ作成に失敗しました";
exit;
} else{
//キャッシュ保存後にダイナミックページへジャンプ
header("Location:ダイナミックな正規ページのパス");
}
}


このあたりを割り切ってしまえば、かなり高負荷な、集計を含めた計算式や、複数のクエリーをまとめたページ、他サイトからのRSSインクルードなど、ダイナミックな表示では時間がかかってしまうような高密度な情報ページを組み立ててしまっても、表示スピードやサーバー負荷を気にせず公開できる。

一般に、企業サイトなどではさすがに秒/分刻みのリアルタイム性を要求されることは少なく、むしろ表示スピード、ピーク時のアクセス処理能力が優先される。そういった場合はキャッシュによる対応が最適策であろう。



Comments

Add comment for this article
Comment
URL
Password (You can revise your comment later with this password.)
Security Code
Input this text in the right textarea.
 



03enterprise

Copyright © Majestic, Inc. Privacy Policy