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

Passing multiple viewmodels to a component - performance issues?

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

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

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

除了对问题的非常直接的回答:性能取决于上下文。如果您不确定哪个选项更快:race your horses.