Das Plugin Settings für Rails wird in meinen Applikationen stark verwendet.
Z.b. werden Informationen die im Layout verarbeitet werden auch mit gehalten. Dies belastet daher stark die DB. Um die Zugriffe zu minimieren, habe ich eine kleine Änderung im Plugin vorgenommen:
Wir definieren zunächst folgende neuen Globalen variablen:
@@use_cache = true
@@cache = {}
Danach diese neuen Methoden:
def self.use_cache(use_cache=true)
if(use_cache == true)
@@use_cache = true
else
@@use_cache = false
@@cache = {}
end
enddef self.use_cache?
return @@use_cache == true
end
Und nun ändern wir die Methode def self.object(var_name) so ab:
def self.object(var_name)
if use_cache?
set = @@cache[var_name.to_s]if set.nil?
set = Setting.find_by_var(var_name.to_s)
if(!set.nil?)
logger.debug “Putting Setting in cache: ” + var_name.to_s
@@cache[var_name.to_s] = set
end
end
else
set = Setting.find_by_var(var_name.to_s)
endset
end
Und schon wieder etwas verbesserte Performance
PS: Ja, ich weiß dass Caching mit z.B. MemCache auch eine Möglichkeit ist, man hat halt nur nicht immer nen MemCache am laufen und Settings werden bei mir eigentlich in jedem Projekt verwendet, wodurch die Lösung hier am besten war!
Anmerkung: siehe für MemCached: http://frederico-araujo.com/2007/12/13/make-your-rails-app-faster-with-memcached-part-1