2014-11-13 2 views
0

Я смотрел на какой-то метеоритный код, и я увидел это:Метеор оптимизация шаблон

Template.notifications.helpers({ 
    notifications: function() { 
    return Notifications.find({userId: Meteor.userId(), read: false}); 
    }, 
    notificationCount: function(){ 
    return Notifications.find({userId: Meteor.userId(), read: false}).count(); 
    } 
}); 

Так мне было интересно, действительно ли это оптимизировать? Я имею в виду, будет ли база данных mongo выполнять два запроса? Серверная часть? клиентская часть? (mini mongo then)

Возможно ли использовать предыдущий результат во второй функции? Я пробовал с

notificationCount = function(){ 
    this.notifications.length; 
.... 

Но это не сработает, но может быть, метеорит помнит предыдущий результат и использует его? Я, определенно, в своем шаблоне вернул something.find(), чтобы иметь курсор, а затем возвращать другую переменную, например: count или фильтровать ее с полями или другими материалами, поэтому я перехожу к этому вопросу.

Любой эксперт, чтобы объяснить мне? Спасибо большое сообщество метеоров :)!

+0

Из документации Монго: [Count] (http://docs.mongodb.org/manual/reference/method/cursor.count/#cursor.count) не выполняет запрос, а вместо этого подсчитывает результаты, которые будут возвращены запросом. – solarc

ответ

1

Вы не выполняете 2 запросов на сервере, что в конечном итоге становится самым критическим местом. Когда вы подписываетесь на данные, данные поступают в локальную базу данных в браузере под названием MiniMongo. Вы можете запускать столько запросов, сколько хотите на клиенте, набор данных (как правило, и давайте надеяться) невелик, и нет заметного снижения производительности.

Если у вас есть проблемы с производительностью, вы можете сохранить результаты Notifications.find({userId: Meteor.userId(), read: false}) в сеанс или в другой реактивный словарь. Это немного улучшит производительность, так как вы сохраните время запроса Minimongo: разбор, поиск и т. Д.

На сервере вы должны быть как можно более осторожны. Узкое место на сервере может означать, что все ваше приложение не будет таким быстрым, как вам нужно.

Подробнее о мини баз данных в памяти: https://www.meteor.com/mini-databases

1
  1. Да. на стороне клиента, а не на стороне сервера.
  2. вы можете использовать {{notifications.count}} в шаблоне.
Смежные вопросы