Как избежать раздувания памяти в рельсах при создании большого количества объектов? - PullRequest
0 голосов
/ 17 октября 2018

У меня есть приложение Ruby on Rails, которое загружает тысячи маркеров карты и отображает их на карте с помощью API Карт Google.Все маркеры необходимы в представлении, поэтому они должны быть загружены контроллером и отображены.

Соответственно, я выделяю большие объемы памяти каждый раз, когда пользователь загружает свою карту, и, таким образом, довольно часто сталкиваюсь с ошибками «R14 - Memory Quota Exced In Ruby (MRI)» в Heroku, когда я перехожу за 500 МБограничение памяти.

Я оптимизировал свой код с помощью менее интенсивных запросов, таких как:

@user.markers.select(:coordinates) 

вместо:

@user.markers

Пока я недо сих пор создается много памяти из-за необработанного количества загружаемых объектов (иногда свыше 2000-3000 на карте на пользователя). Когда несколько пользователей делают похожие запросы, я быстро наращиваю более 500 МБ памяти.

Означает ли это, что мне просто нужно выделить больше памяти для моего экземпляра Heroku, или есть какие-то другие способы сокращения использования памяти в такой ситуации?

1 Ответ

0 голосов
/ 17 октября 2018

Вы должны попробовать pluck вместо select, который не даст вам объекты, только поля в массиве.Это должно помочь вашей ситуации с памятью. Проверьте документы для получения дополнительной информации .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...