2013-05-02 34 views
1

我需要改進自動完成腳本的性能。我需要的是,當我點擊輸入框elementID時,它將填充search.php中的選擇列表,並由json_encode返回。以下腳本正在工作。但每次當我點擊輸入框時,它需要一段時間才能生成列表。關於自動完成性能的建議

("#elementID") 
.autocomplete({ 
    source: function(request, response) { 
    $.ajax({ 
     url: "search.php", 
     dataType: "json", 
     success: function(data){ 
     response(data[0]);         
     } 
    }); 
    }, 
    minLength: 0, 
    delay: 0, 
    select: function(event, ui){ 
    $(this).val(ui.item.value); 
    }, 
    change: function(event, ui) { //remove if not click from drop down 
    if (!ui.item) { 
     $(this).val(""); 
    } 
    }        
})  
.click(function() { //Click to activate 
    $("#elementID").autocomplete("search", " "); 
});  

在search.php中

$ocidb ->strTable  = "table"; 
    $ocidb ->strField  = "column1"; 
    $ocidb ->strCondition = "coulmn1 is not null"; 
    $result    = $ocidb->ORASelectRecord(); 
    echo json_encode(filter_unique_array($result, 'coulmn1')); 
    return; 

喜歡的瞭解一下,如果我正確地做事情還是有做它的另一個正確的方法?

+0

您在php腳本上檢索了多少條記錄?你嘗試過使用分頁嗎?您是否嘗試過在客戶端和/或服務器端使用緩存? – rkrdo 2013-05-02 01:31:46

+0

如何對自動完成分頁?那裏有沒有好的例子? – user1761160 2013-05-02 01:36:56

+0

可以在服務器端的查詢中使用[LIMIT {[offset,] row_count]完成分頁。要添加緩存DOM元素,你可以按照這個鏈接http://jqueryui.com/autocomplete/#remote-with-cache,因爲我猜你正在使用jqueryui。 – rkrdo 2013-05-02 14:14:18

回答

1

首先你應該檢查緩慢的來源在哪裏。在Chrome開發人員工具進入網絡選項卡,看看需要多長時間來加載自動完成列表:

Chrome Developer Tools

這會告訴你,如果這個問題是在服務器端或客戶端上。如果時間或延遲一起大於300毫秒,那麼等待服務器的可能性非常明顯。您可能希望對您的服務器端代碼進行基準測試,並查看瓶頸所在。從您的代碼中,您可能希望在數據庫中執行唯一性,而不是在PHP代碼中執行。

如果服務器響應迅速,那麼問題可能在於您的JavaScript。嘗試尋找不同的自動完成庫或嘗試使其緩存DOM元素,而不是每次重新創建它們。

通常,某些緩存和可能的預取(在用戶請求它們之前加載最初的一組結果)應該有助於在典型情況下。

+0

對不起,如何使它成爲緩存DOM元素? – user1761160 2013-05-02 01:38:25

+0

很大程度上取決於圖書館的工作方式,您需要對其進行一些破解。 – 2013-05-02 01:44:59