Javascript 订购大量藏品
我有一个收藏,最近变得非常大。我曾经订阅过它的所有文档,当时我正在使用myapp中的搜索字段对它进行搜索 对于这个更大的集合,加载需要花费大量时间 您有什么建议可以缩短加载时间,但仍然可以对整个集合进行增强搜索 我可以通过客户端订阅集合的一部分(执行搜索查询)吗 我现在所拥有的: 在我的路由器上:Javascript 订购大量藏品,javascript,meteor,publish-subscribe,Javascript,Meteor,Publish Subscribe,我有一个收藏,最近变得非常大。我曾经订阅过它的所有文档,当时我正在使用myapp中的搜索字段对它进行搜索 对于这个更大的集合,加载需要花费大量时间 您有什么建议可以缩短加载时间,但仍然可以对整个集合进行增强搜索 我可以通过客户端订阅集合的一部分(执行搜索查询)吗 我现在所拥有的: 在我的路由器上: waitOn: function(){ return [Meteor.subscribe('files')]; }, 在我的客户机上(单击搜索按钮时): 模板 Template.filwsLis
waitOn: function(){
return [Meteor.subscribe('files')];
},
在我的客户机上(单击搜索按钮时):
模板
Template.filwsList.helpers({
files_results: function () {
var keywords = new RegExp(Session.get("keywords"), "i");
var result = Files.find({$or:[{name:keywords},{description:keywords},{tags:keywords}]},{sort: {updatedAt: 1}});
return result;
}
})
解决方案是在服务器上定义一个以搜索关键字作为参数的
Meteor.publish('files', function publishFunction(keywords) {
check(keywords, String); // https://docs.meteor.com/#/full/check_package
return Files.find({
$or: [
{ name: keywords },
{ description: keywords },
{ tags: keywords }
]}, {
sort: ...
limit: ...
fields: ...
}
);
});
然后在客户端上,将关键字作为参数传递:
waitOn: function () {
return Meteor.subscribe('files', keywords);
}
还值得注意的是,可能已经有包在做您想要做的事情,例如,或
另请参见了解Meteor发布/订阅。您应该尽可能少地发布数据
仅发布(和订阅)搜索中使用的集合字段(请参见),并编写一个方法,按id返回整个文件对象,并在搜索后调用它(当显示文件内容或其他内容时)
另一种选择是,您可以只在服务器端进行搜索,而无需发布文件
集合,但对于安全性(和社区意识),搜索结果不会太“流星般”…,我建议在使用发布函数回答问题时始终包括输入检查。每次客户端订阅时都会调用发布函数。在本例中,发布发生在路由上,我猜这就是搜索表单所在的页面。当调用路由代码以及发布函数时,关键字对象仍然为空(用户尚未键入关键字)。。。然后搜索将使用罚款不足的$or param…我问了一个类似的问题,你可能会觉得有用。它列出了如何使用pub/sub或使用服务器方法搜索大型集合,并给出了两者的示例。
waitOn: function () {
return Meteor.subscribe('files', keywords);
}