【发布时间】:2014-02-14 00:19:37
【问题描述】:
我正在使用d3 在图像上绘制具有 x 和 y 坐标的流星集合(Hostiles)。我可以成功地做到这一点。但是,我有一个发布功能,可以检查用户登录是管理员还是普通用户。如果用户是管理员,它使用 d3 绘制所有点,但当它是任何其他用户时,它只绘制特定于用户位置的点。
//Base Publish on User Type
if (user === true) {
//Admin Return all Points
return Hostiles.find();
} else {
//Any other user returns location specific points
return Hostiles.find({latitude: {$lte: xLoc + 80, $gte: xLoc - 80}, longitude: {$lte: yLoc + 80, $gte: yLoc - 80}});
};
所有这些都可以正常工作。当我更改Hostile 位置的xLoc 和yLoc 时,就会出现问题。当管理员登录时,重绘与集合的更改是即时的。但是,当普通用户登录时,重绘会有延迟。这个 d3 重绘通常需要大约 3-10 秒。在客户端上,我的订阅和 d3 都绘制在 Meteor.autorun(function() { 中。也许没有办法解决这个问题?谢谢。
【问题讨论】:
-
我假设
xLoc和yLoc是从Session中检索到的?因为如果它们不是,那么autorun只会在其他一些反应性数据源发生变化时执行(或者如果光标中的数据发生变化,则每 10 秒执行一次,这可能就是您所看到的)。 -
阅读 Meteor 博客上的这篇文章:meteor.com/blog/2013/12/17/… - MongoDB 的 oplog 的当前实现仅支持针对标量字段的相等性检查。所有其他操作(例如您的 lte/gte 检查)仍使用旧的 10 秒轮询/差异方法。这将在 1.0 之前发生变化,因为 Meteor 团队在 oplog 实现中添加了更多操作符。
-
@musically_ut 它们是使用 Session 接收的。
-
@Cuberto 这很有意义,谢谢。所以在 1.0 之前我必须处理 10 秒 poll/diff 方法?
-
@alanning 啊,不知道。我想知道
oplog-with-operators和template-engine-preview-10.1是否有合并版本?
标签: javascript mongodb d3.js meteor