페이스 북 뉴스 피드와 마찬가지로 내 애플리케이션 용 활동 피드를 구현하고 있습니다. 사용자가 무언가 (게시물 작성, 게시물에 대한 주석 달기, 사진 앨범 만들기, 사진에 대한 주석 달기) 할 때마다 user_id, 카테고리 및 데이터가 들어있는 활동 표에 행이 작성됩니다. 데이터는 활동 유형별로 다른 직렬화 된 해시입니다 (게시물에는 게시물 제목 및 게시물 ID가 포함됨, 사진 설명에는 다른 내용이 포함됨). 그런 다음 뷰는 모든 활동을 반복하고 활동 카테고리에 따라 무언가를 인쇄합니다. 아주 간단하고 작동합니다. 문제는 그것이 매우 천천히, 그래서 내가 뭔가 잘못하고 있어야합니다. 코드는 다음과 같습니다.내 활동 피드 루프 (레일즈)를 최적화하는 방법
#activity.rb snippet
def post?
category == "post"
end
def post_comment?
category == "post_comment"
end
def album?
category == "album"
end
def photo_comment?
category == "photo_comment"
end
#controller snippet
@Activity = Activity.all(:order=> 'created_at DESC', :limit=>"5")
#view snippet
<% @Activity.each do |a| %>
<div class="activity_item">
<div class="avatar" style="background-image: url(<%= small_pic_url(a.user)%>) "></div>
<div class="text"> <%= a.user.username %>
<% if a.post? %>
posted <%= link_to a.data["post_title"], post_path(a.data["post_id"]) %>
<% elsif a.post_comment? %>
commented on <%= link_to a.data["post_title"], post_path(a.data["post_id"]) %>
<% elsif a.album? %>
created a <%= link_to "Photo Album", album_path(a.data["album_id"])%>
<% elsif a.photo_comment? %>
commented on <%= link_to "#{a.data["username"]}'s photo", upload_path(a.data["photo_id"])%>
<% end %>
</div>
</div>
<% end %>
활동 표에 user_id 색인을 추가했지만 그다지 효과가 없을 것 같습니다. 5 활동 항목/아바타를 렌더링하는 데 3 초 이상 걸리므로이를 처리하는 더 좋은 방법이 있어야합니다.
팁 주셔서 감사합니다. 나는'created_at? '에 대한 색인을 가지고 있지 않지만, 하나를 추가 할 것이다. 저는 실제로 약간의 제거 프로세스를 수행하고 병목 현상이 'small_pic_url'인 사용자가 아바타가 있는지 여부를 확인하는 도우미 메서드로 판단했습니다. – aguynamedloren