如何插入大约 300 项到下拉列表(不影响性能)?
How to insert about 300 items to drop down list (without affecting performance)?
我在 Web 服务调用中收到大约 300 个项目。我需要将它们添加到下拉列表中。我使用以下下划线模板完成了此操作:
<select>
<% _.each(data, function (item) { %>
<option><% print(item) %></option>
<% }); %>
</select>
但是这段代码影响了性能。请让我知道在不迭代列表的情况下执行此操作的任何方法。
注:Backbone.js和underscore.js在我的项目中使用。我也欢迎 javascript 和 jquery 中的解决方案
提前致谢。
除了ajax、setTimeout和setInterval,JavaScript中没有可以异步执行的东西。
您需要考虑通过后端解决方案来实现,或者简单地尝试找到最便宜的同步代码执行
虽然我不是代码效率方面的专家,但我相信常规的 for 循环是打印项目数组的最快方法之一。
<script>
var location = '#options'
for(var i = 0; 0 < data.length; i++){
$(location).append(data[i]);
}
</script>
<option id="options">
</option>
</select>
试试这个,
var option = "";
$.each(data, function(i, item) {
option += "<option>"+item+ "<option>";
});
$('select').append(option);
这真的取决于您的应用程序的可用性。例如,您可以有一个计时器 运行 1ms 间隔,一次插入一个元素。因此构建 select 需要 300 毫秒。这将在数据准备好之前引入 300 毫秒的延迟;但它不会中断 UI-线程。
另一种方法是使用 DocumentFragment。这通过首先将所有项目附加到 fragment
,然后将片段附加到 DOM-树来实现 - 只导致 ONE dom- 操作共 300.
第三个选项是在服务器端生成标记。
不幸的是,第四种选择只有上帝知道。
我在 Web 服务调用中收到大约 300 个项目。我需要将它们添加到下拉列表中。我使用以下下划线模板完成了此操作:
<select>
<% _.each(data, function (item) { %>
<option><% print(item) %></option>
<% }); %>
</select>
但是这段代码影响了性能。请让我知道在不迭代列表的情况下执行此操作的任何方法。
注:Backbone.js和underscore.js在我的项目中使用。我也欢迎 javascript 和 jquery 中的解决方案
提前致谢。
除了ajax、setTimeout和setInterval,JavaScript中没有可以异步执行的东西。
您需要考虑通过后端解决方案来实现,或者简单地尝试找到最便宜的同步代码执行
虽然我不是代码效率方面的专家,但我相信常规的 for 循环是打印项目数组的最快方法之一。
<script>
var location = '#options'
for(var i = 0; 0 < data.length; i++){
$(location).append(data[i]);
}
</script>
<option id="options">
</option>
</select>
试试这个,
var option = "";
$.each(data, function(i, item) {
option += "<option>"+item+ "<option>";
});
$('select').append(option);
这真的取决于您的应用程序的可用性。例如,您可以有一个计时器 运行 1ms 间隔,一次插入一个元素。因此构建 select 需要 300 毫秒。这将在数据准备好之前引入 300 毫秒的延迟;但它不会中断 UI-线程。
另一种方法是使用 DocumentFragment。这通过首先将所有项目附加到 fragment
,然后将片段附加到 DOM-树来实现 - 只导致 ONE dom- 操作共 300.
第三个选项是在服务器端生成标记。
不幸的是,第四种选择只有上帝知道。