Performance 敲除applyBindings中的第二个参数。性能影响

Performance 敲除applyBindings中的第二个参数。性能影响,performance,knockout.js,Performance,Knockout.js,阅读了有关的文档后,我了解了其背后的原因: 或者,您可以传递第二个参数来定义 要搜索数据绑定属性的文档。例如 ko.applyBindings(myViewModel, document.getElementById('someElementId'))。这限制了 激活ID为someElementId的元素及其子元素, 如果希望有多个视图模型并关联,则此选项非常有用 每个页面都有一个不同的区域 但我没有看到任何关于性能的东西。我的想法是(没有任何依据),如果不是将绑定限制在整个文档中,而是限制在文

阅读了有关的文档后,我了解了其背后的原因:

或者,您可以传递第二个参数来定义 要搜索数据绑定属性的文档。例如 ko.applyBindings(myViewModel, document.getElementById('someElementId'))。这限制了 激活ID为someElementId的元素及其子元素, 如果希望有多个视图模型并关联,则此选项非常有用 每个页面都有一个不同的区域

但我没有看到任何关于性能的东西。我的想法是(没有任何依据),如果不是将绑定限制在整个文档中,而是限制在文档的一小部分中,那么ko绑定的工作速度会更快,这是有道理的


因此,使用
ko.applyBindings(myViewModel,$(“#someElementId')[0])
而不使用多个视图模型仅仅是为了性能,这有意义吗。(我听说了Knuth先生,所以最好不要引用优化)。

applyBindings是ApplyBindingsToNodeandGenderantsInTernal(这是所有神奇的地方)的薄包装,如果你不提供节点,它会使用window.document.body

调用applyBindings(viewModel)和applyBindings(viewMode,rootNode)之间没有区别,除非您有一个非常大的DOM并且只想绑定一小部分。在这种情况下,使用第二个参数,在初始设置时,要扫描的敲除将少很多

一旦绑定就位,它们就在本地对可观察到的更改做出反应,而不像AngularJS这样的框架可能扫描整个DOM以查找更改。此时根节点不相关

ko.applyBindings = function (viewModel, rootNode) {
    if (rootNode && (rootNode.nodeType !== 1) && (rootNode.nodeType !== 8))
        throw new Error("ko.applyBindings: first parameter should be your view model; second parameter should be a DOM node");
    rootNode = rootNode || window.document.body; // Make "rootNode" parameter optional

    applyBindingsToNodeAndDescendantsInternal(viewModel, rootNode, true);
};

您所说的“绑定将工作得更快”是什么意思?应用绑定是一次性操作;如果需要花费大量时间,您可能需要处理(非常)大量的静态内容,这些内容最好使用模板动态生成。@ebohlman我不是说绑定会更快。我的意思是,若绑定可观察数组,更新元素或添加/删除元素可能会更快。由于ko必须找到要更新的内容并更新该元素,这正是我所需要的。我想知道它是否会扫描DOM中对可观察对象的每一个更改或否。我无法正确地表达我的问题,但在你的回答中,我看到了我想要的东西。