improve closet performance by caching item link

This commit is contained in:
Emi Matchu 2012-08-09 19:34:56 -04:00
parent 4a69772cd2
commit 1e3938eea9
7 changed files with 28 additions and 42 deletions

View file

@ -1,5 +1,3 @@
# requires item sweeper at bottom
class Item < ActiveRecord::Base class Item < ActiveRecord::Base
include PrettyParam include PrettyParam
@ -836,6 +834,3 @@ class Item < ActiveRecord::Base
class SearchError < ArgumentError;end class SearchError < ArgumentError;end
end end
require 'item_sweeper'

View file

@ -0,0 +1,17 @@
class ItemObserver < ActionController::Caching::Sweeper
def after_update(item)
Rails.logger.debug "Item #{item.id} was just updated"
expire_cache_for(item)
end
def after_destroy(item)
Rails.logger.debug "Item #{item.id} was just destroyed"
expire_cache_for(item)
end
private
def expire_cache_for(item)
ActionController::Base.new.expire_fragment("items/#{item.id}#item_link_partial")
end
end

View file

@ -1,26 +0,0 @@
class ItemSweeper < ActionController::Caching::Sweeper
observe Item
def after_update(item)
expire_cache_for(item)
end
def after_destroy(item)
expire_cache_for(item)
end
private
def expire_cache_for(item)
options = {:controller => 'items', :action => 'show', :id => item.id}
expire_action(options)
end
def expire_action(options)
if @controller
super
elsif LocalImpressHost
@tmp_controller ||= SweeperController.new
@tmp_controller.expire_action_proxy(options.dup)
end
end
end

View file

@ -1,13 +1,13 @@
.closet-list{'data-id' => closet_list.id, 'data-hangers-count' => closet_list.hangers.count, :id => "closet-list-#{closet_list.id}"} .closet-list{'data-id' => closet_list.id, 'data-hangers-count' => closet_list.hangers.size, :id => "closet-list-#{closet_list.id}"}
%header %header
- if show_controls - if show_controls
= form_for [closet_list.user, closet_list], :html => {:class => 'visibility-form'} do |f| = form_for [current_user, closet_list], :html => {:class => 'visibility-form'} do |f|
= f.select :visibility, closet_visibility_choices(:human_name) = f.select :visibility, closet_visibility_choices(:human_name)
= f.submit "Save" = f.submit "Save"
= closet_visibility_descriptions('items in this list') = closet_visibility_descriptions('items in this list')
.closet-list-controls .closet-list-controls
= link_to 'Edit', edit_user_closet_list_path(closet_list.user, closet_list) = link_to 'Edit', edit_user_closet_list_path(closet_list.user_id, closet_list)
= form_tag user_closet_list_path(closet_list.user, closet_list), :method => 'delete' do = form_tag user_closet_list_path(closet_list.user_id, closet_list), :method => 'delete' do
= submit_tag 'Delete', :confirm => closet_list_delete_confirmation(closet_list) = submit_tag 'Delete', :confirm => closet_list_delete_confirmation(closet_list)
%h4= closet_list.name %h4= closet_list.name

View file

@ -1,3 +1,3 @@
.object .object
= render :partial => 'items/item_link', :locals => {:item => item} = render :partial => 'items/item_link', :locals => {:item => item}
= closeted_icons_for(item)

View file

@ -1,6 +1,6 @@
= link_to item_path(item, :q => @query) do - cache "items/#{item.id}#item_link_partial" do
= image_tag item.thumbnail_url, :alt => item.description, :title => item.description = link_to item_path(item, :q => @query) do
%span.name= item.name = image_tag item.thumbnail_url, :alt => item.description, :title => item.description
= nc_icon_for(item) %span.name= item.name
= closeted_icons_for(item) = nc_icon_for(item)

View file

@ -20,7 +20,7 @@ module OpenneoImpressItems
# config.plugins = [ :exception_notification, :ssl_requirement, :all ] # config.plugins = [ :exception_notification, :ssl_requirement, :all ]
# Activate observers that should always be running # Activate observers that should always be running
config.active_record.observers = :item_sweeper, :user_sweeper config.active_record.observers = :item_observer, :user_sweeper
# Set Time.zone default to the specified zone and make Active Record auto-convert to this zone. # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone.
# Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC. # Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC.