Commit 20ce2db1f38a35763eef51cbfee547e84133c4d3
Committed by
Antonio Terceiro
1 parent
d9378c95
Exists in
master
and in
22 other branches
ActionItem1225: some performance improvements
* On sitemap, only top level articles are listed * Cache on list of environment tags * Cache on list of profile tags * Cache and pagination when listing environment articles with some tag * Cache and pagination when listing profile articles with some tag
Showing
8 changed files
with
50 additions
and
26 deletions
Show diff stats
app/controllers/public/profile_controller.rb
| ... | ... | @@ -11,12 +11,18 @@ class ProfileController < PublicController |
| 11 | 11 | end |
| 12 | 12 | |
| 13 | 13 | def tags |
| 14 | - @tags = profile.article_tags | |
| 14 | + @tags_cache_key = "tags_profile_#{profile.id.to_s}" | |
| 15 | + if is_cache_expired?(@tags_cache_key, true) | |
| 16 | + @tags = profile.article_tags | |
| 17 | + end | |
| 15 | 18 | end |
| 16 | 19 | |
| 17 | 20 | def tag |
| 18 | 21 | @tag = params[:id] |
| 19 | - @tagged = profile.find_tagged_with(@tag) | |
| 22 | + @tag_cache_key = "tag_#{@tag.to_s.gsub(' ', '%20')}_#{profile.id.to_s}_page_#{params[:npage]}" | |
| 23 | + if is_cache_expired?(@tag_cache_key, true) | |
| 24 | + @tagged = profile.find_tagged_with(@tag).paginate(:per_page => 20, :page => params[:npage]) | |
| 25 | + end | |
| 20 | 26 | end |
| 21 | 27 | |
| 22 | 28 | def communities | ... | ... |
app/controllers/public/search_controller.rb
| ... | ... | @@ -219,15 +219,21 @@ class SearchController < PublicController |
| 219 | 219 | attr_reader :category |
| 220 | 220 | |
| 221 | 221 | def tags |
| 222 | - @tags = environment.tags.inject({}) do |memo,tag| | |
| 223 | - memo[tag.name] = tag.taggings.count | |
| 224 | - memo | |
| 222 | + @tags_cache_key = "tags_env_#{environment.id.to_s}" | |
| 223 | + if is_cache_expired?(@tags_cache_key, true) | |
| 224 | + @tags = environment.tags.inject({}) do |memo,tag| | |
| 225 | + memo[tag.name] = tag.taggings.count | |
| 226 | + memo | |
| 227 | + end | |
| 225 | 228 | end |
| 226 | 229 | end |
| 227 | 230 | |
| 228 | 231 | def tag |
| 229 | 232 | @tag = environment.tags.find_by_name(params[:tag]) |
| 230 | - @tagged = environment.articles.find_tagged_with(@tag) | |
| 233 | + @tag_cache_key = "tag_#{@tag.to_s.gsub(' ', '%20')}_env_#{environment.id.to_s}_page_#{params[:npage]}" | |
| 234 | + if is_cache_expired?(@tag_cache_key, true) | |
| 235 | + @tagged = environment.articles.find_tagged_with(@tag).paginate(:per_page => 10, :page => params[:npage]) | |
| 236 | + end | |
| 231 | 237 | end |
| 232 | 238 | |
| 233 | 239 | ####################################################### | ... | ... |
app/views/layouts/application-ng.rhtml
| ... | ... | @@ -61,7 +61,7 @@ |
| 61 | 61 | <%= link_to('<i class="icon-menu-admin"></i><strong>' + _('Administration') + '</strong>', { :controller => 'admin_panel', :action => 'index' }, :id => "controlpanel", :title => _("Configure the environment")) %> |
| 62 | 62 | <% end %> |
| 63 | 63 | <% if (user.environment == environment) %> |
| 64 | - <%= link_to('<i class="icon-menu-ctrl-panel"></i><strong>' + _('Control panel') + '</strong>', user.admin_url, :id => "controlpanel", :title => _("Configure your personal account and content")) if (user.environment == environment) %> | |
| 64 | + <%= link_to('<i class="icon-menu-ctrl-panel"></i><strong>' + _('Control panel') + '</strong>', user.admin_url, :id => "controlpanel", :title => _("Configure your personal account and content")) %> | |
| 65 | 65 | <% end %> |
| 66 | 66 | <%= link_to('<i class="icon-menu-logout"></i><strong>' + _('Logout') + '</strong>', { :controller => 'account', :action => 'logout'} , :id => "logout", :title => _("Leave the system")) %> |
| 67 | 67 | <% else %> | ... | ... |
app/views/profile/sitemap.rhtml
app/views/profile/tag.rhtml
| 1 | 1 | <h1><%= _('Content tagged with "%s"') % @tag %></h1> |
| 2 | 2 | |
| 3 | -<div class='search-tagged-items'> | |
| 4 | - <ul> | |
| 5 | - <% for doc in @tagged %> | |
| 6 | - <li><%= link_to doc.title, doc.url %></li> | |
| 7 | - <% end %> | |
| 8 | - </ul> | |
| 9 | -</div> | |
| 3 | +<% cache_timeout(@tag_cache_key, 4.hour.from_now) do %> | |
| 4 | + <div class='search-tagged-items'> | |
| 5 | + <ul> | |
| 6 | + <% for doc in @tagged %> | |
| 7 | + <li><%= link_to doc.title, doc.url %></li> | |
| 8 | + <% end %> | |
| 9 | + </ul> | |
| 10 | + </div> | |
| 10 | 11 | |
| 11 | -<div> | |
| 12 | - <%= link_to _('See content tagged with "%s" in the entire site') % @tag, :controller => 'search', :action => 'tag', :tag => @tag %> | |
| 13 | -</div> | |
| 12 | + <%= pagination_links @tagged, :param_name => 'npage' %> | |
| 13 | + | |
| 14 | + <div> | |
| 15 | + <%= link_to _('See content tagged with "%s" in the entire site') % @tag, :controller => 'search', :action => 'tag', :tag => @tag %> | |
| 16 | + </div> | |
| 17 | +<% end %> | ... | ... |
app/views/profile/tags.rhtml
app/views/search/tag.rhtml
| ... | ... | @@ -6,9 +6,14 @@ |
| 6 | 6 | <%= button('back', _('Back to tag cloud'), :action => 'tags') %> |
| 7 | 7 | <% end %> |
| 8 | 8 | |
| 9 | -<div class='search-tagged-items'> | |
| 10 | -<% @tagged.each do |hit| %> | |
| 11 | - <%= render :partial => partial_for_class(hit.class), :object => hit %> | |
| 12 | - <br style='clear: left;'/> | |
| 9 | +<% cache_timeout(@tag_cache_key, 4.hour.from_now) do %> | |
| 10 | + <div class='search-tagged-items'> | |
| 11 | + <% @tagged.each do |hit| %> | |
| 12 | + <%= render :partial => partial_for_class(hit.class), :object => hit %> | |
| 13 | + <br style='clear: left;'/> | |
| 14 | + <% end %> | |
| 15 | + | |
| 16 | + </div> | |
| 17 | + <%= pagination_links @tagged, :param_name => 'npage' %> | |
| 18 | + | |
| 13 | 19 | <% end %> |
| 14 | -</div> | ... | ... |