Рендеринг большого количества объектов ActiveRecord в Rails - PullRequest
5 голосов
/ 03 апреля 2012

У меня есть несколько действий контроллера Rails, которые отвечают на запросы AJAX следующим образом:

books = Book.all
render :json => { :books => books }

Это должно быть относительно быстро, однако это занимает более 5 секунд, что слишком много для любого запроса в Интернете. Логи выглядят так:

Completed 200 OK in 5212ms (Views: 2679.7ms | ActiveRecord: 147.7ms)

Я не понимаю, как 2,6 секунды можно потратить в «представлениях», когда я не выполняю рендеринг в файл представления, или как в общей сложности можно потратить 5212 мс. Что занимает так много времени, и как можно ускорить процесс?

Редактировать: По этому конкретному запросу возвращено около 1000 книг, и я думаю, каждая из них содержит около 1 КБ данных. Изменить 2: Глядя на ответ в консоли, размер ответа составляет 973 КБ.

Ответы [ 3 ]

2 голосов
/ 29 ноября 2012

Вы пробовали oj для более быстрого поколения json?По словам его автора:

До сих пор достигнуто, что примерно в 2 раза быстрее, чем Yajl для разбора и в 3 или более раз быстрее, написание JSON.

Может быть, хорошийрешение?

1 голос
/ 19 мая 2012

См. Главу 1.3 Извлечение нескольких объектов в пакетах: http://goo.gl/UR5B.

Кроме того, вы можете захотеть загрузить записи.

0 голосов
/ 29 ноября 2012

После того, как вы предварительно загрузили все свои модели, используемые для визуализации представления, вы можете оптимизировать генерацию JSON.То, что у вас есть выше (render: json => {: books => books}), не очень быстрое.

Взгляните на этот вопрос: Какой самый быстрый способ рендеринга json в рельсах

И рассмотрите возможность переключения на другой способ рендеринга JSON.

...