我有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。
导致性能下降的原因或解决方案是否能够像其他人那样过滤功能(按时间计算)?