Il motivo principale per cui non scrivo spesso sul blog in questi giorni non e' l'abitudine consolidata del bagno a mare ogni pomeriggio: a dire il vero questo aumenta la mia produttivita'. Il vero motivo e' che dopo aver realizzato la struttura principale del framework Ruby che utilizziamo assieme a Fabio, mi sono messo a
testarlo, e in realta' sono finito per scrivere una applicazione, che siccome sembra anche utile, presto sara' online ad uso e consumo di chi volesse divertirsi: si tratta di un programma di todo list che pone l'accento sulla condivisione delle cose da fare con amici, colleghi, ed altre persone con cui si portano avanti delle attivita' assieme.
Oggi notavo che nonostante i miei sforzi di tuning, il codice HTML veramente semplice e tutto il resto, in realta' l'applicazione non era cosi' veloce come pensavo dovesse essere: ho scelto di utilizzare javascript/ajax al minimo (funziona anche disabilitandolo in realta'), per cui il tempo di refresh e' vitale.
E' bastato controllare i log del web server mentre provavo ad usare l'applicazione per capire qual'era il problema. Ad ogni pageview per qualche ragione l'applicazione stava caricando il javascript, ogni volta. Forse perche' il javascript e' in realta' servito al browser tramite un file PHP che fa l'include di tutti i file javascript reali (l'applicazione e' scritta in Ruby, PHP viene usato come una sorta di server side includes per il javascript).
Insomma il web server non sparava i giusti header per permettere il caching, e questo distruggeva completamente le prestazioni, dal mio punto di vista: il refresh era sempre sotto il secondo, ma non una scheggia come avrebbe dovuto essere.
Per fortuna e' bastato aggiungere questo:
header("Content-type: text/javascript");
header("Cache-Control: max-age=200000000");
header("Expires: Fri, 14 Jul 2017 22:26:24 GMT");
E ora e' una scheggia, proprio come me lo immaginavo :)