2012-06-21 51 views
2

我的應用程序會即時縮小和組合靜態內容,例如CSS/JavaScript,以減少最終用戶的加載時間。然而,這個過程對資源要求很高。由於這個原因,我實現了一個緩存系統。通常情況下,這種靜態內容很少會改變。適用於活動環境中靜態內容的緩存持續時間

將此內容的緩存持續時間設置爲多達一週的時間爲甚至更​​多,這會很愚蠢嗎?然後向管理員提供一個工具,以便在編輯樣式等時手動清除緩存。

編輯以使標籤更合適,將不勝感激。

+0

你說的是服務器端緩存,不是嗎?因爲無法清除客戶端緩存(儘管如果名稱或參數不再相同,您可以讓它們下載另一個文件)。 – FelipeAls

+0

@FelipeAlsacreations確切地說,服務器端,而不是客戶端。 – Zar

回答

1

在服務器端的情況下,你的緩存失效的持續時間是太簡化了在我看來。你可以知道當你的文件被更新,你需要重建你的緩存。如果編輯是通過一些自定義界面作爲應用程序的一部分完成的,那麼很簡單:只要進行編輯就刪除緩存。

但即使你的管理員通過FTP更新文件,你可以看看時間戳。

例子:

<?php 
$files = array("reset.css", "style.css"); 

$timestamps = ""; 
foreach($files as $file){ 
    $timestamps .= filemtime($file); 
} 
$cache_file = md5($timestamps).".css"; 

if(!file_exists($cache_file)){ 
    // Build minified version into cache file 
    // (leaving the implementation out here) 
    concat_and_minify($files, $cache_file); 
} 

echo '<link rel="stylesheet" type="text/css" href="' . $cache_file . '"/>'; ?> 

這隻會重建縮小的版本,如果任何文件的更改。與「啞」持續時間機制相比,讀取每個文件的mtime是一個小的開銷,但值得獲得靈活性。

+0

優秀的答案與一個很棒的解決方案!萬分感謝! – Zar

0

靜態內容的一週緩存看起來很標準。你有沒有寫這些文件的過程也會影響緩存? (例如重寫一個.htaccess文件)取決於你如何緩存。

0

您可以向腳本/樣式URL添加版本,例如http://example.com/generate-styles.php?version=123。根據HTML的緩存策略,這可能會讓您使CSS/JS緩存更加長久。 Wikipedia使用的軟件MediaWiki使用了另一種方法:它包含一個使用壽命爲5分鐘的引導腳本,其中包含所有CSS/JS的版本,然後使用此信息加載最新版本的文件(使用與版本相同的技巧網址)。

相關問題