Как профилировать производительность meteorjs

#javascript #meteor #profiling

#javascript #метеор #профилирование

Вопрос:

У меня есть meteor.js приложение, предлагающее комнаты для чатов. Внезапно, при переключении комнат, чат загружается (50 сообщений) чрезвычайно медленно. Для 50 сообщений требуется несколько секунд, я вижу, как они появляются одно за другим. Это на моем локальном компьютере, с базой данных разработчика с очень небольшим количеством записей.

Теперь проблема гораздо менее заметна в Chrome, поэтому я подозреваю, что это проблема на стороне клиента. Однако я не знаю, с чего начать отладку этого. Мой шаблон заполняется много раз, каждый раз на несколько сообщений больше, чем в прошлый раз.

Использование профилировщика Safari показывает мне, что _.forEach с глубоким деревом вызовов функций minimongo потребляет 32% от общего времени процессора, при этом (idle) потребляет 35%, а (program) — 16%.

Я также изучаю Kadira. Похоже, это должно мне помочь, но единственное, что я могу показать, это то, что «rooms» — самая медленная подписка с 12 мс. Сообщения не хранятся в комнатах, они представляют собой отдельную коллекцию, каждое сообщение содержит идентификатор комнаты.

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

Ответ №1:

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

  1. Вы можете отслеживать обновления minimongo на стороне клиента и передачу сообщений sockjs с помощью пакетов minimongo и livedata meteor core.

  2. Meteor не позволяет изменять файлы в основных пакетах. Итак, скопируйте и вставьте эти две папки пакетов из meteor core в папку пакетов вашего проекта.

  3. Теперь основные пакеты будут заменены вашими локальными пакетами. Вы можете добавить консоль.вход в функции получил большое время выполнения.

  4. Согласно моим выводам, в следующих файлах запускаются высокие кучи. и я зарегистрировал точки в соответствии с кодом в ячейке вставки.

      i. packages/livedata/livedata_connection.js : http://pastebin.com/zSxim0ij
     ii. packages/minimongo/minimongo.js : http://pastebin.com/FaP0Sfqs
     iii packages/livedata/sockjs-0.3.4.js : http://pastebin.com/kiWn0Ybx
      

вы можете просто заменить файлы содержимым pastebin, если используете ту же версию meteor.

Для отслеживания транзакции ddp msg от клиента к внешней стороне вы можете использовать этот хороший инструмент. https://github.com/arunoda/meteor-ddp-analyzer

Я предполагаю, что kadira работает над созданием инструмента мониторинга на стороне клиента. Надеюсь, тогда проблемы будут решены.