【发布时间】:2014-08-15 18:08:13
【问题描述】:
我目前正在尝试优化使用 KnockoutJS 进行视图绑定和呈现的应用程序。我们在以下场景中发现了一个巨大的瓶颈,即数据集大小不断增长:
- 数据集 (observableArray) 显示在 html 表格中。
- 同时显示50行。
- 行模型中的每个字段都是可观察的,因为数据是内联可编辑的(输入、选择、...)
- 每行存在 8 个使用 Select2 小部件 (http://ivaynberg.github.io/select2) 和 jQuery 日期选择器初始化的选择。
我已经实现了这些 KnockoutJS 性能提示,我在不同的网站上找到了这些提示:
- observable 数组与完整的数据集(observable 的调用)一起发布,而不是与多个 push() 调用一起发布。
- 按照多个站点的建议,我将模板绑定与 foreach 选项结合使用,而不是将两者拆分为单独的绑定。
- Datepicker 和 Select2 被实现为自定义剔除绑定处理程序。
- ko.applyBindings 直接以 table-element 作为第二个参数调用,因此不是整个 DOM 都被敲除绑定。
但在我看来,主要瓶颈似乎是附加小部件的初始化。我测量了 Select2 小部件的创建过程,大约需要 15 毫秒。当然,这很快就会累积成 50 行和 8 列。因此,对 observable 数组的一次调用以加载完整的数据集最多需要 10 秒!在此期间,浏览器负载过重且无响应,这在可用性方面是不可取的。
这引出了我的问题:
- 有人遇到过类似情况吗?是如何处理的?
- 有没有更好的方法来初始化带有敲除的第三方小部件?
- 是否有替代方法(使用 KnockoutJS)来解决此问题?
【问题讨论】:
-
是否始终需要您的插件(select2 和 datepicker)?或者你可以进入“编辑模式”然后才初始化它们吗?
标签: javascript jquery-ui knockout.js widget jquery-select2