2010-12-01 5 views
3

用に最適化:Apacheのバーチャルホストディレクティブは、私は現在、私のバーチャルホストでは、この設定を使用するのPageSpeed

<Location /> 
    SetOutputFilter DEFLATE 
    BrowserMatch ^Mozilla/4 gzip-only-text/html 
    BrowserMatch ^Mozilla/4\.0[678] no-gzip 
    BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html 
    SetEnvIfNoCase Request_URI \ 
    \.(?:gif|jpe?g|png)$ no-gzip dont-vary 
    Header append Vary User-Agent env=!dont-vary 
</Location> 
<Directory /> 
    ExpiresActive On 
    ExpiresByType text/html "access plus 5 minutes" 
    ExpiresByType text/css "access plus 1 month" 
    ExpiresByType application/x-javascript "access plus 1 month" 
    ExpiresByType application/javascript "access plus 1 month" 
    ExpiresByType text/javascript "access plus 1 month" 
    ExpiresByType image/gif "access plus 1 month" 
    ExpiresByType image/png "access plus 1 month" 
    ExpiresByType image/jpg "access plus 1 month" 
    ExpiresByType image/jpeg "access plus 1 month" 
    ExpiresByType image/x-icon "access plus 1 month" 
    ExpiresDefault "access plus 1 day" 

    <FilesMatch "\.(ico|jpeg|pdf|flv|jpg|png|gif|js|css|swf)$"> 
    Header set Cache-Control "max-age=2592000, public" 
    Header unset Last-Modified 
    Header unset ETag 
    FileETag None 
    </FilesMatch> 
    <FilesMatch "\.(html|php)$"> 
    Header set Cache-Control "max-age=900, public, must-revalidate" 
    </FilesMatch> 
</Directory> 

それは事をスピードアップするための素晴らしい作品ながら使用して主にしながら、時々、ユーザーが(コンテンツの上に作られた、彼らはthemselfsの変更を参照してくださいいけませんFireFoxの):(任意の提案/最適化のヒント?

答えて

0

ここでの問題は、ブラウザがJavaScriptやCSSや画像をキャッシュするので、キャッシュの有効期限が切れていない限り、サーバーには何も変更している場合を知ることができませんです。

のために例、あなたはHAを考慮するscript.jsという名前のJSファイル。あなたのhtaccessファイルを持っている以下の規則、

ExpiresByType application/x-javascript "access plus 1 month" 
ExpiresByType application/javascript "access plus 1 month" 

によるとJavaScriptファイルは月のためにキャッシュされているので、キャッシュを手動でクリアされない限り、新しい要求は、1月のJSファイルを聞かれません。

この問題を解決する方法。

<script src="includes/script.100.js" type="text/javascript"></script> 

または

<link rel="stylesheet" type="text/css" href="includes/style.100.css" /> 

100は、任意の数の可能性として、HTMLファイル内に、あなたが含まれている必要があり、ファイル名はscript.jsであると仮定すると、

です。私は通常、1、2、3などから増加します(バージョン番号は正確です)。

さて、私のhtaccessファイルで、私は

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^includes/style\.[\d]+\.css$ /includes/style.css [L] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^includes/script\.[\d]+\.js$ /includes/script.js [L] 

上記の二つの条件のようなもの、実際のファイルには関係なく、ファイル名とファイルタイプとの間で使用されているものの数、使用されていないことを保証しています。

これにより、変更するたびにバージョン番号を変更すると、すべての古いキャッシュが期限切れになり、すべてのユーザーに最新のコードが表示されます。

+0

申し訳ありませんが、問題はありません。すべてのイメージには、新しいフォーマットで作成/変更/作成されたタイムスタンプが含まれています。また、リリースプロセスで圧縮と名前変更のためにCSSとJSファイルがあります。私が直面していることは、私が記述したことです。ユーザは、彼が変更を行った後に/変更された/バックエンドからフロントエンドのページにリダイレクトされた後、コンテンツを変更します(PHPで生成されたhtmlページに表示されたコンテンツ彼がページのハードリフレッシュをしない限り(そして、サーバーキャッシュ[memcached/apc]の問題ではない) – Hannes

0

...問題はJS/CSSファイルの内容ではなくに基づいていることをハネスからの返信後

をこのコメントを投稿私は一度、この問題を持っていましたが、問題は何を理解するために見極めることができませんでした。理由は、HTMLページが私とブラウザの間のプロキシサーバーのどこかにキャッシュされている可能性があると私は考えました。

私は、md5(time( "U"))のようなものを持っていたhashというクエリパラメータでURLを生成しました。例えば

は、同じ問題を抱えていたURLは、この問題の後

http://test.com/controller/functionname/

のようなものが、私は、ユーザーがクリックしたすべてのURLが

http://test.com/controller/functionname/?hash= {何かのようなものになるように変更されました}。

私はあなたのために働くことを願っています。また確かに、あなたはあなたのウェブページを追加することができます。

<META HTTP-EQUIV="CACHE-CONTROL" CONTENT="NO-CACHE"> 
1

代わりのキャッシュにブラウザを強制的に、あなたは必見再検証ヘッダを送信し、有効期限とのLast-Modifiedヘッダを送信することによって、あなたのプログラミング言語(例えば、PHP)の中から、キャッシュを制御する必要があります。ブラウザは要求ごとに最新のバージョンをサイトに要求しますが、何も変更されていない場合は空のページで回答してください。

実装には時間がかかることがありますが、間違いなく機能します。

関連する問題