Ruby  »  Guide  »  Guida Ruby On Rails 

Caching con Rails - II



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.

Ultimi articoli Ruby

Duck Typing, tipizzazione per comportamenti

Riconoscere un oggetto non dal tipo ma dai metodi che espone, quindi...

Introduzione a Rack

Implemetare uno stack di middleware per gestire efficacemente...

Le meravigliose novità di Rails 3

La fusione con Merb, l'ottimizzazione del framework, l'introduzione...

CouchDB e Rails: la gemma sul divano

Facciamo la conoscenza di CouchRest, una alternativa ad ActiveRecord...

JRuby: Java e Ruby insieme

Introduzione pratica alla piattaforma JRuby, per utilizzare classi...

Altri articoli

Guide Ruby

Guida ActiveSupport

Una panoramica sulle funzionalità più importanti di ActiveSupport:...

Guida Ruby On Rails 2

Scoprire le novità di Ruby on Rails 2, memorizzare i dati con...

Guida Ruby e il Web

Un percorso alla scoperta delle potenzialità offerte da Ruby nella...

Altre guide

Newsletter @Ruby

Ogni mercoledì, direttamente nella tua e-mail: articoli, guide e tutorial su Ruby e Ruby on Rails .

Iscriviti alla newsletter

Altre newsletter

Corsi in aula

Nessun corso previsto

Nessun corso previsto