2010-09-30 70 views
1

我有很多JS和CSS文件爲我的網站。爲了儘量減少瀏覽器的連接請求,我將它們加入到一個單獨的php文件中。我使用頭參數來強制文件被緩存。這裏是我如何做的JS案件(CSS是完全一樣的方式):強制緩存通過標頭爲動態生成的JS/CSS文件不適用於所有瀏覽器

<?php 
ob_start("ob_gzhandler"); 
$expires= 60 * 60 * 24 * 14; 
header('Pragma: public'); 
header('Cache-Control: max-age=' . $expires); 
header('Expires: ' . gmdate('D, d M Y H:i:s', time() + $expires) . ' GMT'); 
header('Content-type: text/javascript'); 
include('file1.js'); echo "\n\n\n"; 
include('file2.js'); echo "\n\n\n"; 
/* ... bla bla bla bla ... */ 
include('fileY.js'); echo "\n\n\n"; 
include('fileZ.js'); echo "\n\n\n"; 
ob_end_flush(); 
?> 

這工作得很好在Firefox。對於這個星球上的其他人來說,這些文件並沒有被緩存!它們都很大,所以我有一個惱人的半秒白屏,以便其他瀏覽器爲每個頁面請求重複加載它們。

我想這與標頭的內容長度有關。我嘗試了2-3件事,但我無法做到這一點。有什麼建議麼?

預先感謝您。 任何幫助表示感謝。

回答

0

將單個文件中的所有.js文件加入到項目的部署時間並像其他文件一樣提供該文件是一個好主意,可以在很長的到期時間內配置Web服務器。

如果您沒有部署腳本,那是另一回事。 添加標題爲「Last-Modified」或「ETag」是您最好的選擇。

此外,我建議一次構建大文件,並且只有在任何js發生變化時才重建它。

+0

謝謝xPheRe ...我是'那'接近實現某種方式來自動加入文件。在途中,我發現文件在所有地方都緩存。只需花時間從DOM解析,因爲它相當長。 – StelArian 2010-10-01 13:09:11

0

看起來文件在所有瀏覽器中都是高速緩存。

加載延遲的原因是每個瀏覽器需要在DOM中解析文件的時間。 JS文件非常大。只是Firefox做得更快或更「智能」,這樣用戶在加載頁面時就不會立即停頓。

這是錯誤的,我的文件沒有被緩存。

避免等待的解決方案...在關閉之前移動所有的JS請求。

相關問題