MongoDB 上的 Meteor 反应有多深或多少级
How deep or how many levels is Meteor reactivity on the MongoDB
流星反应性是否适用于深层或嵌入式文档。想知道我应该如何构建我的数据库是否有限制,还有他们需要考虑的任何流星反应性能。
我知道这很好
{
_id: "joe",
name: "Joe Bookreader"
}
但是这个呢
{
_id: "joe",
name: "Joe Bookreader",
addresses: {
{
street: "123 Fake Street",
city: "Faketon",
state: "MA",
zip: "12345"
}
}
}
或者这个
{
_id: "joe",
name: "Joe Bookreader",
addresses: {
{
street: "123 Fake Street",
city: "Faketon",
settings:
{
false: true,
power: false
}
state: "MA",
zip: "12345"
}
}
}
就一个,顶层而已。 Meteor 通过一种称为合并框的机制通过 DDP 将数据集更改传达给客户端。这是由 livedata 管理的,它本身现在是 DDP 包的一部分。
Meteor 通过区分初始值和新值来寻找文档顶级字段的更改,然后将差异值发送到客户端,以便它应用到当前状态并通过 Tracker 更新所有相关对象和方法方法。
因此,对于您的示例,'address.city'
从 'MA'
更改为 'NY'
或 'address.settings.false'
从 true
更改为 false
将使整个文档并导致计算重新运行。
不过,Blaze 是一项非常智能的 dom 技术。尽管它对使用这些更改文档的模板的计算需要重新运行,但通常情况下,它可以检测更改是否实际上 dom 相关,并采取相应的行动。不过,这不是 100% 的保证。
作为参考,您可以在 meteorhacks and you should also see for yourself how the document diffing works on the source of livedata server 阅读 merge-box 的很好的总结,尤其是 diffDocument
方法和相关方法。
流星反应性是否适用于深层或嵌入式文档。想知道我应该如何构建我的数据库是否有限制,还有他们需要考虑的任何流星反应性能。
我知道这很好
{
_id: "joe",
name: "Joe Bookreader"
}
但是这个呢
{
_id: "joe",
name: "Joe Bookreader",
addresses: {
{
street: "123 Fake Street",
city: "Faketon",
state: "MA",
zip: "12345"
}
}
}
或者这个
{
_id: "joe",
name: "Joe Bookreader",
addresses: {
{
street: "123 Fake Street",
city: "Faketon",
settings:
{
false: true,
power: false
}
state: "MA",
zip: "12345"
}
}
}
就一个,顶层而已。 Meteor 通过一种称为合并框的机制通过 DDP 将数据集更改传达给客户端。这是由 livedata 管理的,它本身现在是 DDP 包的一部分。
Meteor 通过区分初始值和新值来寻找文档顶级字段的更改,然后将差异值发送到客户端,以便它应用到当前状态并通过 Tracker 更新所有相关对象和方法方法。
因此,对于您的示例,'address.city'
从 'MA'
更改为 'NY'
或 'address.settings.false'
从 true
更改为 false
将使整个文档并导致计算重新运行。
不过,Blaze 是一项非常智能的 dom 技术。尽管它对使用这些更改文档的模板的计算需要重新运行,但通常情况下,它可以检测更改是否实际上 dom 相关,并采取相应的行动。不过,这不是 100% 的保证。
作为参考,您可以在 meteorhacks and you should also see for yourself how the document diffing works on the source of livedata server 阅读 merge-box 的很好的总结,尤其是 diffDocument
方法和相关方法。