规范方法使用Meteor的JQueryUI自动完成

Oli*_*oyd 5 javascript jquery-ui-autocomplete meteor

使用Meteor,我想了解使用大量服务器端数据的JQuery UI自动完成的最有效方法.

我有两个工作建议,希望听到有关差异的意见,以及是否有更好的方法来做同样的事情.

使用pub/sub:

// Server
Meteor.publish("autocompleteData", function (theSearchTerm) {
  var query = {
    name: { $regex: theSearchTerm, $options: 'i'}
  };

  return MyData.find(query, options);
});

// Client
Template.myTemplate.rendered = function() {
  initAutocomplete($(this.find('.my.autocomplete')));
};

var initAutocomplete = function(element){
  element.customAutocomplete({
    source: function(request, callback){
      var sub = Meteor.subscribe('autocompleteData', request.term, function(){
        var results = MyData.find({}, {limit: 50}).fetch();
        sub.stop();
        callback(results);
      });
    },
    select: function(event, ui){
      // Do stuff with selected value
    }
  });
};
Run Code Online (Sandbox Code Playgroud)

使用远程功能(Meteor.Methods):

// Server
Meteor.methods({
  getData: function(theSearchTerm) {
    var query = {
      name: { $regex: theSearchTerm, $options: 'i'}
    };

    return MyData.find(query, {limit: 50}).fetch();
  });
});

// Client
Template.myTemplate.rendered = function() {
  initAutocomplete($(this.find('.my.autocomplete')));
};

var initAutocomplete = function(element){
  element.customAutocomplete({
    source: function(request, callback){
      Meteor.call('getData', request.term, function(err, results){
        callback(results);
      });
    },
    select: function(event, ui){
      // Do stuff with selected value
    }
  });
};
Run Code Online (Sandbox Code Playgroud)

哪个(如果有的话)是使用带有大型数据集的Meteor设置服务器端自动完成的最有效方法?

小智 5

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

对我来说,似乎这样的情况下pub/sub的潜在优势是数据被缓存.因此,当订阅相同的记录集时,查找将接近即时,因为客户端可以搜索本地缓存而不是再次询问服务器数据(发布足够聪明,不会将重复数据推送到客户端).

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

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

总的来说,我认为使用pub/sub而不是Meteor方法没有令人信服的优势,尽管我并不熟悉Meteor,足以在两者之间提供更具体的优势/劣势.我个人认为Meteor方法看起来更干净.

如果您正在尝试实现搜索功能,我个人喜欢easy-search软件包,它支持使用自动完成功能的此类服务器端搜索.无论如何,我希望你的问题得到解决!我很想知道答案.