我想发布一个我一直在使用 KnockoutJS 创建虚拟化列表的小部件,并找出我可能缺少的任何优化。
在使用 CSS display:none来虚拟化屏幕外元素时,我得到了不同的答案。我听说这样做可以避免浏览器“渲染”周期,但元素仍然会在“dom”更新周期中被触及。在我的测试中,似乎设置 display:none (通过绑定可见的剔除)确实加快了添加初始数量的项目。
最后,在我的虚拟化绑定处理程序中,我目前通过获取滚动位置和窗口高度来获取当前视口。这允许我将窗口内索引(indexes * rowHeight)设置为display:block。但是,为了隐藏其他不可见的索引,我遍历并将每个索引设置为display:none。这显然是 O(n) 来执行整个操作,但我没有看到另一种解决方法。有没有办法优化这个?将重置display:none卸载到队列中会更好吗,因为它不需要立即发生?
http://jsbin.com/axupap/56/edit
任何见解将不胜感激!