KnockoutJS:我应该如何处理繁重的小部件初始化代码
KnockoutJS: How should I deal with heavy widget initialization code?
我目前正在尝试优化使用KnockoutJS进行视图绑定和渲染的应用程序。在以下场景中,随着数据集大小的增长,我们发现了一个巨大的瓶颈:
- 数据集(observableArray)显示在html表格中。
- 同时显示50行
- 行模型中的每个字段都是可观察的,因为数据是内联可编辑的(input, select,…)
- 每行存在8个选择,使用Select2小部件(http://ivaynberg.github.io/select2)和jQuery日期拾取器初始化。
我已经实现了这些KnockoutJS性能提示,这是我在不同的网站上发现的:
- 可观察数组被完整的数据集(调用可观察对象)发布,而不是多次调用push()。
- 我将模板绑定与foreach选项结合使用,根据多个站点的建议,而不是将两者分开作为单独的绑定。
- Datepicker和Select2是作为自定义knockout绑定处理程序实现的。
- ko。applyBindings是直接用table-element作为第二个参数调用的,这样整个DOM就不会被knockout绑定。
但是在我看来,主要的瓶颈似乎是附加小部件的初始化。我测量了Select2小部件的创建过程,耗时约15ms。当然,50行8列的累积速度很快。因此,对可观察数组的一次调用来加载完整的数据集最多需要10秒!在此期间,浏览器处于高负载状态,变得无响应,这是一个不可用的可用性。
这就引出了我的问题:
- 是否有人经历过类似的情况,是如何处理的?
- 是否有更好的方法来初始化第三方窗口小部件?
- 是否有替代方法(使用KnockoutJS)来解决这个问题?
是否有人遇到过类似的情况,是如何处理的?
我的页面上有一个交互式表,我使用HandsOnTable插件来显示它。表有大约15列,我需要显示多达250行。
我将它绑定到observableArray
,并且,首先,observableArray
只包含可观察对象。
我对旧版本IE的速度不满意,我需要维护(IE8/9,与IE11/最近的Chrome一起工作),并且决定删除observableArray
内的所有可观察对象。
这不符合淘汰赛的精神,我也不为这个解决方案感到骄傲,但它确实工作得快得多。
Handsontable允许您处理一些事件,其中我像更新常规数组一样更新observableArray
,然后运行valueHasMutated
函数来通知数组的更改。
同样,我的自定义绑定处理程序监视整个observableArray
的变化,并根据需要更新表。
我认为你的解决方案的另一个不同之处在于Handsontable只在需要时才转换为编辑模式,因此插件(如datepicker)只在那时加载。
是否有更好的方法来初始化第三方窗口小部件?
也许只有当行/单元格被选中时才能进入编辑模式。然后,您可以使用if
绑定来初始化并仅在那时显示您的小部件。
- 最小化Javascript和HTML代码
- I'我试图在网页中添加一个javascript小片段,但它只是在页面上显示代码
- setInterval代码的优化建议,该代码显示每秒出生的小狗、小猫等数量
- 转换后的图像应该有一些小的 url 而不是基本代码
- 带有小Javascript代码的简单表单提交按钮 - 不起作用
- 如何阻止 PHP 页面中的 JavaScript 代码段在屏幕分辨率较小的设备上加载
- 滑动 DIV 代码 Javascript 的小问题
- 给朋友留下深刻印象的小代码是 int 工作
- 代码镜像 - 最小行数
- 在配置 JavaScript 对象文字构建的小部件时,如何避免代码重复
- js中数组的最小化代码
- 如何最小化jQuery中的代码
- java小程序内部的代码即使在签名时也会引发PrivilegedActionException
- 响应式JavaScript:仅针对较小的设备宽度执行代码
- 这个jquery代码中的一个小逻辑问题:;负载“;更多使用jquery的页面
- JavaScript等效于这个小PHP代码
- 可以'我在我的小JS代码中没有发现一个错误(用于循环和里面的一个函数)
- 允许javascript事件回调的小部件代码
- 是否有可能编译WebDriverJS没有最小化代码的谷歌闭包编译器
- 无法从 JavaScript 调用 JNLP 部署的小程序代码