performance improvements as described in #383

This commit is contained in:
Didier Lafforgue 2012-04-26 03:39:23 +02:00
parent 9613058b97
commit 23600edb1f
15 changed files with 64 additions and 22 deletions

View File

@ -44,7 +44,7 @@ PATH
locomotive_liquid (= 2.2.2) locomotive_liquid (= 2.2.2)
mimetype-fu (~> 0.1.2) mimetype-fu (~> 0.1.2)
mongo (~> 1.5.2) mongo (~> 1.5.2)
mongoid (~> 2.4.6) mongoid (~> 2.4.9)
multi_json (= 1.2.0) multi_json (= 1.2.0)
rack-cache (~> 1.1) rack-cache (~> 1.1)
rails (~> 3.2.3) rails (~> 3.2.3)
@ -115,7 +115,7 @@ GEM
childprocess (0.3.1) childprocess (0.3.1)
ffi (~> 1.0.6) ffi (~> 1.0.6)
chunky_png (1.2.5) chunky_png (1.2.5)
codemirror-rails (2.23) codemirror-rails (2.24)
railties (~> 3.0) railties (~> 3.0)
coffee-rails (3.2.2) coffee-rails (3.2.2)
coffee-script (>= 2.2.0) coffee-script (>= 2.2.0)
@ -215,7 +215,7 @@ GEM
mocha (0.9.12) mocha (0.9.12)
mongo (1.5.2) mongo (1.5.2)
bson (= 1.5.2) bson (= 1.5.2)
mongoid (2.4.8) mongoid (2.4.9)
activemodel (~> 3.1) activemodel (~> 3.1)
mongo (~> 1.3) mongo (~> 1.3)
tzinfo (~> 0.3.22) tzinfo (~> 0.3.22)

View File

@ -24,10 +24,6 @@ class Locomotive.Views.Shared.Fields.ManyToManyView extends Backbone.View
@collection = @model.get(@options.name) @collection = @model.get(@options.name)
@all_entries = @options.all_entries @all_entries = @options.all_entries
window.collection = @collection
window.bar = @all_entries
window.model = @model
render: -> render: ->
$(@el).html(@template()()) $(@el).html(@template()())

View File

@ -27,6 +27,10 @@ module Locomotive
end end
visible << content_type visible << content_type
end.each do |content_type|
# make sure to have a fresh copy of the content types because for now we don't have the full content types (ie: content_types.only(...))
::Mongoid::IdentityMap.remove(content_type)
end end
if visible.size > 0 if visible.size > 0

View File

@ -86,7 +86,7 @@ module Locomotive
end end
def as_json(options = {}) def as_json(options = {})
self.to_presenter.as_json self.to_presenter(options).as_json
end end
protected protected

View File

@ -19,6 +19,9 @@ module Locomotive
## indexes ## ## indexes ##
index :position index :position
index [[:depth, Mongo::ASCENDING], [:position, Mongo::ASCENDING]] index [[:depth, Mongo::ASCENDING], [:position, Mongo::ASCENDING]]
alias_method_chain :rearrange, :identity_map
alias_method_chain :rearrange_children, :identity_map
end end
module ClassMethods module ClassMethods
@ -101,6 +104,16 @@ module Locomotive
protected protected
def rearrange_with_identity_map
::Mongoid::IdentityMap.clear
rearrange_without_identity_map
end
def rearrange_children_with_identity_map
self.children.reset
rearrange_children_without_identity_map
end
def persist_depth def persist_depth
self.attributes['depth'] = self.depth self.attributes['depth'] = self.depth
self.depth_will_change! self.depth_will_change!

View File

@ -54,8 +54,12 @@ module Locomotive
Locomotive::Liquid::Drops::Site.new(self) Locomotive::Liquid::Drops::Site.new(self)
end end
def to_presenter(options = {})
Locomotive::SitePresenter.new(self, options)
end
def as_json(options = {}) def as_json(options = {})
Locomotive::SitePresenter.new(self, options).as_json self.to_presenter(options).as_json
end end
protected protected

View File

@ -1,7 +1,7 @@
module Locomotive module Locomotive
class MembershipPresenter < BasePresenter class MembershipPresenter < BasePresenter
delegate :role, :to => :source delegate :role, :account_id, :to => :source
def name def name
self.source.account.name self.source.account.name
@ -26,8 +26,13 @@ module Locomotive
end end
def included_methods def included_methods
super + %w(name email role role_name can_update grant_admin) super + %w(account_id name email role role_name can_update grant_admin)
end end
# def light_as_json
# methods = included_methods.clone - %w(name email)
# self.as_json(methods)
# end
end end
end end

View File

@ -15,5 +15,10 @@ module Locomotive
super + %w(name locales domain_name subdomain domains robots_txt seo_title meta_keywords meta_description domains_without_subdomain memberships) super + %w(name locales domain_name subdomain domains robots_txt seo_title meta_keywords meta_description domains_without_subdomain memberships)
end end
def as_json_for_html_view
methods = included_methods.clone - %w(memberships)
self.as_json(methods)
end
end end
end end

View File

@ -1,10 +1,10 @@
- if field.ui_enabled? - if field.ui_enabled?
- target_content_type = Locomotive::ContentType.class_name_to_content_type(field.class_name, current_site) - target_content_type = Locomotive::ContentType.class_name_to_content_type(field.class_name, current_site)
= f.input name.to_sym, = f.input name.to_sym,
:label => field.label, :label => field.label,
:hint => field.hint, :hint => field.hint,
:as => :'Locomotive::Empty', :as => :'Locomotive::Empty',
:wrapper_html => { :id => "content_entry_#{name}_input", :class => 'empty relationship input' } :wrapper_html => { :id => "content_entry_#{name}_input", :class => 'empty relationship input' }
- content_for :head do - content_for :head do
@ -38,4 +38,4 @@
- content_for :backbone_view_data do - content_for :backbone_view_data do
:plain :plain
, all_#{name}_entries: #{target_content_type.list_or_group_entries.to_json} , all_#{name}_entries: #{target_content_type.list_or_group_entries.to_json(:depth => 1)}

View File

@ -19,7 +19,7 @@
window.locale = '#{I18n.locale}'; window.locale = '#{I18n.locale}';
window.content_locale = '#{::Mongoid::Fields::I18n.locale}'; window.content_locale = '#{::Mongoid::Fields::I18n.locale}';
Locomotive.current_site = new Locomotive.Models.Site(#{current_site.to_json}); Locomotive.current_site = new Locomotive.Models.Site(#{current_site.to_presenter.as_json_for_html_view.to_json});
Locomotive.current_account = new Locomotive.Models.Account(#{current_locomotive_account.to_json}); Locomotive.current_account = new Locomotive.Models.Account(#{current_locomotive_account.to_json});
$(document).ready(function() { $(document).ready(function() {

View File

@ -27,7 +27,7 @@ Gem::Specification.new do |s|
s.add_dependency 'mongo', '~> 1.5.2' s.add_dependency 'mongo', '~> 1.5.2'
s.add_dependency 'bson_ext', '~> 1.5.2' s.add_dependency 'bson_ext', '~> 1.5.2'
s.add_dependency 'mongoid', '~> 2.4.6' s.add_dependency 'mongoid', '~> 2.4.9'
s.add_dependency 'locomotive-mongoid-tree', '~> 0.6.2' s.add_dependency 'locomotive-mongoid-tree', '~> 0.6.2'
s.add_dependency 'custom_fields', '~> 2.0.0.rc10' s.add_dependency 'custom_fields', '~> 2.0.0.rc10'

View File

@ -10,11 +10,14 @@ defaults: &defaults
development: development:
<<: *defaults <<: *defaults
database: locomotive_engine_dev database: locomotive_engine_dev
identity_map_enabled: true
test: test:
<<: *defaults <<: *defaults
database: locomotive_engine_test database: locomotive_engine_test
identity_map_enabled: true
production: production:
<<: *defaults <<: *defaults
identity_map_enabled: true
database: locomotive_engine_production database: locomotive_engine_production

View File

@ -131,7 +131,7 @@ describe Locomotive::ContentType do
it 'updates the information about the order of a has_many relationship if the target class changes its order' do it 'updates the information about the order of a has_many relationship if the target class changes its order' do
@content_type.order_by = 'description'; @content_type.order_direction = 'ASC'; @content_type.save! @content_type.order_by = 'description'; @content_type.order_direction = 'ASC'; @content_type.save!
@category_1 = @category_1.class.find(@category_1._id) @category_1 = safe_find(@category_1.class, @category_1._id)
@category_1.projects.metadata.order.should == %w(description ASC) @category_1.projects.metadata.order.should == %w(description ASC)
@category_1.projects.map(&:name).should == %w(LocomotiveCMS RubyOnRails) @category_1.projects.map(&:name).should == %w(LocomotiveCMS RubyOnRails)
@ -139,7 +139,9 @@ describe Locomotive::ContentType do
it 'uses the order by position if the UI option is enabled' do it 'uses the order by position if the UI option is enabled' do
field = @category_content_type.entries_custom_fields.where(:name => 'projects').first field = @category_content_type.entries_custom_fields.where(:name => 'projects').first
field.ui_enabled = true; @category_content_type.save!; @category_1 = @category_1.class.find(@category_1._id) field.ui_enabled = true;
@category_content_type.save!; @category_1 = safe_find(@category_1.class, @category_1._id)
@category_1.projects.metadata.order.to_s.should == 'position_in_category' @category_1.projects.metadata.order.to_s.should == 'position_in_category'
@category_1.projects.map(&:name).should == %w(LocomotiveCMS RubyOnRails) @category_1.projects.map(&:name).should == %w(LocomotiveCMS RubyOnRails)
@ -337,6 +339,11 @@ describe Locomotive::ContentType do
end end
end end
def safe_find(klass, id)
Mongoid::IdentityMap.clear
klass.find(id)
end
def build_content_entry(content_type) def build_content_entry(content_type)
content_type.entries.build(:name => 'Asset on steroids', :description => 'Lorem ipsum', :active => true) content_type.entries.build(:name => 'Asset on steroids', :description => 'Lorem ipsum', :active => true)
end end

View File

@ -143,8 +143,8 @@ describe Locomotive::Page do
describe 'tree organization' do describe 'tree organization' do
before(:each) do before(:each) do
@home = FactoryGirl.create(:page) @home = FactoryGirl.create(:page)
@child_1 = FactoryGirl.create(:page, :title => 'Subpage 1', :slug => 'foo', :parent_id => @home._id, :site => @home.site) @child_1 = FactoryGirl.create(:page, :title => 'Subpage 1', :slug => 'foo', :parent_id => @home._id, :site => @home.site)
end end
it 'adds root elements' do it 'adds root elements' do
@ -390,4 +390,5 @@ describe Locomotive::Page do
def fake_bson_id(id) def fake_bson_id(id)
BSON::ObjectId(id.to_s.rjust(24, '0')) BSON::ObjectId(id.to_s.rjust(24, '0'))
end end
end end

View File

@ -27,6 +27,10 @@ RSpec.configure do |config|
DatabaseCleaner.orm = 'mongoid' DatabaseCleaner.orm = 'mongoid'
end end
config.before(:each) do
Mongoid::IdentityMap.clear
end
config.before(:each) do config.before(:each) do
DatabaseCleaner.clean DatabaseCleaner.clean
end end