了解 Meteor 中服务器与客户端的跳过
Understanding skip on server vs client in Meteor
我只是想检查一下,因为我没有在文档中看到它。也许我只是想念它。
据我所知,如果我订阅了 skip,那么我就不会在客户端上跳过。正确吗?
我正在使用铁路由器。我有这样的代码
Router.route('/docs/:_page', {
template: 'doclist',
subscriptions: function() {
var page = parseInt(this.params._page) - 1;
var skip = page * 10;
var limit = 10;
return Meteor.subscribe("pages", skip, limit);
},
});
对应的发布是这个
Meteor.publish("pages", function (skip, limit) {
return Docs.find({}, {skip: skip, limit: limit});
});
但现在在模板助手中我不使用 skip AFAICT,因为 MiniMongo
中只有 limit
结果
Template.doclist.helpers({
docs: function () {
var route = Router.current();
var pageId = parseInt(route.params._page) || 1;
var page = pageId - 1;
var skip = page * 10;
return Docs.find({}, {
// skip: skip
limit: limit,
});
},
});
似乎有效。如果我在 skip
行中发表评论,那么我在第 2 页上没有结果。
这是正确的还是我做错了什么?
您是对的 - 在这种情况下,客户端不需要 skip
。假设您在数据库中有 100 个文档,您跳过前 20 个文档,限制为 10 个。那么客户端上将只存在 10 个文档。每当您 find
在客户端(在您的模板中)时,您正在查询本地数据库(在本例中为 10 个文档),因此跳过是不合适的。
我要提醒您,所有这些都是基于您 只有一个 订阅 Docs
的概念。要扩展上面的示例,如果您在客户端的同一集合中有另外 15 个文档来自另一个订阅,那么您可能需要进行一些额外的过滤以仅显示您感兴趣的文档。
我只是想检查一下,因为我没有在文档中看到它。也许我只是想念它。
据我所知,如果我订阅了 skip,那么我就不会在客户端上跳过。正确吗?
我正在使用铁路由器。我有这样的代码
Router.route('/docs/:_page', {
template: 'doclist',
subscriptions: function() {
var page = parseInt(this.params._page) - 1;
var skip = page * 10;
var limit = 10;
return Meteor.subscribe("pages", skip, limit);
},
});
对应的发布是这个
Meteor.publish("pages", function (skip, limit) {
return Docs.find({}, {skip: skip, limit: limit});
});
但现在在模板助手中我不使用 skip AFAICT,因为 MiniMongo
中只有limit
结果
Template.doclist.helpers({
docs: function () {
var route = Router.current();
var pageId = parseInt(route.params._page) || 1;
var page = pageId - 1;
var skip = page * 10;
return Docs.find({}, {
// skip: skip
limit: limit,
});
},
});
似乎有效。如果我在 skip
行中发表评论,那么我在第 2 页上没有结果。
这是正确的还是我做错了什么?
您是对的 - 在这种情况下,客户端不需要 skip
。假设您在数据库中有 100 个文档,您跳过前 20 个文档,限制为 10 个。那么客户端上将只存在 10 个文档。每当您 find
在客户端(在您的模板中)时,您正在查询本地数据库(在本例中为 10 个文档),因此跳过是不合适的。
我要提醒您,所有这些都是基于您 只有一个 订阅 Docs
的概念。要扩展上面的示例,如果您在客户端的同一集合中有另外 15 个文档来自另一个订阅,那么您可能需要进行一些额外的过滤以仅显示您感兴趣的文档。