我正在阅读tracker manual并且很难理解某些内容。
我理解dependency.changed()
将使相关性中的所有计算无效,导致跟踪器重新运行。
但是为什么Meteor在失效时会从依赖项中删除计算?
例如,这是手册中的Tracker示例:
Dependency.prototype.depend = function () {
var self = this;
if (Tracker.currentComputation) {
var id = self._nextId++;
self._dependents[id] = Tracker.currentComputation;
Tracker.currentComputation.onInvalidate(function () { # Here
delete self._dependents[id]; # Here
}); # Here
}
};
Dependency.prototype.changed = function () {
for (var id in this._dependents) {
this._dependents[id].invalidate();
}
};
为什么我们要添加Tracker.currentComputation.onInvalidate()
回调来从依赖项中删除计算?对我来说似乎没必要。
我想完全理解这一点。有什么想法吗?
答案 0 :(得分:0)
请考虑一下这个Tracker.autorun功能:
Tracker.autorun(()=>{
if(dependency1.get()>10){
console.log(dependency2.get());
}
});
非常简单,只要dependency2
高于10,它就会记录每次dependency1
更改。现在,如果计算中dependency1
低于11,它将会只依靠它。如果计算在dependency1
大于10时运行,则它将取决于两个依赖项。
如果您不删除依赖项并且dependency1
等于或低于10,则每次dependency2
更改时,跟踪器仍会运行,但不会发生任何事情。这可能成为大型自动驾驶仪的真正性能问题。