我目前正在尝试优化使用KnockoutJS进行视图绑定和渲染的应用程序。在以下情况中,我们发现了一个巨大的瓶颈,数据集大小不断增长:
我已经实现了这些KnockoutJS性能提示,我在不同的网站上找到了它们:
但我认为主要的瓶颈似乎是其他小部件的初始化。我测量了Select2小部件的创建,大约需要15ms。当然,这会快速累积50行和8列。因此,对可观察数组进行单次调用以加载完整数据集最多需要10秒!在此期间,浏览器处于高负荷状态并且没有响应,这是一种不可行的可用性。
这引出了我的问题:
答案 0 :(得分:0)
我的页面上有一个交互式表格,我使用 HandsOnTable plugin 显示。该表包含 15列,我需要显示 250行。
我将其绑定到observableArray
,首先,observableArray
仅包含可观察数据。
我对旧版本的IE的速度感到不满意我需要维护(IE8 / 9,IE11 /最近的Chrome工作正常),并且决定删除{内部的所有observables {1}} 强>
这并不是真正的淘汰精神,我对这个解决方案并不感到自豪,但它的确运作得更快。
Handsontable允许您处理一些事件,我在其中更新observableArray
就像常规数组一样,然后运行observableArray
函数来通知数组的更改。
同样,我的自定义绑定处理程序监视整个valueHasMutated
的更改并根据需要更新表。
我认为你的解决方案的另一个不同之处是Handsontable仅在需要时才会进入编辑模式,因此插件(如datepicker)只会加载。
也许只有在选择了行/单元格时才能进入编辑模式。然后,您可以使用observableArray
绑定到init并仅显示您的小部件。