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

时间:2014-10-06 22:27:05

标签: javascript meteor jquery-ui-autocomplete

使用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
    }
  });
};

使用远程功能(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
    }
  });
};

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

1 个答案:

答案 0 :(得分:5)

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

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

然而,由于您停止订阅,因此失去了优势,因此每次用户键入相同的搜索词时,数据都会再次推送到客户端(至少,光标的添加事件)每个文件再次激发)。在这种情况下,我希望pub / sub与Meteor.call基本相同。

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

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

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