2013-02-26 80 views
0

我在雲和css框架twitter引導上使用多個數據庫以使用「typeahead」與ajax獲取textfield上的suggession。 現在每個keyup事件一個Ajax調用起火併如下觸發查詢:如何減少瀏覽器的負載?

public function prod_identifier_typeahead($value) {    
    $db = ConnectionManager::getDataSource('incident_mgmt'); 
    $list = $db->rawQuery('select id, identifier from products where identifier like "'.$value.'%";');  
    $options = array(); 
    while ($row = $db->fetchRow()) { 
     $options[] = array('id' => $row["products"]["id"],'name' => $row["products"]["identifier"]);      
    }  
    $this->set('options', $options); 
    $this->set('_serialize', 'options');   

} 

每個Ajax調用使用的連接對象。現在,任何人都可以幫助我減輕這種ajax調用查詢處理負荷?

+0

爲什麼你在使用'rawQuery'並跳過使用'Model'?這樣你就不*使用CakePHP框架了。爲了讓事情變得更糟,'$ value'不會被清理/轉義。 **因此,您的代碼非常不安全,並且對SQL注入開放**請閱讀(至少)本手冊中的本章:http://book.cakephp.org/2.0/en/models/retrieving-your-data.html – thaJeztah 2013-02-26 23:14:31

+0

我知道它不遵循cakePHP規則...但我有多個數據庫,你是彼此集成它使cakephpRUN沉重,並獲取另一個數據庫的數據而不是默認我必須使用這個rawQuey ...沒有其他選項我有... :) – Jhanvi 2013-02-27 05:48:50

回答

1

蛋糕有caching它可以用來存儲從數據庫中檢索到的數據。因此,重複的請求不會觸及數據庫,但是,您需要小心不要讓數據永遠不會再被使用。

我會嘗試優化常用的使用模式。例如,用戶鍵入'abdc',兩次退格,然後鍵入'cd'。在這種情況下,幾乎可以立即在'ab'和'abd'上獲得緩存命中,但5分鐘後可能安全地清除與此查詢相關的所有內容。

+0

所以...我的方法是適當的,或者我應該替換通過創建一個額外的緩存文件在每個第一次加載的網站,並應該使用該文件來抓取typeahead..lease數據。請指導我哪個解決方案我應該更喜歡? – Jhanvi 2013-02-26 06:08:58

+0

如果它的工作,我會保持原樣。當您開始出現性能問題時,您可以查看數據並選擇緩存策略。 – 2013-02-26 06:34:54

+0

right nw我的表沒有大數據,所以它的工作正常......但我想如果將來的表數據增加它將創建每個keyup上的負載,甚至需要時間來創建連接和提取,所以可以你可以解釋一下,我應該如何應用緩存方法默認cakephp的功能 – Jhanvi 2013-02-26 06:39:39

相關問題