Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 用Meteor使用JQueryUI自动完成的标准方法_Javascript_Meteor_Jquery Ui Autocomplete - Fatal编程技术网

Javascript 用Meteor使用JQueryUI自动完成的标准方法

Javascript 用Meteor使用JQueryUI自动完成的标准方法,javascript,meteor,jquery-ui-autocomplete,Javascript,Meteor,Jquery Ui Autocomplete,使用Meteor,我想了解使用jQueryUI的Autocomplete处理大量服务器端数据的最有效方法 我有两个工作建议,希望听取关于分歧的意见,以及是否有更好的方法来做同样的事情 使用发布/订阅: //服务器 Meteor.publish(“自动完成数据”,函数(搜索术语){ 变量查询={ 名称:{$regex:theSearchTerm$options:'i'} }; 返回MyData.find(查询、选项); }); //客户 Template.myTemplate.rendered=函

使用Meteor,我想了解使用jQueryUI的Autocomplete处理大量服务器端数据的最有效方法

我有两个工作建议,希望听取关于分歧的意见,以及是否有更好的方法来做同样的事情

使用发布/订阅:

//服务器
Meteor.publish(“自动完成数据”,函数(搜索术语){
变量查询={
名称:{$regex:theSearchTerm$options:'i'}
};
返回MyData.find(查询、选项);
});
//客户
Template.myTemplate.rendered=函数(){
initAutocomplete($(this.find('.my.autocomplete'));
};
var initAutocomplete=函数(元素){
element.customAutocomplete({
来源:函数(请求、回调){
var sub=Meteor.subscribe('autocompleteData',request.term,function()){
var results=MyData.find({},{limit:50}).fetch();
sub.stop();
回调(结果);
});
},
选择:功能(事件、用户界面){
//用选定的值做一些事情
}
});
};
使用远程功能(Meteor.Methods):

//服务器
流星法({
getData:函数(搜索项){
变量查询={
名称:{$regex:theSearchTerm$options:'i'}
};
返回MyData.find(查询,{limit:50}).fetch();
});
});
//客户
Template.myTemplate.rendered=函数(){
initAutocomplete($(this.find('.my.autocomplete'));
};
var initAutocomplete=函数(元素){
element.customAutocomplete({
来源:函数(请求、回调){
Meteor.call('getData',request.term,函数(err,results){
回调(结果);
});
},
选择:功能(事件、用户界面){
//用选定的值做一些事情
}
});
};

使用Meteor和大数据集设置服务器端自动完成的最有效方法是哪一种?

关于它的价值,我将提供一些关于这个主题的想法。作为免责声明,我只是一个流星爱好者而不是专家,所以如果我说了一些错误的话,请纠正我

在我看来,在这种情况下,pub/sub的一个潜在优势似乎是数据被缓存。因此,当订阅同一记录集时,查找几乎是即时的,因为客户端可以搜索本地缓存,而不是再次向服务器请求数据(发布足够智能,不会将重复的数据推送到客户端)

但是,由于您正在停止订阅,因此在这里失去了优势,因此每次用户键入相同的搜索词时,数据都会再次推送到客户端(至少,每个文档都会再次触发游标添加的事件)。在这种情况下,我希望酒吧/酒吧与Meteor.call几乎处于同等地位

如果要缓存pub/sub的数据,一种方法是取出sub.stop()。但是,除非你的用户倾向于搜索类似的词,否则缓存数据实际上更糟糕,因为用户键入的每封信都会在客户端上存储更多的数据,可能再也看不到这些数据了(除非搜索是你的应用程序中如此突出的功能,用户会从中受益?)

总的来说,我认为使用pub/sub比Meteor方法没有明显的优势,尽管我对Meteor还不够精通,无法提供两者之间更具体的优势/劣势。我个人认为流星方法看起来更干净


但是,如果您试图实现搜索功能,我个人喜欢这个包,它支持这种带有自动完成功能的服务器端搜索。无论如何,我希望你的问题得到解决!我也很想知道答案。

我目前还不是Meteor方面的专家(请参阅我在这里的许多帖子寻求帮助),但是,如果你在做pub/sub,并且有一个获取数据的方法,这似乎是错误的。不知道你为什么需要这两样东西是的,我知道。。。我还使用了纯发布/订阅功能,我将更新问题以使其更清晰。我想我真正应该问的是:在每个新的搜索事件上启动和停止一个新的sub是最有效的方法吗?同样,不是专家,但我认为停止订阅只是意味着你不再听取发布者的更改。有更多流星经验的人,如果我离基地太远,请大声说出来。如果我的说法是正确的,我认为性能的影响将是随着时间的推移不断更新(不取消订阅),而在需要订阅时,性能的影响可能会更大。我认为通过缩小出版物的范围可以缓解后者的影响,这似乎是你在做的。@CodeChimp我的感觉是,这里只有一种方法可以使用pub/sub,如前所述。如果我订阅的内容超出了ac搜索的范围,那么就没有“术语”,我就有可能获取所有的数据,糟糕。作为澄清,我已经将问题改写为Pub/Sub vs.Method Call。谢谢,有用的东西。关于停止sub,保留缓存确实非常有用,同样的搜索被反复使用,但是你知道我是否可以用动态术语反复调用Meteor.subscribe(),并且仍然从中受益吗?“我不想做的一件事是订阅所有数据,而不使用筛选条件”。@OliverLloyd是的,我也有同样的担心。你绝对不想在没有搜索词的情况下订阅,因为这样会不加区别地发送所有文档。很难说这会产生多大的影响(因为这在很大程度上取决于文档本身的内容),但您可能只有在输入了这么多字母后才能使用数据填充自动完成,因此缓存的数据量相对较小,但相关性更大(您说过会进行类似的搜索,因此搜索可能会共享相似的起始字母)。