2011-04-19 110 views
0

我有一個很大的形式與132(12x11)選擇菜單從數據庫(MySQL)填充。問題很明顯:由於所有這些數據庫調用,頁面需要很長時間才能加載。有沒有一種方法來緩存從數據庫填充的多個選擇菜單

表格的結構:每個房間有12個獨立的部分,每個房間有11個下拉菜單(這裏是鏈接http://tinypic.com/view.php?pic=6tfjpk&s=7)。

從其中的11個下拉列表中選擇8個是相同的「房間描述」。有沒有辦法......我可以以某種方式緩存這些下拉列表,特別是那些來自第1部分(第1房間)的8個下拉列表,然後只爲所有其他部分(其他11部分)重新加載緩存? 我試圖在動態變量(它創建數據庫的下拉列表)中創建數組,其中動態變量被分配爲靜態變量 static $ {$ var_name};

但是php解析器本身不允許動態變量是靜態的。

+0

什麼阻止你將它們保存到一個ini文件?或者一個平面文件,你可以在緩存時間過後再調用 – Jakub 2011-04-19 18:09:16

+0

我會在緩存之前查看查詢。性能遵循80/20規則。也就是說,優化查詢可能比設置緩存更快更容易。 – 2011-04-19 18:10:58

+0

@jakub我可以這樣做...但是當我更新數據庫時(我必須再次更新ini文件嗎?)我應該怎麼做? – Kide 2011-04-19 19:51:27

回答

0

問題解決!該解決方案的

@AJ

  1. 第1部分是從查詢數組保存到會話(AJ的建議)。它有幫助,但不是很多(不像我預期的那樣節省了我僅僅0.5秒的頁面加載量,頁面在此之前在4,79秒內加載...在4,47秒的時間內...

  2. 這部分,是一個實際的解決方案

在我的代碼中dorpdown功能開始我有這樣的代碼:
$dbh = new PDO(CONFIG_MYSQL_DSN, CONFIG_MYSQL_USERNAME, CONFIG_MYSQL_PASSWORD, array(PDO::ATTR_PERSISTENT => false));

$dbh -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

這意味着我每次調用函數時都會創建一個新的db連接。我在前段時間創建函數時創建的,它應該僅用於測試目的,因爲我確實在每個頁面上都包含了包含文件,以確保我已連接到數據庫。它有一個選項array(PDO::ATTR_PERSISTENT => true

因此,爲了避免在每次調用下拉函數時都進行db連接,我已經在該包含文件中將$ dbh設置爲全局global $dbh;。我還在函數本身中設置了global $dbh;。現在頁面只用0.6秒加載而不是4.76,這是一個很大的改進!

0

爲什麼不將陣列保存到您的session

相關問題