Skip to content

Commit e8d137a

Browse files
committed
more caching -- no reads of non-user specific data on logged in milestone post
1 parent 189719e commit e8d137a

File tree

7 files changed

+28
-10
lines changed

7 files changed

+28
-10
lines changed

dashboard/app/models/level_source.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ class LevelSource < ActiveRecord::Base
1616
XMLNS_STRING = ' xmlns="http://www.w3.org/1999/xhtml"'
1717

1818
def LevelSource.cache_enabled?
19+
@@cache_enabled ||= false
1920
rack_env?(:production) || @@cache_enabled
2021
end
2122

dashboard/app/models/script.rb

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22
class Script < ActiveRecord::Base
33
include Seeded
44
has_many :levels, through: :script_levels
5-
has_many :script_levels, -> { order('chapter ASC') }, dependent: :destroy # all script levels, even those w/ stages, are ordered by chapter, see Script#add_script
6-
has_many :stages, -> { order('position ASC') }, dependent: :destroy
5+
has_many :script_levels, -> { order('chapter ASC') }, dependent: :destroy, inverse_of: :script # all script levels, even those w/ stages, are ordered by chapter, see Script#add_script
6+
has_many :stages, -> { order('position ASC') }, dependent: :destroy, inverse_of: :script
77
belongs_to :wrapup_video, foreign_key: 'wrapup_video_id', class_name: 'Video'
88
belongs_to :user
99
validates :name, presence: true, uniqueness: { case_sensitive: false}
@@ -58,6 +58,10 @@ def cached?
5858
self.equal?(Script.playlab_script)
5959
end
6060

61+
def Script.should_be_cached?(id)
62+
Script.script_cache.has_key?(id.to_s)
63+
end
64+
6165
def should_be_cached?
6266
Script.script_cache.has_key?(id.to_s)
6367
end

dashboard/app/models/script_level.rb

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22
# A Script has one or more Levels, and a Level can belong to one or more Scripts
33
class ScriptLevel < ActiveRecord::Base
44
belongs_to :level
5-
belongs_to :script
6-
belongs_to :stage
5+
belongs_to :script, inverse_of: :script_levels
6+
belongs_to :stage, inverse_of: :script_levels
77
acts_as_list scope: :stage
88

99
NEXT = 'next'
@@ -31,7 +31,16 @@ def or_next_progression_level
3131
valid_progression_level? ? self : next_progression_level
3232
end
3333

34+
def cached_valid_progression_level?
35+
cached_script = Script.get_from_cache(script_id)
36+
cached_script_level = cached_script.script_levels.to_a.find{|sl| sl.id == self.id}
37+
return false if cached_script_level.level.unplugged?
38+
return false if cached_script_level.stage && cached_script_level.stage.unplugged?
39+
true
40+
end
41+
3442
def valid_progression_level?
43+
return cached_valid_progression_level? if Script.should_be_cached?(script_id)
3544
return false if level.unplugged?
3645
return false if stage && stage.unplugged?
3746
true
@@ -103,7 +112,7 @@ def stage_or_game_total
103112
end
104113

105114
def self.cache_find(id)
106-
@@script_level_map ||= ScriptLevel.includes(:level, :script).index_by(&:id)
115+
@@script_level_map ||= ScriptLevel.includes([{level: [:game, :concepts]}, :script]).index_by(&:id)
107116
@@script_level_map[id]
108117
end
109118

dashboard/app/models/stage.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
# Ordered partitioning of script levels within a script
22
# (Intended to replace most of the functionality in Game, due to the need for multiple app types within a single Game/Stage)
33
class Stage < ActiveRecord::Base
4-
has_many :script_levels, -> { order('position ASC') }
5-
belongs_to :script
4+
has_many :script_levels, -> { order('position ASC') }, inverse_of: :stage
5+
belongs_to :script, inverse_of: :stages
66
acts_as_list scope: :script
77

88
validates_uniqueness_of :name, scope: :script_id

dashboard/app/models/user.rb

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -244,7 +244,10 @@ def levels_from_script(script, game_index=nil, stage=nil)
244244

245245
def next_unpassed_progression_level(script)
246246
user_levels_by_level = self.user_levels.index_by(&:level_id)
247-
script.script_levels.detect do |script_level|
247+
cached_script = script
248+
cached_script = Script.get_from_cache(script.id) if script.should_be_cached?
249+
250+
cached_script.script_levels.detect do |script_level|
248251
user_level = user_levels_by_level[script_level.level_id]
249252
is_unpassed_progression_level(script_level, user_level)
250253
end

dashboard/app/models/user_script.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ class UserScript < ActiveRecord::Base
55
def check_completed?
66
# the script is completed if there are no more "progression levels" to be completed
77
# (unplugged levels are not progression levels, for one)
8-
user.next_unpassed_progression_level(script).nil?
8+
user.next_unpassed_progression_level(Script.get_from_cache(script_id)).nil?
99
end
1010

1111
def empty?

dashboard/config/environments/test.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,5 +45,6 @@
4545
CDO.disable_s3_image_uploads = true
4646

4747
# see stack traces around sql queries in the log
48-
ActiveRecordQueryTrace.enabled = true
48+
# off by default because it slows things down
49+
# ActiveRecordQueryTrace.enabled = true
4950
end

0 commit comments

Comments
 (0)