Применять использование метеора или найти в шаблонных вспомогательных функциях?
Внутри вспомогательной функции шаблона 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
.
Ответы
Ответ 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-шаблонах.