Итак, я разрабатываю приложение для рельсов, и я работаю над разбиением на страницы. Пока я это делал, я задавался вопросом, правильно ли я делаю это, потому что время загрузки было более 1500 мс. Мой код был:Pagination Best Practices Ruby
stories = Story.feed
@stories = Kaminari.paginate_array(stories).page(params[:page]).per(params[:pageSize])
У меня есть несколько вопросов по этому поводу:
- Должен ли я быть Разбиение
Story.feed
, или есть какой-то метод который возвращает только некоторые истории, мне нужно? - Является ли это время загрузки нормальным?
- Какие другие вещи я могу делать, чтобы оптимизировать этот
(Кроме того, Story.feed возвращает массив объектов сюжетных Код, который находится здесь:.
def self.feed
rawStories = Story.includes([:likes, :viewers, :user, :storyblocks]).all
newFeaturedStories = rawStories.where(:featured => true).where(:updated_at.gte => (Date.today - 3)).desc(:created_at).entries
normalStories = rawStories.not_in(:featured => true, :or => [:updated_at.gte => (Date.today - 3)]).desc(:created_at).entries
newFeaturedStories.entries.concat(normalStories.entries)
end
Я использую Mongoid и MongoDB
Это возвращает только избранные истории за последние 3 дня. Мне нужна функциональность, чтобы рассказы о лучших статьях были отличными от истории, независимо от даты, а затем ниже, чем остальные истории, отсортированные по дате created_at. –
Как я уже сказал, это упрощенная версия. Дело в том, чтобы использовать 'per(). Page()' вместо 'concat' и' paginate_array' (выборку каждой соответствующей записи). Вы должны быть тем, кто переписывает весь составный запрос как область (я просто предполагаю, что это возможно, я могу ошибаться). –