2015-12-29 27 views
0

如果我正在做像isNumeric這樣的簡單檢查,響應時間很好,但只要我開始做更復雜的任何事情(如果值有效,檢查數據庫),那麼它很快就會變得太慢而不能有用。即。 45秒900排,20分鐘25K行(然後是電網獲得越野車)改善Handsontable驗證響應性

這裏是那種檢查的例子我目前想實現:

var BadArray = []; 
var GoodArray = []; 

isValid = function (value, callback) { 
    var bad = $.grep(BadArray, function (e) { return e.Key == value; }); 
    if (bad != null && bad.length === 0) { 

     var good = $.grep(GoodArray, function (e) { return e.Key == value; }); 
     if (good != null && good.length === 0) { 
      var errMsg; 
      var data = 
       $.ajax({ 
        //ajax call setup here 
        success: function (response) { 
         if (response == "active") { 
          GoodArray.push(value); 
          callback(true); 
         } 
         else { 
          BadArray.push({ Key: value, RspMsg: response }); 
          errMsg = response; 
         } 
        } 
       }); 

      if (errMsg != null) { 
       $("#ValErrors").empty(); 
       $.each(BadArray, function (index, value) { 
        $("#ValErrors").append("Key " + value.Key + ": " + value.RspMsg + "<br />"); 
       }); 

       callback(false); 
      } 
     } 
     else { 
      callback(true); 
     } 
    } 
    else { 
     callback(false); 
    } 
}; 

還有什麼我可以做些改進這個具體的例子嗎? 如何提高Handsontable中驗證函數的響應時間是否有任何通用提示/技巧?

回答

0

那麼,如果你有900行,每個說10列,那就是9,000個Ajax調用!也許你可以做的只是驗證使用此方法更改的單元格,並且當您需要驗證所有單元格時,需要一個單獨的端點來接收整個數據數組,檢查每個單元格,然後返回一個包含所有未驗證單元格的數組。

+0

有沒有辦法告訴Handontable你想以這種方式進行驗證?我還沒有看到任何方法來阻止它單獨檢查每個單元。 – wham12

+0

有,我無法找到它是如何做到的。基本上,你關閉驗證onChange,然後在'afterChange'事件中執行'hot.validateCells()'或'hot.validateCell(x,y)' – ZekeDroid