Подтвердить что ты не робот

Применять использование метеора или найти в шаблонных вспомогательных функциях?

Внутри вспомогательной функции шаблона meteor есть ли разница в производительности, количестве повторных рендерингов или чем-либо еще, если я возвращаю результат find vs a fetch?

Например, подход find:

Template.players.topScorers = function () {
  return Users.find({score: {$gt: 100}}, {sort: {score: -1}});
};

Или добавив выборку:

Template.players.topScorers = function () {
  return Users.find({score: {$gt: 100}}, {sort: {score: -1}}).fetch();
};

Подход, основанный на поиске, - это то, что сейчас находится в docs, но я видел много других людей, использующих fetch.

4b9b3361

Ответ 1

Да, есть.

Используя выборку, вы регистрируете зависимость от всего набора результатов запроса на месте. Используя find, а затем итерацию с использованием {{#each}}, зависимость регистрируется на каждом документе отдельно. Поэтому, когда один документ изменяется, повторно обрабатывается только соответствующий код. При использовании fetch изменение любого документа в результирующем наборе будет повторно отображать всю область, в которой вы использовали fetch.

Для небольших результирующих наборов это не имеет никакого значения. Для больших наборов с частыми изменениями он может замедлить вычисления и вызвать нежелательные визуальные артефакты.

Я написал сообщение , которое может помочь вам понять его (он не отвечает на ваш вопрос напрямую, хотя)

Ответ 2

Это то, что мы следуем в Oodles Technologies.

Для определения помощника просто перейдите в файл js вашего шаблона, например, если у вас есть имя шаблона как allInventory, поэтому просто зайдите в файл allInventory.js и напишите помощника следующим образом: -

Template.allInventory.helpers({

})

создайте функцию внутри этого помощника, в которой вы поместите свою логику для получения данных из базы данных или сеанса или из другой службы, а не используете это в html, например: -

    Template.allInventory.helpers({
        productDetails: function() {
              return Session.get('dbData');
        }
    })

On html side you just need to use the function name as follows:-

{{#each productInfo in productDetails}}

        <div class="imgb"><img src="{{productInfo.image_url}}"></div>
           {{productInfo.item_name}}
           {{productInfo.seller_sku}}
            {{productInfo.quantity}}
            {{productInfo.price}}

<a type="button" class="full-view text-success"><i id="fullView" data="{{productInfo._id}}" class="fa fa-eye"></i></a>

          {{/each}} 

Как вы можете видеть в приведенном выше продуктеDetails, имя функции в вашем вспомогательном классе, на котором вы получаете данные, которые хотите визуализировать на вашем Html, доступно непосредственно через это имя, и вы можете пройти через каждый цикл в html-шаблонах.