Используя Meteor, я хотел бы узнать наиболее эффективный способ использования автозаполнения JQuery UI с большими объемами данных на стороне сервера.Канонический способ использования JQueryUI Autocomplete with Meteor
У меня есть два рабочих предложения и хотелось бы услышать мнения о различиях и если есть какие-то лучшие способы сделать то же самое.
Использование паб/суб:
// 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 с большим набором данных?
Я, безусловно, не эксперт в Meteor (см. Мои многочисленные сообщения здесь, просящие о помощи), но кажется неправильным, что вы делаете pub/sub и имеете метод getData. Не знаете, зачем вам обоим. – CodeChimp
@CodeChimp Да, я знаю ... У меня также есть работа с использованием чистого паба/суб - я обновлю вопрос, чтобы сделать его более понятным. Я предполагаю, что я действительно должен спрашивать: начинается и останавливает новый юзер на каждом новом событии поиска наиболее эффективный способ сделать это? –
Опять же, нет эксперта, но я думаю, что остановка подписки просто означает, что вы больше не слушаете изменения издателя. Кто-то, у кого больше опыта в Meteor, пожалуйста, сообщите, если я ухожу отсюда. Если я прав в своем заявлении, я думаю, что сбой производительности будет постоянным обновлением с течением времени (для не-подписки) VS. возможный больший удар при подписке при необходимости. Я думаю, что позже можно было бы смягчить сужение сферы действия вашей публикации, что, кажется, вы делаете. – CodeChimp