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' },
});
4

1 回答 1

2

register选项 1 和 2之间会有任何明显的性能差异吗?不。仅使用您提供的代码,这两个选项几乎是等效的,除了一个运算符实例.可以忽略不计。

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

除了对问题的非常直接的回答:性能取决于上下文。如果您怀疑哪个选项更快:赛马

于 2016-06-02T05:25:28.983 回答