Uno dei problemi principali di lentezza del caricamento delle pagine web è dovuto alla miriade di immagini e script che le costituiscono. Se le immagini in qualche modo possono essere memorizzate in cache senza eccessivi problemi, lo stesso non si può dire degli script. Un interessante post si trova anche sul sito di YUI.
I meccanismi di caching dei browser non sono sufficienti a garantire la flessibilità necessaria agli sviluppatori di applicazioni dinamiche, cioè contenenti molto Javascript che cambia spesso per l’aggiunta continua di nuove funzionalità. Le applicazioni Web 2.0 (o più prosaicamente, più recenti) sono farcite di script e funzionalità lato client. Dopo un esame effettuato su alcune pagine di test con un plugin di Firefox che tiene traccia dei tempi di caricamento della pagine web e dei singoli componenti (immagini e script in primis), la cosa che si nota è che dovendo caricare diversi file Javascript il browser tenta una connessione TCP per ciascuno di essi per verificarne la consistenza con la copia memorizzata nella cache durante gli accessi precedenti. Qualche soluzione la si può tentare
- Gestire la scadenza dei file della directory degli script tramite il server web o un suo modulo, come pure di impostarla tramite un nostro modulo apposito (ma in questo caso si perderebbe la possibilità di pubblicare diverse modifiche in uno stretto intervallo temporale e la configurazione sarebbe più complicata)
- Unire tutti i piccoli file in uno solo
- Dividere i file statici su nomi di server diversi, in modo da poterli scaricare in parallelo, data la limitazione dei due collegamenti per sito di HTTP/1.1
La cache però non permette però allo sviluppatore di sostituire i file dell’applicativo quando vuole. Se infatti vi è la necessità di aggiornare gli script introducendo nuove funzionalità può darsi che il browser continui ad usare le vecchie versioni. Per essere sicuri che il browser ricarichi i file, possiamo appendere al nome del file un punto di domanda, trasformando l’accesso in una richiesta GET, ma a questo punto perdiamo ogni vantaggio di cache.
Unendo e compattando i file si obbligano gli sviluppatori ad usare due versioni diverse dei file di script generando difficoltà di debug, specie in fase di produzione, dove è spesso una necessità intervenire rapidamente.
Una soluzione che sembra più semplice e che toglie la gestione della cache dall’amministratore di sistema per rimetterla nelle mani dello sviluppatore potrebbe essere gestire in ogni elemento che contenga un link, un token di versione. Il browser potrebbe controllare la versione del sorgente senza un ulteriore accesso per ogni script referenziato poiché la versione viene ‘offerta’ direttamente dallo HTML. Quando lo sviluppatore varia uno o più file necessita solamente di aggiornare il token, cosa che può essere benissimo eseguita da un IDE (o uno script).
Forse i file Javascript che si tende ultimamente ad utilizzare sono troppi, ma la tendenza per chi vuole generare codice modulare, orientato agli oggetti, testabile e manutenibile è questa per tutti gli altri linguaggi, perché non lo deve essere per gli script della applicazioni web? In fondo per tornare al vecchio sistema basterebbe eliminare il token di versione.