2012-02-07 42 views
0

我目前正在運行一個擁有數百萬個動態頁面的項目。這些頁面的內容是從數據庫中收集的,當然數據庫也有很多表格。由於這些數據庫內容不會頻繁變化,並減少服務器對MySQL連接和查詢不必要的負擔,我已經實施了Smarty緩存,持續時間爲七天或一個月,具體取決於內容類型。如何處理使用Smarty 3的巨大頁面的緩存

現在,我的問題是,我的單個緩存目錄中有大量的緩存頁面,我開始認爲它可能會降低整體性能。

那麼,誰能告訴我在單個目錄上擁有數百萬緩存頁面時的性能問題?或者,我如何管理存儲這些緩存的文件?或者,我如何正確使用Smarty緩存來處理大量的頁面?

回答

0

我發現,將所有緩存文件放在單個目錄中不會產生任何性能問題,除非我們要讀取循環中的文件。

但是,最新版本的smarty(撰寫本答案時爲3.1.13)存在問題(請參閱關於smarty forum的討論)。當清除特定緩存ID或組的緩存時,smarty會逐個讀取所有文件,這需要一段時間才能刪除單個緩存。

0

直接向用戶提供您的動態頁面HTML內容。 你可以用不同的方式做到這一點。 有太多的方法來做到這一點,但你有數百萬頁然後應用這個過程。

  1. 當任何用戶至上檢查緩存存在該頁面
  2. 如果沒有,那麼緩存生成和提供網頁
  3. 和基本的緩存文件到期日可以再次重新生成緩存文件。

基於庫我建議你PEAR cacheLiet或這是非常簡單的,你可以編寫自己的代碼。但使用PEAR cacheLite的好處是它具有許多驅動程序,如文件,數據庫和其他緩存系統。

對於根據您的網站類別或您網站所擁有的標籤來緩存不同的文件。

+0

我已經用Smarty Caching實現了所有建議的列表。我想知道任何性能問題,同時在單個目錄中擁有數百萬個緩存頁面,或者在使用Smarty 3時有更好的解決方案。 – Prakash 2012-02-07 19:29:48

+0

放入1個目錄不會產生性能問題。 – 2012-02-08 04:04:18

0

您可能想考慮使用Varnish作爲反向代理緩存。它非常適合緩存大量靜態頁面。