Ho scritto quel pezzo di guida.
Sicuramente non vuoi vivere compilare in produzione.
Quando hai compilato, ecco cosa succede:
Ogni richiesta per un file in / assets viene passata a Sprockets. Alla prima richiesta per ogni risorsa, viene compilato e memorizzato nella cache in qualunque Rails stia usando per la cache (di solito il filesystem).
Su richieste successive, Sprockets riceve la richiesta e deve cercare il nome del file con impronta digitale, verificare che il file (immagine) o i file (css e js) che compongono l'asset non siano stati modificati, quindi se esiste una versione memorizzata nella cache serve tale.
Questo è tutto nella cartella delle risorse e in tutte le cartelle fornitore / risorse utilizzate dai plugin.
Questo è un sacco di sovraccarico poiché, a dire il vero, il codice non è ottimizzato per la velocità.
Ciò avrà un impatto sulla velocità con cui la risorsa passa attraverso il cavo al cliente e avrà un impatto negativo sui tempi di caricamento della pagina del tuo sito.
Confronta con il valore predefinito:
Quando le risorse sono precompilate e la compilazione è disattivata, le risorse vengono compilate e impronte digitali su public/assets
. Sprockets restituisce una tabella di mappatura della pianura a nomi di file con impronte digitali su Rails e Rails la scrive nel filesystem. Il file manifest (YML in Rails 3 o JSON con un nome casuale in Rails 4) viene caricato in Memory da Rails all'avvio e memorizzato nella cache per l'utilizzo con i metodi di supporto dell'asset.
Ciò rende molto veloce la generazione di pagine con le risorse corrette per le impronte digitali e la pubblicazione dei file stessi è veloce dal web server al file system. Entrambi drammaticamente più veloci della compilazione live.
Per ottenere il massimo vantaggio dalla pipeline e dall'impronta digitale, è necessario impostare intestazioni molto future sul server Web e abilitare la compressione gzip per i file js e css. Sprockets scrive le versioni gzip delle risorse che è possibile impostare per l'utilizzo del server, eliminando la necessità di farlo per ogni richiesta.
Questo porta le risorse al cliente il più velocemente possibile e nella dimensione più piccola possibile, accelerando la visualizzazione delle pagine sul lato client e riducendo (con intestazione molto futura) le richieste.
Quindi se stai compilando dal vivo è:
- Molto lento
- Manca la compressione
- Inciderà sul tempo di rendering delle pagine
Contro
- Più velocemente possibile
- compressa
- Rimuovere la compressione ascoltata dal server (facoltativamente).
- Ridurre al minimo il tempo di rendering delle pagine.
Modifica: (Risposta a follow-up commento)
La pipeline potrebbe essere modificata per precompilare la prima richiesta, ma ci sono alcuni importanti ostacoli a farlo. Il primo è che deve esserci una tabella di ricerca per i nomi delle impronte digitali o i metodi di supporto sono troppo lenti. Sotto un senario compilazione su richiesta ci dovrebbe essere un modo per aggiungere alla tabella di ricerca quando ogni nuova risorsa viene compilata o richiesta.
Inoltre, qualcuno dovrebbe pagare il prezzo della consegna lenta degli asset per un periodo di tempo sconosciuto fino a quando tutti gli asset non vengono compilati e installati.
L'impostazione predefinita, in cui il prezzo di compilazione di tutto ciò che viene pagato off-line in una sola volta, non influisce sui visitatori pubblici e garantisce che tutto funzioni prima che le cose vadano in diretta.
Il punto di rottura è che aggiunge molta complessità ai sistemi di produzione.
[Modifica, giugno 2015] Se stai leggendo questo perché stai cercando una soluzione per tempi di compilazione lenti durante una distribuzione, allora potresti considerare di precompilare le risorse localmente. Le informazioni al riguardo sono contenute nella guida alla pipeline degli asset . Ciò consente di precompilare localmente solo quando si verifica una modifica, eseguirne il commit e quindi eseguire una distribuzione rapida senza fase di precompilazione.