Non sono d'accordo sull'archiviazione dei file, se possibile, quelle immagini intermedie non dovrebbero mai essere archiviate poiché creano sempre confusione.
Lo spazio su disco è poco costoso, ma servire file da disco è lento, e gli SSD - che sono veloci - non sono ancora così economici.
Questo modello "genera tutte le dimensioni dell'immagine che possiamo pensare" non è a prova di futuro e funziona fino a quando non è possibile predefinire tutte le risoluzioni di immagine che è necessario visualizzare. C'è sempre il problema del contenuto residuo che è difficile da mantenere, ma almeno è sempre lo stesso problema.
Le specifiche aziendali possono rovinare questo modello abbastanza facilmente. Se è necessario disporre di una nuova risoluzione delle immagini, è necessario scrivere script di ridimensionamento che attraversano l'intera libreria di immagini esistente e crea la nuova risoluzione in modo che le vecchie immagini possano funzionare in un nuovo design.
È fattibile, ma ha bisogno di amministratori di sistema. Tuttavia, se le specifiche aziendali richiedono di essere molto reattivi e cambiano sempre le dimensioni dell'immagine, che non possono essere predefinite, questo modello è fottuto.
Siamo stati lì e abbiamo fatto questo, ora invece usiamo la cache di vernice e una combinazione di applicazioni di ridimensionamento per servire immagini ridimensionate arbitrariamente senza memorizzarle esplicitamente su disco. Dato che le immagini sono servite dalla cache, la loro consegna è velocissima.
Con questa soluzione non è necessario:
- crea ogni versione di immagine, soprattutto quando non sai cosa creare
- elimina le immagini rimanenti
- esecuzione di processi asincroni per ridimensionare l'immagine
- ridimensiona le vecchie immagini a nuove risoluzioni
- crea file con nomi diversi a causa delle restrizioni del file system.
Nel nostro modello il ridimensionamento avviene nel processo richiesta-risposta quando il visitatore richiede l'immagine ridimensionata. In altre parole, il visitatore che carica un'immagine ridimensionata nel browser - un'immagine che non è mai stata visualizzata - dovrà attendere un po 'di tempo in più, mentre il sistema crea la nuova immagine ridimensionata.
Funzione bonus: tutto è testabile chiamando un semplice URL, non è necessario eseguire l'app Image Resizer per creare le diverse versioni dell'immagine. L'immagine verrà creata al volo.
- Immagine originale: link
- Immagine ridimensionata: link (creazione di un'immagine di 317 pixel di larghezza)
Ogni richiesta di collegamento arriverà a una Varnish che gestisce le richieste in arrivo. Varnish è configurato in modo tale che quando riceve una richiesta che non ha parametri di query, serve la richiesta dal filesystem statico senza memorizzare il contenuto nella cache. Disattivare la cache in questo caso è una buona idea solo se l'immagine originale non verrà mai mostrata ai visitatori, solo quelli ridimensionati (forse perché l'originale è abbastanza grande).
Se la richiesta in entrata ha parametri di query, Varnish invia la richiesta all'applicazione di ridimensionamento. L'applicazione ottiene l'immagine di base eseguendo nuovamente la richiesta originale senza la stringa di query, il che significa che Varnish servirà l'immagine originale all'applicazione. Poiché Varnish può fungere da bilanciamento del carico, può persino mitigare i problemi, come il timeout dell'applicazione.
L'applicazione esegue quindi il ridimensionamento appropriato (controllando la validità dei parametri, le regole, ecc.) e fa una risposta con l'immagine ridimensionata. La risposta risale alla catena di risposta, che è Varnish, e che memorizza nella cache l'immagine ridimensionata e la restituisce al client.
Qualsiasi richiesta successiva all'immagine della stessa dimensione (ovvero lo stesso URL con gli stessi parametri di query) verrà pubblicata dalla cache fino alla scadenza della cache.
In questo modo Varnish viene utilizzato come dispositivo di archiviazione, con l'ulteriore vantaggio di essere una cache.