わかりました、私のホームページの読み込みは比較的遅いです...まあ、そうではありませんが、約 1 秒半かかります。私のサイトで最も遅いページです。
現在、ログインしていないユーザーのホームページは、その日の 100% 静的コンテンツです。
そのため、ログインしていない場合は、その日のコンテンツがキャッシュされるようにしたいと考えています (ログインしている場合は、キャッシュしたくない)。
私は過去数時間、眼球を引き裂き、名前の付いたすべての神をののしり、これを機能させようとしている狂人のように斧を持って走り回っています。CSS/JS/画像など、現在キャッシュを使用しているサイトの他の部分があり、それらはすべて非常に簡単に実行でき、現在この問題は発生していません。
率直に言います...キャッシュしません... HTTPSを使用していますが、JS / CSS /画像をキャッシュできるのに、メインのhtmlファイルをキャッシュできない理由がわかりません。
とにかく、あなたは私が何を試したか知りたいと思います...
キャッシュ制御の設定:
date_default_timezone_set('Europe/Jersey');
$date = date("Y-m-d");
$date = date("D, d M Y", strtotime(date("d M Y", strtotime($date)) . " +1 day"));
$udate = date("D, d M Y", strtotime(date("d M Y", strtotime($date)) . " -1 day"));
header('Content-Type: text/html');
header("Cache-Control: max-age=86400, public, must-revalidate");
header("Last-Modified: " . $udate . " 00:00:01 GMT");
header('Expires: ' . $date . ' 00:00:01 GMT');
送信済みヘッダー:
Cache-Control:max-age=604800, public, must-revalidate
Connection:Keep-Alive
Content-Encoding:gzip
Content-Language:en-GB
Content-Type:text/html; charset=utf-8
Date:Tue, 11 Sep 2012 00:55:11 GMT
Expires:Wed, 12 Sep 2012 00:00:01 GMT
Keep-Alive:timeout=2, max=75
Last-Modified:Tue, 11 Sep 2012 00:00:01 GMT
Server:Apache
Transfer-Encoding:chunked
Vary:Accept-Encoding
キャッシュしましたか?いいえ、クロムはこのページをロードするすべての方法を主張しました。たとえそこにあったとしても(キャッシュから画像/ js/cssなどをロードしている間)、ソースに直接移動します。
それで、ETagを試しました:
function caching_headers ($file, $timestamp) {
$gmt_mtime = gmdate('r', $timestamp);
header('ETag: "'.md5($timestamp.$file).'"');
header('Last-Modified: '.$gmt_mtime);
header('Cache-Control: public');
if(isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) || isset($_SERVER['HTTP_IF_NONE_MATCH'])) {
if ($_SERVER['HTTP_IF_MODIFIED_SINCE'] == $gmt_mtime || str_replace('"', '', stripslashes($_SERVER['HTTP_IF_NONE_MATCH'])) == md5($timestamp.$file)) {
header('HTTP/1.1 304 Not Modified');
exit();
}
}
}
date_default_timezone_set('Europe/Jersey');
$date = date("D, d M Y") . " 0:0:0 GMT";
caching_headers('homepage', strtotime($date));
echo $_SERVER['HTTP_IF_MODIFIED_SINCE'];
キャッシュしましたか?いいえ、常に HTTP_IF_MODI... が設定されていないことがわかります
インターネット上には他にも多くのコードがありましたが、すべて失敗しました。
私が見逃しているのは、htmlファイルをキャッシュする方法があるに違いありません。たくさんのサイトがそれを行っているのを見ました。
非常に迅速に説明します。
ユーザーがログインしていないときの私のホームページには、1 日に 1 回変更される静的コンテンツがあります。このページは当然、帯域幅サイズの点で最もコンテンツが多く、私のサイトの他のどのページよりも多くのコンテンツを含んでいます。
ユーザーがログインしていない場合にコンテンツをキャッシュし、翌朝 0:0:0 までしかキャッシュを保持しないようにして、このページの速度を上げたいと考えています。ユーザーがログインしているかどうかなどを確認できるように、htaccessではなくPHPにある必要があります。
ETAG を使用する必要があると思いますが、何らかの理由で ETAG を機能させることができません。私の理解では、私が使用するこのスクリプトは minify と呼ばれ、ETAG をうまく使用しているため、サーバーがそれらを無効にしたわけではありません。
正直なところ、私は ETAG で何をしているのかわかりませんが、助けは非常に限られています (誰かが助けを求めるスレッドがあるたびに、誰かがそれを無効にするように言っているだけです)。
[編集] PHPのドキュメントに従って基本的なキャッシュを試しました:
header("Pragma: public");
header("Cache-Control: max-age=604800");
header('Expires: ' . $date . ' 00:00:01 GMT');
ダイスなし...