Javascript KnockoutJS:我应该如何处理繁重的小部件初始化代码?
我目前正在尝试优化使用KnockoutJS进行视图绑定和渲染的应用程序。在以下场景中,我们发现了一个数据集规模不断增长的巨大瓶颈:Javascript KnockoutJS:我应该如何处理繁重的小部件初始化代码?,javascript,jquery-ui,knockout.js,widget,jquery-select2,Javascript,Jquery Ui,Knockout.js,Widget,Jquery Select2,我目前正在尝试优化使用KnockoutJS进行视图绑定和渲染的应用程序。在以下场景中,我们发现了一个数据集规模不断增长的巨大瓶颈: 数据集(observableArray)显示在html表格中 同时显示50行 行模型中的每个字段都是可观察的,因为数据是内联可编辑的(输入,选择,…) 每行存在8个选择,这些选择使用Select2小部件()和jQuery日期选择器初始化 我已经实现了这些KnockoutJS性能提示,我在不同的网站上找到了这些提示: observable数组是使用完整的数据集(
- 数据集(observableArray)显示在html表格中
- 同时显示50行
- 行模型中的每个字段都是可观察的,因为数据是内联可编辑的(输入,选择,…)
- 每行存在8个选择,这些选择使用Select2小部件()和jQuery日期选择器初始化
- observable数组是使用完整的数据集(observable的调用)发布的,而不是使用多个push()调用
- 正如在多个站点上建议的那样,我将模板绑定与foreach选项结合使用,而不是将两者分开作为单独的绑定
- Datepicker和Select2被实现为自定义敲除绑定处理程序
- 使用table元素作为第二个参数直接调用ko.applyBindings,这样就不会将整个DOM绑定到knockout
- 有人经历过类似的情况吗?是如何处理的
- 有没有更好的方法来使用knockout初始化第三方小部件
- 有没有其他方法(使用KnockoutJS)来解决这个问题
observableArray
,首先,observableArray
只包含可观察对象
我不满意旧版本IE中的速度(IE8/9,与IE11/最新Chrome配合正常),于是决定删除observableArray中的所有可见项
这并不符合淘汰赛的精神,我也不为这个解决方案感到骄傲,但它确实工作得更快
Handsontable允许您处理一些事件,在这些事件中,我会像常规数组一样更新observatarray
,然后运行valueHasMutated
函数来通知数组的更改
同样,我的自定义绑定处理程序监视整个observableArray
的更改,并根据需要更新表
我认为您的解决方案的另一个不同之处是,Handsontable仅在需要时才转换为编辑模式,因此插件(如datepicker)仅在需要时加载
有没有更好的方法来使用knockout初始化第三方小部件?
可能只有在选中行/单元格时才能进入编辑模式。然后,您可以使用if
绑定到init,然后才显示您的小部件。您的插件(select2和datepicker)在任何时候都是必需的吗?或者,您可以进入“编辑模式”并仅在此时初始化它们吗?