2012-01-21 26 views
0

我有一個頁面可以從sql中獲取2-3個數據塊。這些塊被分成大約20個不同的變量。通過多個數據庫查詢的會話變量最佳實踐

您導航到的每個頁面都會一遍又一遍地使用相同的數據。

問:

我應該把所有的變量在會話變量或者我應該查詢數據庫中的每個頁面上,重新建立數據和變量各一次。

一些頁面修改數據庫和隨後的變量。

謝謝。

回答

2

是的,最好有一個緩存機制。但是,php的會話變量不是最好的解決方案。您可以使用緩存系統,例如APC或MemCached,或者您可以將它們簡單地存儲到硬盤上的文件中。

理由不使用會話變量:

  1. 範圍。我敢打賭,你的一些變量可能比一個會話的範圍更廣。換句話說,一些變量可以在不同的會話之間共享。

  2. Eager loading。每次您撥打session_start,全部變量將被反序列化並加載,無論您是否需要它們。

+0

我打算看看你的兩個建議。還沒有使用它們,所以我需要研究它們。感謝您的答覆。 –

1

你應該將數據存儲在$_SESSION只要有可能(假設它不是一個大數據量和它的使用總是一遍又一遍又一遍)。

你最大的問題就是如果數據發生變化會發生什麼。你可以從時間碼刷新他們的時間,如:

if(rand(0,100) < 10){ 
    readSessionsFromPost(); 
} 

的另一種方法是修改本地文件,並通過mtime檢查它在每一個請求(與最後的值存儲在$_SESSION)。或者您可以使用:

$time = $db->fetch_one('SELECT MAX(mtime) FROM pages'); 
strtotime($time) >= $_SESSION['time']; 

總結。

如果你不關心那個用戶獲得當前數據20請求後,你應該與蘭特(我真的會照顧,並不會使用這:))。

如果您有權訪問配置文件訪問權限,則應使用mtime和修改的時間(無需數據庫請求)。

如果你只有很少的用戶和很好的服務器性能儲備,你應該每次加載它們(或者每隔幾秒更改一次數據)。

緩存會增加一些開銷,您必須決定緩存這些數據是否對性能至關重要。

+0

謝謝Vyktor ...很多思考和研究.. –