2016-12-15 102 views
11

我正在將1000條記錄加載到引導選擇下拉列表。 Chrome瀏覽器大約需要2秒,但在IE 9中需要30秒。另外,取消或x在IE中的引導模式也需要10 + s。 API調用沒問題,但渲染速度很慢;有人能給我一些方向嗎?引導選擇加載在IE中花費太長時間

所以我正在加載一個客戶列表並設置所選。這是代碼。

var customerPicker = $('#customer-picker'); 
    API.getCustomers().then(function (result) { 
     loadDropdown(customerPicker, result.customers); 

     // set the selected to current customer; it takes 10s in IE 
     customerPicker.val(currentCustomerId).selectpicker('refresh'); 

     // it takes about 10s in IE too. selector is the bs modal div 
     $(selector).css('z-index', '1060').modal('show'); 
    }).catch(function (errorMessage) { 
     ToastManager.showError(errorMessage || 'An error occurred while loading customer list. Please try again.'); 
    }); 

    function loadDropdown($div, arr) { 
     var options = ''; 
     $.each(arr, function (i, item) { 
      options = options + '<option value="' + item.Value + '">' + item.Text + '</option>'; 
     }); 
     $div.html(options); 
    } 

enter image description here

+0

您是否嘗試過'$ div.append('

+0

@RobinMackenzie是的,我試過沒有運氣。 – Quentin

+1

你使用的是什麼版本的jQuery?你很可能通過嘗試不同的jQuery發佈來解決這個問題,因爲你提到的兩個函數都直接與js打交道。 –

回答

2

您是否嘗試過設置循環內的innerHTML;

$div[0].innerHTML += '<option value="' + item.Value + '">' + item.Text + '</option>'; 

而不是在最後。

$div.html(options); 
1

也許你想考慮一個序列化庫來處理它一次加載的記錄數。 Clusterize.js是一個非常完善的版本,只允許瀏覽器渲染當前客戶端正在查看的內容。它顯示任何地方最多可以以這種方式處理100,000個以上的記錄。

https://clusterize.js.org/

0

的Jquery可以在舊的瀏覽器體驗的性能損失。 Here's a solution類似於您遇到的情況。與原生JS相比,$.each()已經非常慢了。