 
 
 <?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; performance</title>
	<atom:link href="https://www.upcreative.net/tag/performance/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>Le 6 migliori tecniche per aumentare le performance di una HTML5 Mobile App</title>
		<link>https://www.upcreative.net/6-migliori-tecniche-per-le-performance-di-html5-mobile-app/</link>
		<comments>https://www.upcreative.net/6-migliori-tecniche-per-le-performance-di-html5-mobile-app/#comments</comments>
		<pubDate>Thu, 20 Feb 2014 09:30:44 +0000</pubDate>
		<dc:creator><![CDATA[upcreative]]></dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Creare applicazioni javascript]]></category>
		<category><![CDATA[Risorse]]></category>
		<category><![CDATA[Web Apps]]></category>
		<category><![CDATA[css3]]></category>
		<category><![CDATA[HTML Mobile App]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[performance]]></category>

		<guid isPermaLink="false">http://www.upcreative.net/?p=3304</guid>
		<description><![CDATA[<p>La realizzazione di HTML5 Mobile App (ibride e non) permette di distribuire un singolo prodotto su diverse piattaforme, e renderlo accessibile per più sistemi operativi (iOS, Android e Windows Phone). Tuttavia molti si imbattono nel problema delle performance. In questo articolo ti mostro 6 utili tecniche per incrementare notevolmente le performance delle tue applicazioni mobile.</p>
<p>The post <a rel="nofollow" href="https://www.upcreative.net/6-migliori-tecniche-per-le-performance-di-html5-mobile-app/">Le 6 migliori tecniche per aumentare le performance di una HTML5 Mobile App</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">
			Nello sviluppo di una <strong>HTML5 mobile app</strong> le <strong>performance</strong> dell&#8217;interfaccia, dei suoi componenti, e delle <strong>animazioni CSS3</strong> ad essi legate è un fattore che può fare la differenza nel risultato finale del prodotto, determinandone la qualità ed il relativo successo.</p>
<p>Per realizzare una <em>user-experience</em> piacevole è necessario fare in modo che l&#8217;applicazione sia reattiva, presenti animazioni prive di scatti o salti di frame, e che generi il <strong>markup HTML di ogni schermata</strong> nel minor tempo possibile.</p>
<p><em>Forse ti potrebbero interessare gli articoli sulle performance e prestazioni di animazioni CSS3 per le HTML5 Mobile App pubblicati su <a title="upCreative.net - Web design Mobile App e Content Marketing" href="http://www.upcreative.net">upCreative.net</a>:</em></p>
<ul>
<li><em><a title="Performance CSS3: consigli per ottimizzare le animazioni" href="http://www.upcreative.net/performance-css3-consigli-per-ottimizzare-le-animazioni/">Performance CSS3: consigli per ottimizzare le animazioni</a></em></li>
<li><em><a title="Web e Mobile app fluide con layer e hardware acceleration" href="http://www.upcreative.net/web-e-mobile-app-fluide-con-layer-e-hardware-acceleration/">Web e Mobile app fluide con layer e hardware acceleration</a></em></li>
</ul>
<p><em>Oppure questi articoli che ho scritto per <a title="YourInspirationWeb.com" href="http://www.yourinspirationweb.com">YourInspirationWeb.com</a>:</em></p>
<ul>
<li><em><a title="HTML5 Mobile app: transizioni e animazioni CSS3 - parte 1" href="http://www.yourinspirationweb.com/2014/01/09/html5-mobile-app-transizioni-ed-animazioni-css3-parte1/">HTML5 Mobile app: transizioni e animazioni CSS3 &#8211; parte 1</a></em></li>
<li><em><a title="HTML5 Mobile app: transizioni e animazioni CSS3 - parte 2" href="http://www.yourinspirationweb.com/2014/01/24/html5-mobile-app-transizioni-e-animazioni-css3-parte-2/">HTML5 Mobile app: transizioni e animazioni CSS3 &#8211; parte 2</a></em></li>
</ul>
<p>Ma come è possibile raggiungere tali obiettivi?</p>
<p>In questo articolo voglio condividere con te 6 consigli e tecniche che ho imparato durante le mie esperienze nella realizzazione di numerose HTML5 Mobile App, tra cui due progetti personali, <a title="Tint e Dieta SI o NO? - HTML5 Mobile App realizzate con CSS3 e Javascript" href="http://www.upcreative.net/html5-mobile-apps/"><strong>Tint e Dieta SI o NO?</strong></a>.</p>
<p style="text-align: center;"><a ref="magnificPopup" href="http://www.upcreative.net/wp-content/uploads/2014/02/Html5-mobile-app-6-teniche-per-le-performance.jpg"><img class="size-full wp-image-3333 aligncenter" alt="Html5-mobile-app-6-teniche-per-le-performance" src="http://www.upcreative.net/wp-content/uploads/2014/02/Html5-mobile-app-6-teniche-per-le-performance.jpg" width="690" height="400" /></a></p>
<hr />
<p><em>Le 6 migliori tecniche per aumentare le performance di una #HTML5 #MobileApp #webdesign</em><br /><a href='https://twitter.com/share?text=Le+6+migliori+tecniche+per+aumentare+le+performance+di+una+%23HTML5+%23MobileApp+%23webdesign&#038;via=upCreativeIta&#038;related=upCreativeIta&#038;url=https://www.upcreative.net/6-migliori-tecniche-per-le-performance-di-html5-mobile-app/' target='_blank'>Click To Tweet</a></p>
<hr />
		</div> 
	</div> <div class="g-cols color_alternate w-actionbox"><div class="full-width">
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<h5>Crea la tua mobile app in HTML, CSS3 e Javascript</h5>
<p>Utilizzando queste tecniche insieme a molte altre, ho realizzato più di 10 mobile app in HTML, CSS3 e Javascript. Se anche tu vuoi realizzare la tua applicazione in HTML, CSS e javascript da distribuire nei vari store, forse potrebbe interessarti il mio e-book <strong><a title="HTML Mobile Accelerato - Come creare una mobile app in HTML, CSS e Javacript" href="http://www.upcreative.net/html-mobile-accelerato/">HTML Mobile Accelerato</a>.</strong>
		</div> 
	</div> 
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			<div class="widget_wysija_cont shortcode_wysija"><div id="msg-form-wysija-shortcode6ab0e1027ae61-4" class="wysija-msg ajax"></div><form id="form-wysija-shortcode6ab0e1027ae61-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> </div></div><div class="g-hr size_small">
						<span class="g-hr-h">
							<i class="fa fa-star"></i>
						</span>
					</div>
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			<span style="font-size: 2em; line-height: 1.2em;">1. Non generare (mai) il tuo markup HTML5 sul server</span></p>
<p>Molti mi chiedono come implementare il codice (php, asp, asp.net ecc.)  per la generazione dinamica del markup HTML5 dell&#8217;interfaccia sul server; tuttavia proprio il fatto che il markup venga generato <em>lato-server</em> rappresenta un&#8217;approccio sbagliato.</p>
<p>Il motivo? <strong>Servirsi di codice <em>lato-server</em> per generare il proprio markup è chiaro un fattore di lentezza</strong>.</p>
<p>Perché effettuare una chiamata remota per ottenere dei tipi di dati (come il markup) che possono essere benissimo inclusi nei file dell&#8217;applicazione?</p>
<p>Le uniche chiamate ajax che dovresti effettuare sono quelle il cui scopo è ottenere informazioni (in <em>XML</em>, <em>json</em> ecc) o provvedere al salvataggio di quelle ottenute dall&#8217;applicazione.</p>
<p>Per generare del markup  direttamente dall&#8217;applicazione in base alle informazioni ottenute dal <em>server</em>, possiamo procedere in due modi. Vediamoli brevemente, supponendo di aver ottenuto questo tipo di dati in formato <em>json</em>:</p><pre class="crayon-plain-tag">/* Informazioni restituite dal server */
var team = [
	{
		"name": "Giacomo",
		"occupation": "Developer"
	},
		"name": "Luigi",
		"occupation": "Designer"
	},
	{
		"name": "Mario",
		"occupation": "Web Marketer"
	},
	{
		"name": "Francesco",
		"occupation": "CEO"
	}
];</pre><p>
<h4> a) &#8211; Genera il tuo markup direttamente da javascript</h4>
</p><pre class="crayon-plain-tag">/*generiamo il markup all'interno di una variabile*/

var markup = '&lt;ul&gt;';
for(var i=0;i&lt;team.length;i++){
	var member = team[i];
	markup += '&lt;li&gt;'+member.name+' - '+member.occupation+'&lt;/li&gt;'
}
markup += "&lt;/ul&gt;";

/* inseriamo il markup nel contenitore desiderato */
$("#list-wrapper").append(markup);</pre><p>
<h4>b) &#8211; Usa un sistema di Templating</h4>
<p>Ecco come effettuare il render dinamico del markup con il sistema di templating <strong>EJS</strong></p>
<p>File list.ejs:</p><pre class="crayon-plain-tag">&lt;li&gt;&lt;%=name%&gt; - &lt;%=occupation%&gt;&lt;/li&gt;</pre><p>
Javascript:</p><pre class="crayon-plain-tag">// carichiamo il file list.ejs in modo asincrono (da un file all'interno dell'applicazione)
var template = new EJS({url: '/list.ejs'});
//generiamo il markup
$("#list-wrapper").html(template.render(team));</pre><p>
<em>Per sapere di più sui sistemi di templating ti consiglio di leggere questo articolo:</em></p>
<ul>
<li><em><a title="I sistemi di Javascript Templating e le migliori librerie" href="http://www.upcreative.net/web-application-i-sistemi-di-javascript-templating-e-le-migliori-librerie/">I sistemi di Javascript Templating e le migliori librerie</a></em></li>
</ul>
<p>Ricorda, stiamo parlando si una <a title="Applicazioni a pagina singola" href="http://en.wikipedia.org/wiki/Single-page_application">Single page app</a> e non di un normale sito web.</p>
<hr />
<p><em>Non generare mai il markup della tua #HTML5 #mobileapp sul server</em><br /><a href='https://twitter.com/share?text=Non+generare+mai+il+markup+della+tua+%23HTML5+%23mobileapp+sul+server&#038;via=upCreativeIta&#038;related=upCreativeIta&#038;url=https://www.upcreative.net/6-migliori-tecniche-per-le-performance-di-html5-mobile-app/' target='_blank'>Click To Tweet</a></p>
<hr />
<h2>2. Limita i dati tra server e client</h2>
<p style="text-align: center;"><a ref="magnificPopup" href="http://www.upcreative.net/wp-content/uploads/2014/02/limita-dati-tra-server-e-client.jpg"><img class="size-full wp-image-3310 aligncenter" alt="limita-dati-tra-server-e-client" src="http://www.upcreative.net/wp-content/uploads/2014/02/limita-dati-tra-server-e-client.jpg" width="690" height="211" /></a></p>
<p>Limitare la quantità di dati passati tra <em>server</em> e <em>client può </em>migliorare notevolmente l&#8217;esperienza utente, accorciando i tempi di attesa. Ecco come poterlo fare:</p>
<ol>
<li><strong>Salvare i dati già ottenuti in una <em>cache</em> locale</strong>: ci possiamo servire per esempio di funzionalità come l&#8217;<strong>HTML5 <a href="http://www.w3schools.com/html/html5_webstorage.asp">l</a><em><a href="http://www.w3schools.com/html/html5_webstorage.asp">ocalStorage</a>, un </em><a href="http://www.sqlite.org/">database <em>SQLite</em></a><em>, o </em></strong>il salvataggio su un <strong>file locale,</strong> <em></em>per memorizzare dati che già abbiamo ottenuto in precedenza, come per esempio una stessa news selezionata per la seconda volta.</li>
<li><strong>Limitare il traffico dati allo stretto necessario</strong>: non ha senso richiedere al server più informazioni di quelle che ci servono; potremo per esempio impostare le nostre API in modo tale che esse ci restituiscano solo dati che ancora non abbiamo. Ecco un piccolo esempio di una possibile chiamata <em>Ajax</em> che richiede al <em>server</em> solo delle news non ancora ricevute:<br />
<pre class="crayon-plain-tag">$.ajax({
	url: 'http://localhostAPI/news/',
	data: { lastid: 115},
	success: function (news) {
		/*
                nella variabile news saranno visualizzate 
                solo le news che non abbiamo ancora mai ricevuto,
                ovvero quelle con id più recente di 115, che è corrispondente
                all'ultima news caricata nella cache
                */
	}
});</pre>
&nbsp;</li>
</ol>
<hr />
<p><em> Limita i dati trafficati tra server e client #html5 #mobileapp performance</em><br /><a href='https://twitter.com/share?text=+Limita+i+dati+trafficati+tra+server+e+client+%23html5+%23mobileapp+performance&#038;via=upCreativeIta&#038;related=upCreativeIta&#038;url=https://www.upcreative.net/6-migliori-tecniche-per-le-performance-di-html5-mobile-app/' target='_blank'>Click To Tweet</a></p>
<hr />
<h2>3. Non attendere di ricevere informazioni dal server per visualizzare il tuo markup HTML</h2>
<p>Non attendere di ricevere i dati dal <em>server</em> per visualizzare una schermata (<em>view</em>). Una buona pratica è quella di visualizzare la <em>view</em>, effettuare la chiamata <em>ajax</em> e, una volta ricevuti i dati, aggiornare la schermata:</p><pre class="crayon-plain-tag">/*
funziome di visualizzazione della schermata
*/

var template = new EJS({url: '/news.ejs'});
function visualizzaSchermata(data){
	if(typeof data!='undefined')	
		$("#news-wrapper").html(template.render(team));
	else
		$("#news-wrapper").html(template.render({}));
}

/*effettuo il render della schermata senza le news*/
visualizzaSchermata();

$.ajax({
	url: 'http://localhostAPI/news/',
	data: { lastid: 115},
	success: function (news) {
		/*effettuo il render della schermata passando le news come dati */
		visualizzaSchermata(news);
	}
});</pre><p>
Ho adottato questa tecnica per la realizzazione di <a title="Tint Weather App - Iphone App in HTML5, CSS3 e Javascript" href="https://itunes.apple.com/it/app/tint-weather/id742161441?mt=8"><strong>Tint Weather App</strong></a>, dove per ogni schermata relativa ad una località ho dapprima effettuato il <em>render</em> della <em>view</em> mostrando un&#8217;animazione CSS3 di loading. Quindi ho effettuato la chiamata <em>ajax</em> per reperire i dati meteo dal <em>server</em> e, una volta ottenuti, ho aggiornato la <em>view</em> mostrandoli all&#8217;utente.</p>
<p style="text-align: center;"><span style="color: #ff0000;"><a ref="magnificPopup" href="http://www.upcreative.net/wp-content/uploads/2014/02/HTML5-render-view.jpg"><img class="size-full wp-image-3311 aligncenter" alt="HTML5-render-view" src="http://www.upcreative.net/wp-content/uploads/2014/02/HTML5-render-view.jpg" width="690" height="211" /></a></span></p>
<h2>4. Usa animazioni CSS3 performanti</h2>
<p>Le prime volte che mi dilettavo nella realizzazione di HTML5 Mobile App, mi servivo di <em>framework</em> come jQuery Mobile, jqTouch o simili, che basavano le loro animazioni su metodi jQuery come l&#8217;<em>animate</em> ( <em><strong>$(&#8220;#element&#8221;).animeate() </strong></em>), i quali non sfruttano la <em><strong><a title="Web e Mobile app fluide con layer e hardware acceleration" href="http://www.upcreative.net/web-e-mobile-app-fluide-con-layer-e-hardware-acceleration/">tecnica dell&#8217;accelerazione hardware</a>,</strong></em><strong> </strong>supportata da tutti i browser mobile.</p>
<p>L&#8217;<em>hardware acceleration</em> permette di delegare il rendering degli elementi dell&#8217; interfaccia dalla memoria centrale alla GPU, attraverso i <em><strong>livelli grafici,</strong> </em>alleggerendone notevolmente il carico di lavoro.</p>
<hr />
<p><em>Usa animazioni CSS3 performanti nello sviluppo di un #HTML5 #MobileApp</em><br /><a href='https://twitter.com/share?text=Usa+animazioni+CSS3+performanti+nello+sviluppo+di+un+%23HTML5+%23MobileApp&#038;via=upCreativeIta&#038;related=upCreativeIta&#038;url=https://www.upcreative.net/6-migliori-tecniche-per-le-performance-di-html5-mobile-app/' target='_blank'>Click To Tweet</a></p>
<hr />
<h2>5. Elimina il ritardo di 300ms del browser</h2>
<p>Hai mai notato, navigando un sito web con il tuo dispositivo mobile, che tra il touch su un link e l’inizio del caricamento della pagina successiva, oppure tra il touch su un input box ed il relativo focus, passa qualche millisecondo di tempo?<br />
Ciò è dovuto al fatto che quando l’utente esegue il tap su un bottone, i browser mobile <strong>aspettano circa 300ms</strong> prima che facciano scattare l’evento del click.</p>
<p>Ma perché?</p>
<p>Il browser vuole essere sicuro che l’utente non voglia eseguire un double tap, in modo da distinguere l’evento del touch singolo da quello del doppio touch.</p>
<p>Visto che il nostro intento è quello di realizzare una <strong>HTML5 Mobile App fluida e reattiva</strong>, dobbiamo assolutamente risolvere questo problema (sicuramente avrai notato che nessuna applicazione nativa presenta quel fastidiosissimo delay, e noi dobbiamo fare altrettanto).</p>
<p>Per eliminare tale ritardo ci basterà includere nel  progetto la libreria <a title="FastClick.js - Libreria per eliminare il ritardi di 300ms dai browser" href="https://github.com/ftlabs/fastclick"><strong>FastClick.js</strong></a>, grazie alla quale sarà sufficiente inserire nel codice Javascript la seguente sintassi:</p><pre class="crayon-plain-tag">window.addEventListener('load', function() {
    FastClick.attach(document.body);
}, false);</pre><p>
<hr />
<p><em>Rendi le tue #HTML5 #MobileApp fluide e reattive con #FastClick</em><br /><a href='https://twitter.com/share?text=Rendi+le+tue+%23HTML5+%23MobileApp+fluide+e+reattive+con+%23FastClick&#038;via=upCreativeIta&#038;related=upCreativeIta&#038;url=https://www.upcreative.net/6-migliori-tecniche-per-le-performance-di-html5-mobile-app/' target='_blank'>Click To Tweet</a></p>
<hr />
<h2>6. Ottimizza le immagini</h2>
<p style="text-align: center;"><a ref="magnificPopup" href="http://www.upcreative.net/wp-content/uploads/2014/02/html5-mobile-app-ottimizza-immagini.jpg"><img class="size-full wp-image-3314 aligncenter" alt="html5-mobile-app-ottimizza-immagini" src="http://www.upcreative.net/wp-content/uploads/2014/02/html5-mobile-app-ottimizza-immagini.jpg" width="690" height="211" /></a></p>
<p>Molti sottovalutano questo importante aspetto.</p>
<p>Il caricamento delle immagini rappresenta un elemento determinante per le performance di ogni HTML5 Mobile App: il modo in cui le implementiamo nell&#8217;interfaccia incide notevolmente sulla <em>user-expericence </em>finale.</p>
<p>Ecco alcuni punti da seguire per utilizzare correttamente le immagini:</p>
<ul>
<li><strong>Usa gli <a title="CSS Spritesheet" href="http://www.w3schools.com/css/css_image_sprites.asp">spritesheet</a> dove possibile</strong>: essi fanno in modo che tutte le immagini utilizzate nell&#8217;applicazione vengano caricate in una sola volta, evitando il load singolo solamente nel momento in cui sono visualizzate.</li>
<li><strong>Non ridimensionare le immagini</strong>: utilizza immagini che hanno le stesse dimensioni con cui saranno visualizzate; richiama diverse versioni della stessa immagine a seconda della risoluzione del dispositivo. Non ridimensionare le immagini con proprietà CSS o attributi HTML.</li>
<li><strong>Se possibile appoggiati ad un server CDN per l&#8217;hosting delle immagini che richiami via server</strong>: esistono diversi hosting CDN gratuiti da poter usare come spazio in cui salvare le tue immagini.<span style="line-height: 1.5em;"><br />
</span></li>
<li><strong>Prevedi delle fallback per gli errori di caricamento</strong>: se un&#8217;immagine non viene trovata (errore 404) o si verifica un errore di caricamento, è sempre opportuno visualizzarne una predefinita, o magari evitare di inserire il relativo tag HTML nel markup dell&#8217;interfaccia. Ecco un esempio:<br />
<pre class="crayon-plain-tag">&lt;script type="text/javascript"&gt;
function imgError(image) {
    image.onerror = "";
    image.src = "/images/noimage.gif";
    return true;
}
&lt;/script&gt;

&lt;img src="image.png" onerror="imgError(this);"/&gt;</pre>
&nbsp;</li>
</ul>
<hr />
<p><em>Ottimizza le immagini per aumentare le performnce #HTML5 #MobileApp</em><br /><a href='https://twitter.com/share?text=Ottimizza+le+immagini+per+aumentare+le+performnce+%23HTML5+%23MobileApp&#038;via=upCreativeIta&#038;related=upCreativeIta&#038;url=https://www.upcreative.net/6-migliori-tecniche-per-le-performance-di-html5-mobile-app/' target='_blank'>Click To Tweet</a></p>
<hr />
<h2>Conclusioni</h2>
<p>Realizzare applicazioni mobile in HTML5, CSS3 e Javascript rappresenta un grande vantaggio, in quanto permette sviluppare un <strong>singolo prodotto da poter distribuire su diverse piattaforme.</strong> Tuttavia uno dei possibili difetti di questo approccio è proprio la possibilità di avere scarse performance: diventa quindi indispensabile eliminare tale eventualità.</p>
<p>Adottando la serie di tecniche esposte in questo articolo posso affermare di aver incrementato le performance delle mie HTML5 Mobile App, ed averne incredibilmente ridotto la differenza rispetto alle applicazioni Native.</p>
<p>E tu? Hai qualche consiglio o tecnica da suggerirmi? Fammelo sapere lasciando un commento!
		</div> 
	</div> <div class="g-cols color_alternate w-actionbox"><div class="one-half">
	<div class="wpb_text_column ">
		<div class="wpb_wrapper">
			
<h3>Crea la tua mobile app in HTML, CSS3 e Javascript</h3>
<p>Utilizzando queste tecniche insieme a molte altre, ho realizzato più di 10 mobile app in HTML, CSS3 e Javascript (tra cui <a title="Tint HTML mobile app" href="http://www.upcreative.net/tint-weather-app/">Tint</a> e <a title="Dieta SI o NO? HTML Mobile app" href="http://www.upcreative.net/app-dieta-si-o-no/">Dieta SI o NO?</a>).</p>
<p>Se anche tu vuoi realizzare la tua applicazione in HTML, CSS e javascript da distribuire nei vari store, forse potrebbe interessarti il mio e-book <strong><a title="HTML Mobile Accelerato - Come creare una mobile app in HTML, CSS e Javacript" href="http://www.upcreative.net/html-mobile-accelerato/">HTML Mobile Accelerato</a>.</strong>
		</div> 
	</div> </div><div class="one-half">
	<div class="wpb_single_image wpb_content_element">
		<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 class="wpb_text_column ">
		<div class="wpb_wrapper">
			<div class="widget_wysija_cont shortcode_wysija"><div id="msg-form-wysija-shortcode6ab0e102850b0-4" class="wysija-msg ajax"></div><form id="form-wysija-shortcode6ab0e102850b0-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> </div></div></div></div>
</div></div><p>The post <a rel="nofollow" href="https://www.upcreative.net/6-migliori-tecniche-per-le-performance-di-html5-mobile-app/">Le 6 migliori tecniche per aumentare le performance di una HTML5 Mobile App</a> appeared first on <a rel="nofollow" href="https://www.upcreative.net">upCreative</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://www.upcreative.net/6-migliori-tecniche-per-le-performance-di-html5-mobile-app/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<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-shortcode6ab0e102b79c6-4" class="wysija-msg ajax"></div><form id="form-wysija-shortcode6ab0e102b79c6-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>
