2013-07-05 5 views
1

У меня есть приложение, которое подписывается на 4 коллекции (коллекции очень маленькие от 1 до 20 записей каждый). Но количество времени, затрачиваемого на загрузку этих коллекций, огромно. Один из них - всего 13 записей, и загрузка шаблона занимает несколько секунд. Это нормально? (Я до сих пор тестирование на метеорных серверах)Метеорная сборка слишком медленная

это образец кода:

Meteor.subscribe('trackedUser', function() { 
    console.log('finished fetching trackedUser'); 
    Template.users.rendered = function() { 
    /*handlign of the template*/ 


    console.log('users template rendered'); 
    } 

    }); 

    /*observe geolocation after it is all fetched*/ 
    Meteor.subscribe('geolocation', function() { 
    console.log('finished fetching location'); 
    /* Obseve the Collection geolocation and trigger event when item inserted or removed */ 
    query = Geolocation.find({}); 
    query.observeChanges({ 
     added: function(id) { 
     addMarkerToMap(id); 
     window.map.fitBounds(group.getBounds()); 
     return; 
     } 
    }); 
    }); 
}); 

И это мой шаблон

<template name="users"> 
<ul id="item-list"> 
    {{#each trackedUser}} 
    <li id="{{_id}}"> 
     <input type="checkbox" checked /> 
     <span><select name="colorpicker"> 
       {{#each color}} 
        <option value="{{mColorCode}}" {{selected ../mColor mColorCode}}>{{mColorName}}</option> 
       {{/each}} 
       </select> 
     </span> 
     <img width="40" src="data:image/png;base64,{{mImage}}" /> 
     <span class="name">{{mUsername}}</span> 
     <p><span class="description">{{mDescription}}</span></p> 
    </li> 
    {{/each}} 
</ul> 
</template> 

Благодаря

+0

У вас есть приложение, развернутое на meteor.com? Не могли бы вы поделиться URL? –

+1

В моем опыте 'subdomain.meteor.com' просто медленно.У них, вероятно, есть 1 серверный хостинг, например, 500 демонстрационных сайтов. Это так же медленно, когда вы тестируете локально? –

ответ

0

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

Вы можете использовать инструменты разработчика Chrome для диагностики проблемы.

  1. Открыть инструмент и убедитесь, что он профилирование сетевого трафика
  2. Загрузите ваш сайт
  3. Проверьте сетевой трафик. Потребовалось много времени, чтобы данные дошли до вашего браузера?

Если данные занимает много времени, чтобы закончить приходить в ваш браузер, то вы можете погрузиться глубже в WebSocket движения:

  1. Фильтр для WebSocket трафика (в нижней части вкладки сети)
  2. Выберите запрос websocket для просмотра фреймов
  3. Изучите информацию в кадрах. Много ли?

Вы можете найти (как я), что вы передаете большое количество информации в браузер, который не нужен для визуализации шаблонов.

В этом случае убедитесь, что вы отключили autopublish, а затем опубликовали только нужные данные, используя field specifier.

1

Я смог решить эту проблему, добавив условие к определению содержимого шаблона, которое является ложным при загрузке страницы, то есть выполняет начальную синхронизацию и только активирует этот контент при его загрузке.

До (10с загрузки страницы 300 записей публикуется на сервере):

Template.itemlist.items = function() { 
    return Item.find({type: 'car'}, 
        {sort: {start: -1}, 
         limit: 30}); 
}; 

К (2s загрузки страницы для 3000 записей, опубликованных на сервере):

Template.itemlist.items = function() { 
    if (Session.get("active")) {  
     return Item.find({type: 'car'}, 
         {sort: {start: -1}, 
          limit: 30}); 
    } else { 
     return []; 
    } 
}; 

Чтобы «активировать «сеанс только после загрузки данных, я добавил:

Deps.autorun(function() { 
    Meteor.subscribe("Item", 
        { 
         onReady: function() { 
          Session.set("active", true); 
         } 
        }); 
});