#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.
-
Вы можете отслеживать обновления minimongo на стороне клиента и передачу сообщений sockjs с помощью пакетов minimongo и livedata meteor core.
-
Meteor не позволяет изменять файлы в основных пакетах. Итак, скопируйте и вставьте эти две папки пакетов из meteor core в папку пакетов вашего проекта.
-
Теперь основные пакеты будут заменены вашими локальными пакетами. Вы можете добавить консоль.вход в функции получил большое время выполнения.
-
Согласно моим выводам, в следующих файлах запускаются высокие кучи. и я зарегистрировал точки в соответствии с кодом в ячейке вставки.
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 работает над созданием инструмента мониторинга на стороне клиента. Надеюсь, тогда проблемы будут решены.