Recensione di High Performance Web Sites

High Performance Web Sites Nella botte piccola c’è il vino buono, recita un vecchio proverbio che calza alla perfezione a questo libro, all’apparenza piccolo ma estremamente utile per tutti coloro che lavorano nell’ambito web.

Il problema delle prestazioni di un sito web è tutt’altro che banale, nonostante oggi gli ISP facciano a gara a fornire contratti ADSL dalle prestazioni sempre maggiori e l’hardware medio, sia lato utente finale sia lato server, abbia raggiunto prestazioni di altissimo livello. Tuttavia, la tecnologia evolve anche dal lato software ed è sempre fondamentale minimizzare il tempo di caricamento di una pagina web sia per aumentare il feedback di risposta per l’utente (un sito web estremamente lento nel caricamento alla lunga fa fuggire tutti) sia per ridurre il carico dei server e l’occupazione di banda. E troppo spesso si ignora che i problemi nascono proprio da un’errata progettazione del front-end dell’applicazione web. Se sul lato server, infatti, oggi esiste un arsenale di tecniche molto collaudate (cache, bus in fibra ottica, replicazione, load balancing, ecc) che consentono di ridurre il tempo di generazione di una pagina web, sul fronte web il dare eccessivamente per scontato bande trasmissive sempre maggiori ha portato a dimenticare o sottovalutare aspetti che costituiscono il reale collo di bottiglia per l’utente.

Steve Souders ha raccolto nel suo High Performance Web Sites tutta l’esperienza accumulata in Yahoo!, nell’incrementare le performance del front-end della piattaforma web, e condensandola in 14 regole che formano un libro asciutto, che non aggiunge nulla di superfluo ma che fornisce informazioni utilissime e a tratti illuminanti, spaziando da problematiche relative all’uso troppo scontato del protocollo HTTP e finendo con aspetti connessi con i meccanismi di rendering dei browser e l’articolazione in blocchi di una pagina HTML. Il tutto condito da dati oggettivi e analisi interessanti di particolari siti web campione.

Il libro si articola in 15 capitoli, più un paio di appendici introduttive che forniscono tutto il background necessario alla comprensione di alcuni aspetti trattati nel corso del libro, come in particolar modo l’appendice dedicata al protocollo HTTP.

  • Il capitolo 1, forse quello che costituisce il cardine di questo libro, tratta di aspetti connessi con la minimizzazione del fenomeno più devastante dal punto di vista delle prestazioni: l’eccesso di chiamate HTTP. Troppo spesso, infatti, fattori come la modularizzazione dell’applicazione e l’utilizzo di codice CSS e JavaScript implicano che il browser deve effettuare diverse chiamate al server per ottenere dati, e sono proprio queste chiamate a costituire il maggior collo di bottiglia in termini assoluti.
  • Il capitolo 2 analizza l’utilizzo delle Content Delivery Network come meccanismo sia per minimizzare l’impatto della “distanza geografica” tra l’utente finale e l’azienda sia migliorare il bilanciamento di carico dei server. Questo capitolo si rivolge in particolar modo a coloro che sviluppano applicazioni web che erogano servizi a livello mondiale, e che possono avvantaggiarsi di aziende sparse nel globo che offrono servizi di mirroring.
  • I capitoli 3 e 4 trattano il caching dei contenuti, aspetto oggi dato molto per scontato ma che implica un’attenta analisi del ciclo di generazione dei contenuti multimediali, come ad esempio le immagini. Inoltre, è trattata la compressione dei file HTML, sfruttando moduli server side come mod_gzip e mod_deflate di Apache per compiere tale operazione.
  • I capitoli 5-8 trattano invece un problema tutt’altro che banale, ossia come i browser interagiscono con il codice CSS e JavaScript e soprattutto come il loro utilizzo può compromettere le prestazioni in fase di rendering della pagina. L’autore mostra ampia conoscenza dell’argomento, mostrando esempi concreti di come una composizione sbagliata di codice HTML, CSS e JavaScript possa ritardare di molto l’interazione con l’utente, illustrando tecniche e soluzioni a riguardo.
  • Il capitolo 9 affronta un problema analogo a quello della riduzione di chiamate HTTP: la riduzione dei DNS lookups. Troppo spesso, infatti, l’applicazione web è costruita attraverso la decomposizione in unità funzionali che vengono distribuite su più macchine a cui sono associati nomi a dominio differenti (a volte va detto che sembra proprio una moda per giocare a fare “i grandi”, quando si vedono portali web fare decine di chiamate a sottodomini per caricare magari solo un’immagine), che provocano altrettante chiamate al DNS per la loro risoluzione con ovvie conseguenze sull’interazione con l’utente.
  • Il capitolo 10 tratta del processo di minimizzazione del codice JavaScript, con l’uso di tool come minify, e delle tecniche di offuscamento, ossia ridurre ai minimi termini la lunghezza degli identificativi.
  • Il capitolo 11 tratta dell’uso smodato di redirect, che può influenzare pesantemente le prestazioni perché costringe il browser ad effettuare nuove chiamate HTTP e magari nuove interrogazioni al DNS.
  • I capitoli 12-14 tornano sull’argomento caching, proponendo soluzioni per il caching di codice JavaScript in particolare nello sviluppo di applicazioni AJAX, che se da un lato nascono per aumentare l’interazione con l’utente, dall’altro possono compromettere le performance generali fino a rendere l’applicazione web inutilizzabile.
  • Infine, nel capitolo 15 l’autore analizza approfonditamente i 10 siti web usati come esempio nel libro, presentando tool per l’analisi delle performance e in particolar modo il tool YSlow, da lui stesso realizzato per Yahoo, estremamente utile nel valutare come un’applicazione web rispetta le 14 regole (e non solo) che l’autore presenta.

A voler essere pignoli va comunque detto che il target di lettore che l’autore si è posto è quello di sviluppatori che si trovano ad amministrare portali con traffico estremamente alto. Ad esempio, i 10 siti web presi a modello lungo tutto l’arco del libro sono probabilmente i principali siti web mondiali, e che hanno milioni di accessi al giorno. Così come l’utilizzo di una content delivery network difficilmente riguarderà la maggior parte dei lettori. Tuttavia, io sono convinto che l’applicazione di almeno il 70% delle regole presentate sia alla portata di tutti, con immediati benefici soprattutto per l’utente finale.

Che dire: non posso fare altro che suggerire a tutti la lettura di questo libro e segnalarvi che l’autore, di recente entrato a far parte di Google, ha annunciato una seconda parte per gli inizi del 2009 in cui tratterà nuovi argomenti.

Comments

  1. Tipico libro destinato ad una fetta molto esigua di professionals, che però può dare molto soddisfazione anche a chi si trova alle prese con problemi meno ingenti e più piccoli.

    Entra diritto nella To-Read List.. 😀

  2. Paolo De Dionigi says:

    In effetti il succo di queste informazioni si trova già in Yahoo, probabilmente in questo libro è tutto più ‘a portata di mano’ e magari con un maggior numero di esempi, soluzioni e casi reali.

    E’ vero che alcune delle pratiche descritte interesseranno ben pochi lettori, ma sicuramente come dice Carmine la maggioranza porteranno indubbi benefici a chiunque.

    Magari non faremo un’unica sprite image per tutta la grafica del layout dei nostri siti, ma in alcuni casi anche questa tecnica ‘avanzata’ risulta utile e non troppo invasiva.

    L’unica (beh una delle…) cosa che non ho ancora capito / trovato è come ‘valutare’ il tempo di latenza delle richieste HTTP. Alcuni parlano di 0.2 s a richiesta ma sarà vero e su per giù sempre così? Mi pare un parametro fondamentale per capire se ammazzarsi per eliminare ad es. altre 5 richieste oppure no.

  3. Ho acquistato questo libro circa due mesi fa e, da allora, presto molta più attenzione all’ottimizzazione non solo dei siti che realizzo interamente (dal frontend al backend), ma anche durante la produzione soli templates xhtml che andranno dinamicizzati successivamente.

    Sicuramente sono suggerimenti che, usati con criterio, apportano una qualità maggiore (tangibile in termini di tempi ridotti di caricamento) al proprio lavoro. 🙂

  4. Porto un piccolo contributo alla discussione per capire come le regole contenute in questo libro andrebbero sempre applicate, a prescindere da fattori tecnologici che apparentemente non ne giustificano il costo.
    Mi trovo in Albania per un progetto che sto seguendo, e questo per l’Italia è un mercato fondamentale e molto vasto. Qui, purtroppo, difficilmente si riescono a trovare connessioni veloci, ed ho potuto verificare che sarà necessario applicare diverse delle tecniche presenti in questo libro per snellire l’accesso ai siti web del progetto. Molti dei più diffusi portali italiani richiedono tempi di caricamento biblici, scoraggiando non poco le voglie/possibilità di investimento sul nostro mercato.

  5. Paolo De Dionigi says:

    http://farhadi.ir/works/smartoptimizer

    Andate, scaricate, installate, controllate i report di Yslow, navigate un po’ nel vs sito.

    Tempo totale:

    90 secondi per leggere di cosa si tratta
    1 secondo per scaricarlo
    20 secondi per averlo funzionante sul vostro sito
    180 secondi per controllare i report di Yslow e navigare un po’ nel vs sito
    5 minuti prima di ricordarsi che è il caso di chiudere la bocca (rimasta aperta per lo stupore, soprattutto se il vs sito non seguiva nessuna delle regole di cui si parla ).

    In effetti per avere i risultati migliori qualche intervento va fatto (tipo gzippare l’html, comprimere i js e concatenare i js e i css (o modificarne l’importazione, in modo che lo faccia lo script)), comunque è ugualmente uno spettacolo (nonostante sia una beta…)

Policy per i commenti: Apprezzo moltissimo i vostri commenti, critiche incluse. Per evitare spam e troll, e far rimanere il discorso civile, i commenti sono moderati e prontamente approvati poco dopo il loro invio.