Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Caching con Rails - II

Come gestire il caching delle pagine con Ruby on Rails: fragment caching e action caching
Come gestire il caching delle pagine con Ruby on Rails: fragment caching e action caching
Link copiato negli appunti

Fragment caching e action caching

L'action caching è sostanzialmente identico al page caching, ma le richieste vengono ancora fatte passare attraverso il controller, il che fa si che ad esse possano essere applicati filtri ed altro. Il meccanismo d'uso è pero praticamente immutato, semplicemente si userà caches_action nei controller, e negli sweeper si potrà usare expire_action. Il controller HomeController, ad esempio, può far uso di un comodo caching di questo tipo:

caches_action :index, :add_topic, :show

Ovviamente, per gestire l'invalidazione della cache dovremo far uso di nuove regole di sweeping, creando una nuova classe TopicSweeper ex novo o aggiungendo delle regole allo sweeper esistente, e facendo si che sia controllata anche la classe Topic.  Se scegliamo di gestire diverse classi in un unico sweeper, dovremo stare attenti alla gestione delle callback, in quanto l'oggetto potrà essere di qualsiasi tipo, e quindi dovremo usare una cosa come questa:

def after_save(thing)
  case thing
    when Topic
      expire_action :controller=>'home',:action=>'index'
    when Message
      expire_action :controller=>'home', :action=>'show', :id=>thing.topic.id
  end
end

Il codice dovrebbe essere autoesplicativo, ma possiamo vedere una cosa interessante nella gestione relativa al caso in cui venga creato un nuovo messaggio: poiché il caching è relativo ad una azione con un parametro specifico,  l'identificativo del topic, utilizziamo l'informazione salvata nel messaggio per costruire un url specifico, in modo da invalidare la cache soltanto per quell'oggetto. 

L'ultimo tipo di caching è il caching dei fragment, frammenti, ed è quello pensato per gestire pezzetti statici all'interno di pagine dinamiche, sostanzialmente è necessario soltanto usare il metodo cache, ed un blocco:

<%= codice variabile %>

<% cache(:action=>"azione", :parametro=>"qualcosa") do %>
    <p> codice statico </p>
<% end %>

Per cancellare i dati possiamo utilizzare expire_fragment(:controller=>"mycontroller", :action=>"azione", :parametro=>"qualcosa"),  se non utilizziamo argomenti per il metodo cache il frammento verrà associato univocamente alla coppia controller/azione.  Il fragment caching permette di raggiungere una flessibilità estrema, ed in effetti l'action caching è implementato usando i frammenti, ma ovviamente è quello che offre il minore incremento prestazionale, quindi utilizzatelo solo quando gli altri metodi non sono possibili. 

L'ultima cosa da dire sul page caching è che esso di default funziona solamente in modalità production, quindi se sperimentando con la nostra applicazione di prova vi sembra che non funzioni provate ad eseguire script/server con l'opzione "-e production", o altrimenti intervenite nel file config/environments/development.rb cambiando il valore della linea 

config.action_controller.perform_caching = false

da false a true.

Ti consigliamo anche