Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript KnockoutJS:我应该如何处理繁重的小部件初始化代码?_Javascript_Jquery Ui_Knockout.js_Widget_Jquery Select2 - Fatal编程技术网

Javascript 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数组是使用完整的数据集(

我目前正在尝试优化使用KnockoutJS进行视图绑定和渲染的应用程序。在以下场景中,我们发现了一个数据集规模不断增长的巨大瓶颈:

  • 数据集(observableArray)显示在html表格中
  • 同时显示50行
  • 行模型中的每个字段都是可观察的,因为数据是内联可编辑的(输入,选择,…)
  • 每行存在8个选择,这些选择使用Select2小部件()和jQuery日期选择器初始化
我已经实现了这些KnockoutJS性能提示,我在不同的网站上找到了这些提示:

  • observable数组是使用完整的数据集(observable的调用)发布的,而不是使用多个push()调用
  • 正如在多个站点上建议的那样,我将模板绑定与foreach选项结合使用,而不是将两者分开作为单独的绑定
  • Datepicker和Select2被实现为自定义敲除绑定处理程序
  • 使用table元素作为第二个参数直接调用ko.applyBindings,这样就不会将整个DOM绑定到knockout
但在我看来,主要的瓶颈似乎是其他小部件的初始化。我测量了Select2小部件的创建过程,大约需要15毫秒。当然,50行8列的计算速度很快。因此,对observable数组进行一次调用以加载完整的数据集最多需要10秒!在这段时间内,浏览器的负载很重,没有响应,这是一个不可行的可用性方面的问题

这引出了我的问题:

  • 有人经历过类似的情况吗?是如何处理的
  • 有没有更好的方法来使用knockout初始化第三方小部件
  • 有没有其他方法(使用KnockoutJS)来解决这个问题
是否有人经历过类似的情况,以及如何处理? 我的页面上有一个交互式表格,我使用显示该表格。这个表大约有15列,我需要显示多达250行

我将它绑定到一个
observableArray
,首先,
observableArray
只包含可观察对象

我不满意旧版本IE中的速度(IE8/9,与IE11/最新Chrome配合正常),于是决定删除
observableArray中的所有可见项

这并不符合淘汰赛的精神,我也不为这个解决方案感到骄傲,但它确实工作得更快

Handsontable允许您处理一些事件,在这些事件中,我会像常规数组一样更新
observatarray
,然后运行
valueHasMutated
函数来通知数组的更改

同样,我的自定义绑定处理程序监视整个
observableArray
的更改,并根据需要更新表

我认为您的解决方案的另一个不同之处是,Handsontable仅在需要时才转换为编辑模式,因此插件(如datepicker)仅在需要时加载

有没有更好的方法来使用knockout初始化第三方小部件? 可能只有在选中行/单元格时才能进入编辑模式。然后,您可以使用
if
绑定到init,然后才显示您的小部件。

您的插件(select2和datepicker)在任何时候都是必需的吗?或者,您可以进入“编辑模式”并仅在此时初始化它们吗?