[英]PHP content caching for javascript and css
我有一個獨特的問題,使用谷歌很難解決。 我正在將我的所有javascript和css整合到單獨的php文件中,這些文件使用require_once()來提取文件的內容.javascript文件看起來像這樣:
<?php
header('Content-Type: text/javascript');
require_once('jquery.form.js');
require_once('jquery.jqtransform.js');
require_once('jquery.validate.js');
?>
我的具體問題是,由於php文件擴展名,Web瀏覽器會“看到”這是一個動態頁面,然后每次加載網站上的頁面時都會重新請求內容。 我想要做的是從瀏覽器獲取上次請求的時間 ,然后檢查每個文件修改時間 ,看看我是否真的需要再次發送文件內容。 事實證明很難找到用戶上次請求的時間。 此外,我還沒有開始解決查找包含的文件的最后修改日期的問題,因此如果有關於在服務器上查找文件的文件詳細信息的信息 ,那么也將不勝感激。
為了清楚起見,我這樣做的原因是因為(我認為)它比單獨的gzip壓縮文件更好地利用了gzip壓縮。
提前致謝
我專門寫了一系列關於這個問題的帖子。 請參閱使用PHP增強Javascript和使用PHP 增強CSS 。 這些包括:
你的前提是不正確的。 瀏覽器不會“看到”PHP文件擴展名並決定不緩存內容。 有關瀏覽器如何工作的信息,請訪問http://www.enhanceie.com/redir/?id=httpperf 。
您應該在響應上設置ETAG,然后只需檢查If-None-Match請求標頭,如果內容不變則返回304。
瀏覽器不會通過其擴展名確定頁面或文件是動態的還是靜態的。 它的標題呢。 只需設置正確的標題,以便瀏覽器知道它可以緩存結果。
還有,放棄收盤?>
。 這不是必需的,也是不好的做法。
Alister Bulman剛剛提到了一個針對這個問題的整潔的庫解決方案,但將其作為評論。 我重復他的評論作為答案,因為我發現它很有價值:
Minify - code.google.com/p/minify - 是一個專門用於執行此處所需操作的庫 - 連接文件並發送相應的標題,同時修剪內容,並且很可能將它們壓縮,同時將結果緩存在磁盤上。 - Alister Bulman 2010年1月10日10:44
您可以使用apache mod_deflate啟用自動gzipping文件。
您還可以使用apache mod_rewrite將html中的這些文件稱為js文件,並將請求重定向到php文件,從而避免服務器緩存問題。
像這樣的東西:
RewriteEngine On
RewriteRule (.*).js $1.php
將此代碼放在目錄中的.htaccess文件中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.