我正在开发一个 Web 应用程序,该应用程序大量使用带有选择下拉列表的网格进行数据输入。网格由多行选择框组成。在某些情况下,页面上可能同时有数百个选择框。
目前,我渲染网格类似于以下方法:
function render(jsonData) {
var html = [];
$.each(jsonData.Rows, function (i, row) {
html.push('<tr data-id="', row.Id, '"><td>');
renderSelect(html, globalVar.ArrayX, row.ValueX);
html.push('</td><td>');
renderSelect(html, globalVar.ArrayY, row.ValueY);
html.push('</td><td>');
...
html.push('</tr>');
});
$('tbody#container').html(html.join(''));
}
function renderSelect(html, set, selectedValue) {
html.push('<select>');
$.each(set, function (i, item) {
html.push('<option value="', item.Id, '"', item.Id === selectedValue ? ' selected="1"' : '', '>', item.Name, '</option>');
});
html.push('</select>');
}
大多数选择框都有相同的选项,只是每行选择的项目不同(所以我不能简单地缓存选择框 html)。
性能并不可怕,Chrome 在 1 秒内渲染网格,FF 和 IE 在大约 2 秒内渲染。我仍然想知道,是否有更高效的内存/性能替代方法来创建这些选择框,也许可以通过某种方式来引用它们为每一行重新创建它们?