{"id":364,"date":"2013-04-02T16:14:41","date_gmt":"2013-04-02T14:14:41","guid":{"rendered":"https:\/\/alistapart.com\/it\/article\/migliorare-ux-con-performance-front-end\/"},"modified":"2013-04-02T16:14:41","modified_gmt":"2013-04-02T14:14:41","slug":"migliorare-ux-con-performance-front-end","status":"publish","type":"article","link":"https:\/\/alistapart.com\/it\/article\/migliorare-ux-con-performance-front-end\/","title":{"rendered":"Migliorare la UX con la performance front-end"},"content":{"rendered":"<div class=\"paragrafo\">\n<p><img decoding=\"async\" src=\"http:\/\/alistapart.com\/it\/wp-content\/uploads\/sites\/2\/2013\/04\/sketch2221503.png\" border=\"0\" width=\"220\" style=\"float: left;\" \/>Immaginiamoci di essere ad un incrocio, in attesa che scatti il verde per attraversare la strada. Schiacciamo il pulsante per l&#8217;attraversamento pedonale e prendiamo in mano il telefono. Vogliamo fare una cosa: potremmo voler controllare l&#8217;email, aggiungere una voce alla nostra to-do list, o controllare Twitter. Abbiamo un tempo limitato per fare una di queste cose.<\/p>\n<p>Tale quantit\u00e0 di tempo \u00e8 quanto hanno i nostri utenti per portare a termine quello che vogliono fare sul nostro sito, ed \u00e8 importante.<\/p>\n<p>Secondo uno studio di Google, aggiungere mezzo secondo alla pagina dei risultati di una ricerca pu\u00f2 fare diminuire il traffico e le entrate dalla pubblicit\u00e0 del 20%. Nello <a href=\"http:\/\/www.websiteoptimization.com\/speed\/tweak\/psychology-web-performance\/\">stesso articolo in cui appare questa affermazione<\/a>, si dice che Amazon abbia scoperto che ogni 100 <em>millisecondi<\/em> aggiunti al tempo di caricamento fanno diminuire le vendite del 1%. Gli utenti si aspettano che le pagine si carichino in due secondi e, dopo tre secondi, fino al 40% delle persone <a href=\"http:\/\/www.gomez.com\/pdfs\/wp_why_web_performance_matters.pdf\">semplicemente abbandoner\u00e0 il sito<\/a>.<\/p>\n<p>Riuscite a tenere il passo? La risposta potrebbe essere &#8220;no&#8221; se state progettando siti pieni di contenuto, con molti elementi dinamici, con files JavaScript molto grandi e con grafica complessa.<\/p>\n<p>\u00c8 ora di rendere l&#8217;ottimizzazione della performance una parte fondamentale del modo in cui progettiamo, realizziamo e testiamo ogni singolo sito che creiamo, per tutti i device.<\/p>\n<\/div>\n<div class=\"paragrafo\">\n<h2>Progettare per la performance<\/h2>\n<p>La performance di un sito web comincia con il design. Pesate l&#8217;impatto delle scelte di design sulla velocit\u00e0 di una pagina rispetto al suo impatto rispetto al conversion rate del vostro sito. Vi servono davvero otto diverse sfumature di blue? Che valore aggiunge un&#8217;immagine di background larga 1000 px? Sostituire una sprite con un icon font aggiunge davvero pi\u00f9 peso alla pagina e rallenta il rendering oppure sar\u00e0 pi\u00f9 veloce che con l&#8217;immagine originale?<\/p>\n<p>Non tutte le decisioni di design favoriranno la performance. Ho scoperto che nonostante lo stile di un pulsante rallenti leggermente la velocit\u00e0 della pagina riesca a far aumentare le conversioni, quindi in questo caso vale la pena sacrificare leggermente la performance web.<\/p>\n<p>Tuttavia, a volte, vince la performance. Una volta avevo un redesign di una landing page che aggiungeva una significativa quantit\u00e0 di immagini alla pagina e non ero sicura se il risultato della performance avrebbe avuto un impatto negativo sulle conversioni, perci\u00f2 mostrai il redesign a un piccolo sotto-insieme di utenti in un <a href=\"article\/a-primer-on-a-b-testing\">test A\/B<\/a> per vedere che impatto avrebbe avuto. Il nuovo design ci metteva il doppio del tempo a caricare e notati subito un alto exit rate e un conversion rate pi\u00f9 basso, cos\u00ec tenni il design originale pi\u00f9 leggero. Va bene sbagliare perch\u00e9 ci fornisce un benchmark.<\/p>\n<p>In un altro esperimento, la homepage di <a href=\"http:\/\/dyn.com\">dyn.com<\/a> aveva una sezione di immagini thumbnail con 26 immagini a rotazione su 10 slot.<\/p>\n<div class=\"illustration full left\"><img decoding=\"async\" src=\"http:\/\/alistapart.com\/it\/wp-content\/uploads\/sites\/2\/2013\/04\/dyncomhomepage.jpg\" border=\"0\" width=\"100%\" \/><\/p>\n<p>La homepage di dyn.com.<\/p>\n<\/div>\n<p>Il mio collega dell&#8217;epoca aveva messo tutte e 26 le immagini in una sprite, la quale:<\/p>\n<ul>\n<li>aveva fatto crescere la dimensione totale della pagina di 60K per via delle aumentate dimensioni dei file CSS, JavaScript e dell&#8217;immagine modificati per ricreare questo effetto con la sprite<\/li>\n<li>aveva fatto diminuire il numero delle richieste del 21%<\/li>\n<li>aveva tagliato il tempo di caricamento totale dell&#8217;homepage di un&#8217;enorme 35%<\/li>\n<\/ul>\n<p>Questo prova che vale la pena sperimentare: non eravamo sicuri del suo successo o meno in termini di velocit\u00e0 della pagina, ma sentivamo che sarebbe stato utile imparare da un esperimento.<\/p>\n<\/div>\n<div class=\"paragrafo\">\n<h2>Programmare per la performance<\/h2>\n<p>Ripulite il vostro HTML e tutto il resto verr\u00e0 di conseguenza.<\/p>\n<p>Cominciate con il rinominare gli elementi non-semantici nel vostro HTML. Questo sar\u00e0 probabilmente il compito pi\u00f9 difficile, ma una volta che avrete cominciato a pensare al tema in termini di semantica come &#8220;nave&#8221; o &#8220;article&#8221; e meno in termini di design o di griglia, farete dei progressi notevoli. Spesso si arriva agli elementi con nomi non semantici perch\u00e9 si ha bisogno di pi\u00f9 peso nei selettori CSS e invece di pulire i nostri CSS e aggiungere la specificit\u00e0 da subito aggiungiamo degli ID e degli elementi non necessari al nostro HTML.<\/p>\n<p>Poi, pulite il CSS. Per primi, rimuovete i selettori non efficienti. In <a href=\"http:\/\/dyn.com\/how-we-got-dyndns-com-to-load-faster-and-how-you-can-learn-from-it\">uno studio fatto<\/a> per <a href=\"http:\/\/writegoodcode.com\">writegoodcode.com<\/a>, ho scoperto che aggiungere dei selettori inefficienti a un file CSS fa davvero aumentare il tempo di caricamento di una pagina del 5,5%. Selettori CSS pi\u00f9 efficienti saranno pi\u00f9 semplici da riprogettare e i loro stili saranno pi\u00f9 semplici da personalizzare in futuro dal momento che sono pi\u00f9 semplici da leggere nel proprio foglio di stile e hanno un significato semantico. Il codice riutilizzabile, modificabile, spesso va mano nella mano con una buona performance. In quel case study, ho risparmiato il 39% della dimensione del file CSS pulendo i file CSS.<\/p>\n<p>Dopodich\u00e9, concentratevi sulla cura del vostro HTML per guarirlo dalla <code>div<\/code>ite. Tipicamente, pi\u00f9 sar\u00e0 pulito il vostro markup, pi\u00f9 sar\u00e0 piccolo il vostro CSS e pi\u00f9 sar\u00e0 semplice riprogettarlo e modificarlo in futuro. Non solo fa risparmiare tempo di caricamento ma anche tempo di sviluppo.<\/p>\n<p>Per ultimo, concentratevi sulla creazione di codice riutilizzabile, che vi faccia risparmiare tempo e risulti in file CSS e HTML pi\u00f9 piccoli. Meno HTML e CSS saranno significativamente pi\u00f9 semplici da mantenere e riprogettare in futuro e dimensioni di pagina pi\u00f9 piccole avranno un impatto positivo sulla velocit\u00e0 della pagina.<\/p>\n<\/div>\n<div class=\"paragrafo\">\n<h2>Ottimizzare le richieste<\/h2>\n<p>Si parla di richieste quando il vostro browser deve andare a prendere qualcosa come un file o un record DNS. Pi\u00f9 sar\u00e0 pulito il vostro markup, meno richieste dovr\u00e0 fare il browser, il che porter\u00e0 i vostri utenti a dover aspettare di meno che il browser faccia queste richieste.<\/p>\n<p>Oltre al markup pulito, minimizzate le richieste JavaScript caricandolo solo quando \u00e8 assolutamente necessario. Non richiamate un file su ogni pagina se non ne avete bisogno su ogni pagina. Non caricate un file JavaScript in un design responsive se occorre solo per gli schermi pi\u00f9 grandi. Per esempio, <a href=\"http:\/\/www.zurb.com\/article\/883\/small-painful-buttons-why-social-media-bu\">sostituite gli script social con dei semplici link<\/a>. Potete anche caricare JavaScript in maniera asincrona, cosicch\u00e9 il JavaScript non bloccher\u00e0 la resa a video di alcun contenuto.<\/p>\n<p>Sebbene un design responsive solitamente implichi un maggior numero di CSS e di immagini (maggior peso della pagina), potete ancora ottenere dei tempi di caricamento pi\u00f9 rapidi per dimensioni di pagina pi\u00f9 grandi se si tagliano le richieste.<\/p>\n<\/div>\n<div class=\"paragrafo\">\n<h2>Ottimizzare le immagini<\/h2>\n<p>Risparmiate quante pi\u00f9 richieste per le immagini potete. Per prima cosa, concentratevi sulla <a href=\"article\/sprites\/\">creazione di sprite<\/a>. Nel mio studio per writegoodcode.com, ho scoperto che una sprite per le icone nell&#8217;esempio aveva tagliato il page load del 16,6%. Mi piace cominciare a pulire le immagini creando una sprite per i background che si ripetono. Potreste aver bisogno di crearne una per le ripetizioni verticali e una per quelle orizzontali.<\/p>\n<p>Poi, create una sprite trasparente per i background che non si ripetono. Questa includer\u00e0 cose come il logo e le icone. Man mano che migliorate, potrete anche usare tool come <a href=\"http:\/\/filamentgroup.com\/lab\/grunticon\">Grunticon<\/a>, che prende le icone SVG e le immagini di background e trova il modo migliore per distribuirle a seconda delle capacit\u00e0 del browser.<\/p>\n<p>Dopo aver rigenerato le immagini, fatele passare attraverso un optimizer come <a href=\"http:\/\/imageoptim.com\">ImageOptim<\/a>. In maniera simile, le immagini dimensionate per i retina display possono essere rese pi\u00f9 piccole con una <a href=\"http:\/\/blog.netvlies.nl\/design-interactie\/retina-revolution\/\">vasta compressione<\/a> che per\u00f2 non si nota nel risultato finale.<\/p>\n<p>Cercate ora di capire quali immagini potete sostituire con i gradienti CSS3. Questo non solo ridurr\u00e0 il tempo di caricamento della pagina, ma render\u00e0 anche infinitamente pi\u00f9 semplice modificare il sito in un secondo tempo, perch\u00e9 gli sviluppatori non dovranno recuperare i file originali per modificarli, rigenerarli e ri-ottimizzarli in futuro.<\/p>\n<p>Da ultimo, cercate di usare <a href=\"http:\/\/www.greywyvern.com\/code\/php\/binary2base64\">Base64 encode<\/a>, che vi permette di inserire un&#8217;immagine nel file CSS invece che di richiamarla usando un URL separato. Alla fine, appare cos\u00ec:<\/p>\n<pre><code>#nav li:after {\n\tcontent:url(data:image\/png;base64,\n         iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAI0lEQVQIW2P4\/\/8\/\n         w8yZM\/\/DMIjPAGPAMIiPWxCIMQQxzAQAoFpF7lGFr24AAAAASUVORK5CYII=);\n}<\/code><\/pre>\n<p>Le lettere e i numeri casuali si aggiungono a un piccolo cerchio che \u00e8 usato in molti posti all&#8217;interno di <a href=\"http:\/\/dyn.com\">dyn.com<\/a>. Fare l&#8217;embed delle immagini vi permette di risparmiare una richiesta per l&#8217;immagine ogni qualvolta la si voglia usare nel proprio design. Inserire le immagini usando questo metodo render\u00e0 pi\u00f9 grandi i vostri file CSS, quindi occorre testare il tempo di page load prima e dopo per essere sicuri che stiate facendo dei miglioramenti.<\/p>\n<\/div>\n<div class=\"paragrafo\">\n<h2>Misurare la performance<\/h2>\n<p>Adesso viene il bello: determinare se gli sforzi vengono ripagati.<\/p>\n<p>Sia <a href=\"https:\/\/developers.google.com\/speed\/pagespeed\/\">PageSpeed<\/a> di Google sia <a href=\"http:\/\/developer.yahoo.com\/yslow\/\">YSlow<\/a> di Yahoo! offrono dei suggerimenti su come migliorare il tempo di page load, inclusa l&#8217;identificazione di quali elementi bloccano il rendering della pagina e la dimensione dei vari componente della pagina come CSS o HTML.<\/p>\n<p>Vi raccomando anche l&#8217;estensione YSlow <a href=\"http:\/\/www.phpied.com\/3po\/\">3PO<\/a>, che controlla l&#8217;integrazione sul vostro sito di script di terze parti molto popolari come Twitter, Facebook e Google+. Il plugin vi d\u00e0 dei consigli su come ottimizzare ulteriormente i social script presenti sulla vostra pagina per migliorarne il tempo di caricamento.<\/p>\n<p><a href=\"http:\/\/WebPageTest.org\">WebPageTest.org<\/a> \u00e8 stato il mio benchmarking tool preferito fin da quanto ho cominciato a fare dei miglioramenti basandomi sui suggerimenti di PageSpeed e YSlow. D\u00e0 delle informazioni molto dettagliate sulle richieste, sulle dimensioni dei file, sul tempo e offre varie locations e browser in cui fare i propri test.<\/p>\n<p>Il benchmarking pu\u00f2 aiutarvi a risolvere i problemi man mano che progettate. Misurare la performance ed analizzare i risultati vi aiuta a velocizzare il design sia per i grandi schermi sia per quelli piccoli. Potete anche testare e fare il benchmark di tecniche come <a href=\"http:\/\/adactio.com\/journal\/5414\/\">il caricamento condizionale di immagini<\/a> man mano che si prende confidenza con lo sviluppo per la performance.<\/p>\n<\/div>\n<div class=\"paragrafo\">\n<h2>L&#8217;impatto della performance web<\/h2>\n<p>La performance web influenza gli utente e questo vuol dire che tutti dobbiamo comprenderla, misurarla e migliorarla. Tutte queste tecniche porteranno a un miglior tempo di caricamento della pagina, che crea un miglioramento significativo della user experience del proprio sito.<\/p>\n<p>Utenti pi\u00f9 felici implicano migliori conversion rate, sia che li misuriate in entrate, signup, returning visit o download. Con un tempo di page load veloce, le persone possono usare il vostro sito e portare a termine quello che vogliono in un tempo breve, anche se stanno solo aspettando il verde per l&#8217;attraversamento pedonale.<\/p>\n<p>Illustrazioni: {carlok}<\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Uno studio di Google afferma che aggiungere mezzo secondo alla pagina dei risultati di una ricerca pu\u00f2 far diminuire il traffico e le entrate pubblicitarie del 20%. Amazon ha scoperto che per ogni 100 millisecondi in pi\u00f9 sul tempo di caricamento, le vendite diminuiscono del 1%. Gli utenti si aspettano che le pagine si carichino in due secondi e dopo tre secondi il 40% di loro semplicemente se ne va. Il messaggio \u00e8 chiaro: dobbiamo fare in modo che l&#8217;ottimizzazione della performance sia una parte fondamentale del modo in cui progettiamo, realizziamo e testiamo ogni sito che creiamo, per ogni dispositivo. Progettare per la performance, misurare i risultati.<\/p>\n","protected":false},"author":818,"featured_media":7000692,"comment_status":"open","ping_status":"open","template":"","categories":[244,247,271,88,267],"tags":[],"coauthors":[337],"class_list":["post-364","article","type-article","status-publish","has-post-thumbnail","hentry","category-css","category-html","category-javascript","category-numero-71-2-aprile-2013","category-user-research"],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/alistapart.com\/it\/wp-json\/wp\/v2\/article\/364","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/alistapart.com\/it\/wp-json\/wp\/v2\/article"}],"about":[{"href":"https:\/\/alistapart.com\/it\/wp-json\/wp\/v2\/types\/article"}],"author":[{"embeddable":true,"href":"https:\/\/alistapart.com\/it\/wp-json\/wp\/v2\/users\/818"}],"replies":[{"embeddable":true,"href":"https:\/\/alistapart.com\/it\/wp-json\/wp\/v2\/comments?post=364"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/alistapart.com\/it\/wp-json\/wp\/v2\/media\/7000692"}],"wp:attachment":[{"href":"https:\/\/alistapart.com\/it\/wp-json\/wp\/v2\/media?parent=364"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/alistapart.com\/it\/wp-json\/wp\/v2\/categories?post=364"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/alistapart.com\/it\/wp-json\/wp\/v2\/tags?post=364"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/alistapart.com\/it\/wp-json\/wp\/v2\/coauthors?post=364"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}