Come creare pagine html che non cambiano molto e non molto spesso?

2

Ho un server Rails che si connette a un'API json su un altro server per ottenere dati per creare dinamicamente le pagine. Queste pagine, tuttavia, non cambiano molto e non molto spesso.

Stavo pensando che avrei potuto ridurre il tempo di caricamento della pagina, inoltre, ridurre significativamente le chiamate all'API JSON se avessi chiamato periodicamente l'API JSON e scritto i file html come pagine html statiche. Che cosa è un modo per creare da zero i file html in ruby / rails?

    
posta kurtybot 12.01.2014 - 08:59
fonte

1 risposta

5

Ciò che si vorrebbe fare sarebbe possibile usando render_to_string e salvando il risultato in un file. Quindi il tuo controller potrebbe usare questo file. Ma è piuttosto ingombrante.

L'uso della memorizzazione nella cache automatizza questo processo e consente un controllo più dettagliato su quale parte di una pagina viene memorizzata nella cache. Inoltre, non è necessario modificare gran parte del codice esistente, poiché il meccanismo di memorizzazione nella cache si adatta perfettamente al flusso di lavoro di Rails.

I dettagli sono spiegati qui: link

Sono possibili molte strategie diverse e diversi livelli di parti di una cache nella cache o anche i valori di ritorno dei singoli metodi. A seconda di quale parte della pagina è statica e dove esattamente si trova il collo di bottiglia (più spesso metodi che accedono al database o ad un'API esterna, meno probabile il rendering stesso).

Quindi potresti usare la cache dei frammenti. Supponendo che la tua pagina sia parziale che esegue il rendering del contenuto ottenuto da una chiamata API, questo sarebbe simile a questo:

<% cache(action: 'api_stuff') do %>
  <h1>that's it:</h1>
  <% api_source.get_data.each do |line| %>
    <%# render a line of data %>
    <%# or render a partial %>
  <% end %>
<% end %>

Questo ha il leggero svantaggio che è necessario effettuare la chiamata api dal codice di visualizzazione. Non esattamente il modo più elegante. La cache di Rails è in qualche modo in attesa di oggetti ActiveRecord.

Quindi potresti preferire un altro approccio e invece utilizzare manualmente la cache di Rails. In questo caso la classe che fornisce l'accesso all'API funzionerebbe in questo modo:

def get_data()
    Rails.cache.fetch("some_unique_id") do
      make_api_call() # if cache fails actually retrieve from API
    end
  end

In questo modo Rails cercherà di trovare i dati nella cache denominati "some_unique_id". Se fallisce (non esiste, è stato cancellato o è scaduto) chiamerà make_api_call () per ottenere i dati.

Puoi eliminare o scadere manualmente la cache (basta scrivere qualche script) o aggiungere un intervallo di scadenza:

Rails.cache.fetch("some_unique_id", expires_in: 24.hours) do

Manu sono possibili più varianti. Inoltre puoi decidere dove è memorizzata la cache, i file, la memoria o memcached sono solo alcune delle opzioni qui.

    
risposta data 12.01.2014 - 17:11
fonte

Leggi altre domande sui tag