 
 
 <?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>upCreative &#187; browser</title>
	<atom:link href="https://www.upcreative.net/tag/browser/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.upcreative.net</link>
	<description>Web Design, grafica,  web application e content web marketing</description>
	<lastBuildDate>Wed, 10 Apr 2019 12:53:28 +0000</lastBuildDate>
	<language>it-IT</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.1.41</generator>
	<item>
		<title>Performance CSS3: consigli per ottimizzare le animazioni</title>
		<link>https://www.upcreative.net/performance-css3-consigli-per-ottimizzare-le-animazioni/</link>
		<comments>https://www.upcreative.net/performance-css3-consigli-per-ottimizzare-le-animazioni/#comments</comments>
		<pubDate>Thu, 21 Nov 2013 21:43:20 +0000</pubDate>
		<dc:creator><![CDATA[upcreative]]></dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Creare applicazioni javascript]]></category>
		<category><![CDATA[Web Apps]]></category>
		<category><![CDATA[Web Design]]></category>
		<category><![CDATA[backbone]]></category>
		<category><![CDATA[browser]]></category>
		<category><![CDATA[css3]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[web app]]></category>

		<guid isPermaLink="false">http://www.upcreative.net/?p=2511</guid>
		<description><![CDATA[<p>The post <a rel="nofollow" href="https://www.upcreative.net/performance-css3-consigli-per-ottimizzare-le-animazioni/">Performance CSS3: consigli per ottimizzare le animazioni</a> appeared first on <a rel="nofollow" href="https://www.upcreative.net">upCreative</a>.</p>
]]></description>
				<content:encoded><![CDATA[<div class="l-submain"><div class="l-submain-h g-html i-cf"><div class="g-cols"><div class="full-width">
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<p>Da sempre il web designer/developer deve sostenere la famosa dura lotta della <strong>compatibilità browser,</strong> con un occhio di riguardo soprattutto per Internet Explorer, ed in particolar modo per l&#8217;utilizzo delle <strong>numerose funzionalità CSS3,</strong> che contribuiscono ad incrementare la qualità e la <strong>user experience</strong> di ogni interfaccia.</p>
<p>Negli ultimi tempi l&#8217;interpretazione di animazioni, transizioni e altre proprietà CSS3 su tutti i browser sembra una meta sempre meno lontana, per cui molti <strong>front-end developer</strong>, compreso il sottoscritto, cercano di impiegarli il più possibile all&#8217;interno dei loro progetti.</p>
<p>Tuttavia nell&#8217;utilizzare funzionalità del genere bisogna fare attenzione alle <strong>performance CSS3</strong> del dispositivo/browser su cui dovranno &#8220;girare&#8221;, in particolare se si tratta di quelli mobili, molto meno potenti rispetto ai desktop.</p>
<h2>Un esperienza a riguardo</h2>
<p>Recentemente ho sviluppato e pubblicato nell&#8217;App Store <strong><a title="Tint - Applicazione Meteo sviluppata interamente in HTML5 e CSS3" href="http://www.upcreative.net/tint-weather-app/">Tint</a></strong>, un&#8217;applicazione realizzata interamente con <strong>markup HTML5</strong>, animazioni <strong>CSS3</strong> e l&#8217;ausilio di <strong><a title="Backbone framework per realizzare applicazioni Javascript in HTML5 e CSS3" href="http://www.upcreative.net/mvc-backbone-per-html5-css3-javascript-web-app/">Backbone</a></strong> (che approfondirò in un articolo futuro), riscuotendo anche un notevole successo in fatto di download.</p>

		</div> 
	</div> <div class="g-cols"><div class="one-half">
	<div class="wpb_single_image wpb_content_element animate_afl align_center">
		<div class="wpb_wrapper">
			
			<img width="365" height="276" src="http://www.upcreative.net/wp-content/uploads/2013/11/Tint-Weather-App-available-on-app-store.jpg" class="attachment-full" alt="Tint-Weather-App-available-on-app-store" />
		</div> 
	</div> </div><div class="one-half">
	<div class="wpb_single_image wpb_content_element animate_afr align_center">
		<div class="wpb_wrapper">
			
			<img width="649" height="431" src="http://www.upcreative.net/wp-content/uploads/2013/11/multiple-locations-view.jpg" class="attachment-full" alt="multiple-locations-view" />
		</div> 
	</div> </div></div>
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<p>Ma perché ho introdotto Tint?</p>
<p>In questo articolo ti voglio parlare di <strong>una lezione importante nell&#8217;ottimizzare performance CSS3 di animazioni, transizioni ed effetti </strong>applicati ad elementi DOM, che ho personalmente imparato durante la mia esperienza nello sviluppo di Tint, la quale ha contribuito ad incrementarne notevolmente le prestazioni.</p>
<p>Nonostante sia da molto tempo che mi occupo di interfacce web, questa è stata la prima volta che ho avuto l&#8217;esigenza di ottimizzare al massimo le prestazioni in dispositivi che, per caratteristiche hardware, riescono difficilmente a supportare certi tipi di animazioni e transizioni.</p>
<p>Ho dovuto pertanto cambiare il modo di realizzare alcuni effetti che su smartphone si arrestavano o mostravano uno sfarfallio (quanto lo odio!), mentre per desktop non davano nessun problema.</p>
<h2>Punto focale: il rendering</h2>
<p>Quando parliamo di <strong>prestazioni su un browser</strong>, dobbiamo pensare in particolare al <strong>rendering</strong> e su come esso rappresenti la ragione principale per le scarse prestazioni derivanti dai nostri stili CSS3.</p>
<p>Mi spiego meglio:</p>
<p>i vari step che compongono il processo in base al quale il browser passa dalla &#8220;lettura&#8221; del DOM al &#8220;disegno&#8221; sullo schermo, si possono riassumere in 3 fasi principali, nell&#8217;ordine:</p>
<ol>
<li><strong>Calcolo dei stili</strong>: in questa prima parte vengono calcolate e definite tutte quelle proprietà che definiscono la morfologia dell&#8217;elemento, come width, height, margin, padding, font-size, top, left ecc.</li>
<li><strong>Disegno dell&#8217;elemento</strong>: è il momento in cui l&#8217;elemento viene &#8220;arricchito&#8221; con proprietà come ombra, background, outline, border ecc..</li>
<li><strong>Creazione dei layers</strong>: qui vengono creati i layer dei &#8220;disegni&#8221; appena creati, che si differenziano in due categorie: quelli per il render, i quali definiscono la struttura ad albero di elementi e sotto-elementi, e quelli grafici, che vengono creati ogni volta che la GPU viene chiamata in causa. Possiamo dire quindi che quest&#8217;ultimo processo interessa proprietà CSS3 come translate, transform, scale, rotate ecc..</li>
</ol>
<p>La cosa più importante su cui soffermarsi è il fatto che queste tre operazioni vengono eseguite dal browser in coda. Per cui se ad un elemento DOM già disegnato sullo schermo, andiamo a modificare proprietà classificate nel primo punto, poi dovranno essere rieseguiti anche gli altri due step.</p>
<p>Se invece modifichiamo attributi appartenenti al secondo step, il browser si preoccuperà di eseguire anche il terzo step.</p>
<p>Infine, modificando proprietà classificate nell&#8217;ultimo step, il lavoro del browser sarà alleggerito notevolmente perché non dovrà rieseguire gli step precedenti.</p>
<p>Questo discorso vale in linea generale per tutti i tipi di browser, a parte il nostro solito amico/nemico Internet Explorer, del quale non abbiamo molte informazioni sul processo di rendering (confidiamo nelle future release).</p>
<h3>Tutto questo per dire cosa?</h3>
<p>Beh, se ho esposto bene il funzionamento di rendering, sarà facile darsi una risposta:</p>
<blockquote><p><strong>al fine ottimizzare al massimo le prestazioni di un&#8217;animazione bisogna fare in modo che il browser prenda la strada più corta per realizzarla</strong>.</p></blockquote>
<p>Faccio un esempio banale.</p>
<p>Se dobbiamo spostare una <em>div</em> dalla parte superiore del documento a quella inferiore in modo animato, invece di applicare l&#8217;animazione all&#8217;attributo <em>top</em> o <em>bottom, </em>che costringerebbe il browser a ripetere tutte e 3 le fasi del processo per ogni singolo frame dell&#8217;animazione, la applicheremo alla proprietà <em>transform: translate</em> ( o <em>transform: translate3d</em>) le quali interesseranno solo l&#8217;ultimo dei 3 step.</p>
<p>In questo modo <strong>aumenteremo in modo considerevole la fluidità degli effetti dei nostri progetti</strong>.</p>

		</div> 
	</div> <div class="g-cols"><div class="one-half">
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<h4>Codice poco performante</h4>

		</div> 
	</div> </div><div class="one-half">
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<h4>Codice performante</h4>

		</div> 
	</div> </div></div><div class="g-cols"><div class="one-half">
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<pre class="crayon-plain-tag">div#quadrato{
    position:absolute;
    top:100px;
    left:100px;
    width:100px;
    height: 100px;
    background:red;

   /* definiamo la transizione su tutte le proprietà */
    -webkit-transition: all .3s ease;
       -moz-transition: all .3s ease;
        -ms-transition: all .3s ease;
         -o-transition: all .3s ease;
            transition: all .3s ease;
}
/*classe per l'animazione*/
div#quadrato.animato{
    top:300px;
}</pre>

		</div> 
	</div> </div><div class="one-half">
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<pre class="crayon-plain-tag">div#quadrato{
    position:absolute;
    top:100px;
    left:100px;
    width:100px;
    height: 100px;
    background:red;

   /* definiamo la transizione su tutte le proprietà */
    -webkit-transition: all .3s ease;
       -moz-transition: all .3s ease;
        -ms-transition: all .3s ease;
         -o-transition: all .3s ease;
            transition: all .3s ease;
}
/*classe per l'animazione*/
div#quadrato.animato{
    -webkit-transform: translateY(-200px);
       -moz-transform: translateY(-200px);
        -ms-transform: translateY(-200px);
         -o-transform: translateY(-200px);    
            transform: translateY(-200px);
}</pre>

		</div> 
	</div> </div></div>
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<p>Dall&#8217;esempio possiamo vedere due modi diversi di realizzare la stessa animazione, con performance CSS3 completamente differenti.</p>
<p>Di seguito elenco le proprietà per ognuno dei tre (macro) step.</p>

		</div> 
	</div> </div></div><div class="g-cols"><div class="full-width">
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<h3>Step 1: calcolo degli stili</h3>

		</div> 
	</div> <div class="g-cols"><div class="one-half">
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<ul>
<li>border</li>
<li>border-width</li>
<li>display</li>
<li>font-size</li>
<li>font-weight</li>
<li>font-famliy</li>
<li>text-align</li>
<li>overflow</li>
<li>overflow-y</li>
<li>white-space</li>
<li>clear</li>
<li>line-height</li>
</ul>

		</div> 
	</div> </div><div class="one-half">
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<ul>
<li>width</li>
<li>height</li>
<li>margin</li>
<li>padding</li>
<li>top</li>
<li>left</li>
<li>bottom</li>
<li>right</li>
<li>position</li>
<li>overflow</li>
<li>vertical-align</li>
<li>min-height</li>
</ul>

		</div> 
	</div> </div></div>
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<h3>Step 2: disegno dell&#8217;elemento</h3>

		</div> 
	</div> <div class="g-cols"><div class="one-half">
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<ul>
<li>background</li>
<li>background-image</li>
<li>background-position</li>
<li>background-repeat</li>
<li>background-size</li>
<li>border-radius</li>
<li>border-style</li>
<li>text-decoration</li>
</ul>

		</div> 
	</div> </div><div class="one-half">
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<ul>
<li>outline</li>
<li>outline-color</li>
<li>outline-style</li>
<li>outline-width</li>
<li>box-shadow</li>
<li>color</li>
<li>visibility</li>
</ul>

		</div> 
	</div> </div></div>
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<h3>Step 3: creazione dei layers</h3>

		</div> 
	</div> <div class="g-cols"><div class="full-width">
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<p>Tutte le proprietà <em>transform</em>, come per esempio <em>translate, matrix, scale, rotate, skew e perspective.</em></p>

		</div> 
	</div> </div></div></div></div><div class="g-cols"><div class="full-width">
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<h2>Conclusioni</h2>
<p>Una volta preso in considerazione questo importante discorso, <strong>la fluidità delle animazioni e transizioni applicate ai vari elementi della mia app Tint è aumentata in modo considerevole</strong>, avvicinandosi sempre di più a quella di applicazioni native (se vuoi vedere il risultato l&#8217;<a title="Tint HTML5 app su App Store" href="https://itunes.apple.com/us/app/tint-weather/id742161441">app è scaricabile nell&#8217;app store</a>).</p>
<p>Spero quindi che anche tu applicherai questo importantissimo concetto nel tuo prossimo lavoro.</p>
<p>Buon divertimento!</p>

		</div> 
	</div> <div class="g-hr">
						<span class="g-hr-h">
							<i class="fa fa-star"></i>
						</span>
					</div><div class="g-cols"><div class="one-half">
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<div>Hey! Sto scrivendo un e-book su come aumentare le performance e la fluidità per le tue HTML mobile app! Segui i consigli e le tecniche di cui mi sono servito per creare le mie applicazioni (come <a title="Le mie applicazioni HTML5" href="http://www.upcreative.net/html5-mobile-apps/">Tint, Dieta SI o NO?</a>).</div>
<div>Iscriviti alla newsletter per sapere quando sarà pronto!</div>

		</div> 
	</div> 
	<div class="wpb_single_image wpb_content_element align_center">
		<div class="wpb_wrapper">
			
			<img width="563" height="418" src="http://www.upcreative.net/wp-content/uploads/2013/11/HTML-mobile-accelerato-ebook-cover1.png" class="attachment-full" alt="HTML-mobile-accelerato-ebook-cover" />
		</div> 
	</div> </div><div class="one-half">
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<h4 style="text-align: center;"><strong>HTML Mobile Accelerato (E-book)</strong></h4>
<p style="text-align: center;">Lascia la tua email per ricevere aggiornamenti e sapere quando sarà disponibile</p>
<div style="text-align: center;"><div class="widget_wysija_cont shortcode_wysija"><div id="msg-form-wysija-shortcode6ab317e765ba8-4" class="wysija-msg ajax"></div><form id="form-wysija-shortcode6ab317e765ba8-4" method="post" action="#wysija" class="widget_wysija shortcode_wysija">
<p class="wysija-paragraph">
    
    
    	<input type="text" name="wysija[user][email]" class="wysija-input validate[required,custom[email]]" title="Inserisci la tua mail" placeholder="Inserisci la tua mail" value="" />
    
    
    
    <span class="abs-req">
        <input type="text" name="wysija[user][abs][email]" class="wysija-input validated[abs][email]" value="" />
    </span>
    
</p>
<input class="wysija-submit wysija-submit-field" type="submit" value="Tienimi aggiornato/a" />

    <input type="hidden" name="form_id" value="4" />
    <input type="hidden" name="action" value="save" />
    <input type="hidden" name="controller" value="subscribers" />
    <input type="hidden" value="1" name="wysija-page" />

    
        <input type="hidden" name="wysija[user_list][list_ids]" value="4,1" />
    
 </form></div></div>
<div style="text-align: center;"></div>
<div style="text-align: center;"><a title="E-book HTML5 Mobile Accelerato" href="http://www.upcreative.net/html-mobile-accelerato/">Clicca qui per avere maggiori informazioni</a></div>

		</div> 
	</div> </div></div></div></div>
</div></div><p>The post <a rel="nofollow" href="https://www.upcreative.net/performance-css3-consigli-per-ottimizzare-le-animazioni/">Performance CSS3: consigli per ottimizzare le animazioni</a> appeared first on <a rel="nofollow" href="https://www.upcreative.net">upCreative</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://www.upcreative.net/performance-css3-consigli-per-ottimizzare-le-animazioni/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>
