Jquery Filter()选项会降低select2下拉列表中的性能

时间:2017-08-08 14:33:02

标签: javascript jquery drop-down-menu jquery-select2

我有18个select2下拉列表(#menu1,#menu2,#menu3等等),有多个外部选项可以过滤它们。过滤器完全没有问题,但在Chrome中大约需要3-6秒,其他具有相同逻辑的过滤器具有即时响应。 这是一个简化版本:

$(document).ready(function(){
var all = $('#menu1 option');  
var c; // Set by another function
var costo;
var razza;

$('#vanillas').on('click', function() {

// Really Slow
if ((typeof costo === 'undefined') && (typeof razza === 'undefined')) {
    $('#menu1, #menu2, #menu3').empty().append(all);
    $('[id^="menu"] :not(option[data-razza=Vanilla])').remove();
}

// Really Slow
else if ((typeof costo === 'undefined') && (typeof razza !== 'undefined')) {
    $('#menu1, #menu2, #menu3').empty().append(all);
    $('[id^="menu"] :not(option[data-razza=Vanilla])').remove();
} 

// This is fast
else { 
    $('#menu1, #menu2, #menu3').empty().append(all.filter("option[data-costo='x']")).append(all.filter("option[data-costo="+c+"]"));
    $('[id^="menu"] :not(option[data-razza=Vanilla])').remove();
}
    razza = "Vanilla"; 
});
});

编辑:(给它一个上下文) 选项的初始数量(在var" all"中)为545,当此功能发生时(#vanillas onclick),下拉列表中的选项为503,此函数后的选项数为466 。 "其他"输出选项将小于100,因此可以更快地运行,但不是这样会导致速度变慢。要使用另一个过滤器对相同数量的初始元素执行相同操作,需要0.02秒,最终输出为11个选项,或者其他类似过滤为35。

导致性能下降的原因或解决方案是否能够像其他人那样过滤功能(按时间计算)?

0 个答案:

没有答案