将多个视图模型传递给组件 - 性能问题?

时间:2016-06-01 20:43:05

标签: javascript knockout.js knockout-3.2

使用knockout.js组件我想知道在将多个视图模型传递给组件而不是只传递一个组件时是否会影响性能。

拥有以下内容:

function masterViewModel(){
    this.demo = new demoViewModel().init();
    this.demo2 = new demo2ViewModel().init();
    this.demo3 = new demo3ViewModel().init();
    this.demo4 = new demo4ViewModel().init();
    this.demo5 = new demo5ViewModel().init();
    this.demo6 = new demo6ViewModel().init();
}

var mm = new masterViewModel();
ko.applyBindings(mm, $(':root').get(0));

我正在考虑将整个masterViewModel变量传递给我的组件,以便能够从中访问所有视图模型:

ko.components.register(element, {
    viewModel: { instance: mm },
    template: { require: 'text!views/myComponent.html' },
});

如果我这样做而不只是传递单个视图模型,性能是否会受到影响?

ko.components.register(element, {
    viewModel: { instance: mm.demo3 },
    template: { require: 'text!views/myComponent.html' },
});

1 个答案:

答案 0 :(得分:2)

register选项1和2之间是否会有明显的性能差异?不会。只有您提供的代码,除了.运算符的一个实例之外,这两个选项几乎相同。微不足道。

Knockout将 AFAIK遍历整个视图模型对象图以采取行动(例如订阅可观察的更改),它只保留对视图模型实例的引用。

除了对问题的直接回答:表现依赖于上下文。如果您怀疑哪个选项更快:race your horses