data 介绍

使用 data 方式加载 5000 条静态数据,Select2 默认会展示全部数据,但下拉框最多可见 50 条(默认分页高度限制),其余选项需要滚动查看。

var data = [];
for (var i = 1; i <= 5000; i++) {
data.push({ id: i, text: “选项 ” + i });
}

$(‘#mySelect’).select2({ data: data });

说明

 

  • 默认可见 50 条,但你可以滚动查看更多选项。
  • 没有自动分页,所有数据一次性加载(可能影响性能)。
  • 搜索可用,输入内容可筛选匹配的选项。

 

性能

1.页面卡顿

  • Select2 默认会将 5000 条数据渲染到 DOM,如果 HTML 结构复杂,可能导致浏览器卡顿。
  • 特别是在 低性能设备移动端,加载时间会变长。

2.下拉框打开变慢

  • Select2 在打开下拉框时,需要渲染所有 option大数据量会影响 UI 交互流畅度

3.搜索变慢

  • Select2 默认在前端过滤数据,如果 5000 条数据都在前端,会导致 搜索变慢,特别是在 低端浏览器低配设备 上。

优化方案

1、开启分页模式(模拟 AJAX 加载):

如果数据量很大(如 10,000+ 条),可以考虑:

$(‘#mySelect’).select2({
minimumInputLength: 1, // 输入 1 个字符后才显示选项
data: [], // 初始为空
ajax: {
transport: function (params, success, failure) {
var term = params.data.term || “”; // 获取用户输入
var filtered = data.filter(item => item.text.includes(term)); // 过滤本地数据

success({
results: filtered.slice(0, 50), // 每次返回最多 50 条
pagination: { more: filtered.length > 50 } // 是否还有更多数据
});
},
delay: 250 // 延迟搜索,提高体验
}
});

minimumInputLength: 1:

用户输入至少 1 个字符才触发搜索,避免初始加载太多数据。

ajax.transport:

不发送实际 AJAX 请求,而是在本地数据 data 中筛选匹配项。

filtered.slice(0, 50):

限制每次返回最多 50 条,模拟服务器分页,提高性能。

agination.more:

true 代表有更多数据,false 代表到底了。

2、使用 templateResult 只渲染必要内容

默认 Select2 渲染的是完整的 option 标签,但你可以使用 templateResult 让 UI 变轻量:

$(‘#mySelect’).select2({
data: data,
templateResult: function (item) {
return $(‘<span>’).text(item.text); // 避免额外 HTML 渲染
}
});

3、使用 maximumSelectionLength 限制最大选择项数:

$(‘#mySelect’).select2({
data: data,
maximumSelectionLength: 5 // 最多可选 5 项
});

适用于多选

总结

  • 如果数据量不大(如 100 条)不需要 AJAX,直接用 data 即可,减少不必要的处理逻辑,提高代码简洁性!
  • 如果数据量非常大(如 5000+ 条),可以使用 AJAX 或本地模拟分页加载。
  • 如果数据是动态变化的(如从服务器获取),则 AJAX 方式更合适。

作者 admin

百度广告效果展示