Commit 20ce2db1f38a35763eef51cbfee547e84133c4d3

Authored by Daniela Feitosa
Committed by Antonio Terceiro
1 parent d9378c95

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
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
1 1 <h1><%= _("%s: site map") % profile.name %></h1>
2 2  
3   -<%= list_articles(@articles, true) %>
  3 +<%= list_articles(@articles, false) %>
... ...
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
1 1 <h1><%= _("%s's tags") % @profile.name %></h1>
2 2  
3   -<%= tag_cloud(@tags, :id, { :action => :tag}, {:show_count => true} ) %>
  3 +<% cache_timeout(@tags_cache_key, 4.hour.from_now) do %>
  4 + <%= tag_cloud(@tags, :id, { :action => :tag}, {:show_count => true} ) %>
  5 +<% end %>
... ...
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>
... ...
app/views/search/tags.rhtml
1 1 <h2><%= _('Tag cloud') %></h2>
2 2  
3   -<%= tag_cloud(@tags, :tag, :action => 'tag') %>
4   -
  3 +<% cache_timeout(@tags_cache_key, 4.hour.from_now) do %>
  4 + <%= tag_cloud(@tags, :tag, :action => 'tag') %>
  5 +<% end %>
... ...