我正在编写一个 Web 应用程序,它显示大量数据行(目前约为 2000 行),每行数据都有一个下拉“选择”元素,其中包含约 100 个选项。 默认情况下可以选择这些选项中的任何一个。 我正在客户端生成所有实际的 DOM 元素。 我的问题:在我相对较新的机器上渲染这个野兽大约需要 4 秒,这确实不是最理想的。 我知道问题出在所有选择元素上,因为用一些静态文本或单选项列表替换它们会导致渲染时间几乎难以察觉。
原始代码,减去失败的实验(见下文)是这里。
避免“对数据进行分页”和“选择中没有太多选项”的建议,假设我确实有正当理由显示,那么我可以编写追加/渲染代码的“最有效”方式是什么那么多数据,有那么多选择?就我的目的而言,Firefox 是我唯一关心的平台。 我尝试过的事情:
使用
我最终所做的是在
鼠标悬停上延迟加载项目,而不是单击时加载。原因有两个:
这会带来更流畅的用户体验,因为当用户看到渲染的选项下拉列表时,大多数(如果不是全部)选项子项都已添加。 function createItemChooser() {
const root = document.createElement("select");
const freeFormChoice = document.createElement("option");
freeFormChoice.innerText = "Default";
freeFormChoice.setAttribute("value", -1);
root.appendChild(freeFormChoice);
root.onmouseover = (event) => {
if (root.children.length < (MONSTER.length + 1)) {
MONSTER.forEach((item) => {
const choice = document.createElement("option");
choice.innerText = item;
root.appendChild(choice);
});
}
};
return root;
}