{"id":5605,"date":"2009-06-04T09:37:06","date_gmt":"2009-06-04T07:37:06","guid":{"rendered":"https:\/\/www.dreamsworld.it\/emanuele\/?p=5605"},"modified":"2016-05-17T12:35:14","modified_gmt":"2016-05-17T10:35:14","slug":"costruire-un-tema-ottimizzazione-del-codice","status":"publish","type":"post","link":"https:\/\/www.dreamsworld.it\/emanuele\/2009-06-04\/costruire-un-tema-ottimizzazione-del-codice\/","title":{"rendered":"Costruire un tema: ottimizzazione del codice."},"content":{"rendered":"<p>Per mancanza di tempo, sono passati due mesi dall&#8217;ultimo post della serie <em>&#8220;Realizziamo un tema per WordPress da zero&#8221;<\/em> riguardo le attenzioni che ho avuto io durante la costruzione del mio nuovo template, cos\u00ec&#8230; eccomi di nuovo qui.<\/p>\n<p>Facendo un veloce resoconto, nelle <em>&#8220;precedenti puntate&#8221;<\/em> abbiamo parlato di <a title=\"Costruire un tema: il layout.\" href=\"\/\/www.dreamsworld.it\/emanuele\/2009-03-16\/costruire-un-tema-il-layout\/\" target=\"_blank\">layout<\/a>, di scelta delle <a title=\"Costruire un tema: scelta delle dimensioni.\" href=\"\/\/www.dreamsworld.it\/emanuele\/2009-03-19\/costruire-un-tema-scelta-delle-dimensioni\/\" target=\"_blank\">dimensioni<\/a> e dei <a title=\"Costruire un tema: scelta dei colori.\" href=\"\/\/www.dreamsworld.it\/emanuele\/2009-03-23\/costruire-un-tema-scelta-dei-colori\/\" target=\"_blank\">colori<\/a>, abbiamo parlato del testo (<a title=\"Costruire un tema: lunghezza e dimensione testo.\" href=\"\/\/www.dreamsworld.it\/emanuele\/2009-03-26\/costruire-un-tema-lunghezza-e-dimensione-testo\/\" target=\"_blank\">dimensioni e lunghezza<\/a>) e degli <a title=\"Costruire un tema: gli effetti speciali.\" href=\"\/\/www.dreamsworld.it\/emanuele\/2009-03-30\/costruire-un-tema-gli-effetti-speciali\/\" target=\"_blank\">effetti speciali<\/a> che possono essere applicati ad una pagina per renderla pi\u00f9 &#8220;<em>interattiva<\/em>&#8221; o quanto meno, pi\u00f9 al passo con le tendenze del web (<em>qualcuno lo chiama 2.0<\/em>).<\/p>\n<p>Bene&#8230; il passo conclusivo (<em>o quasi<\/em>) <strong>consiste nel mettere insieme<\/strong> tutto ci\u00f2 che abbiamo imparato in un documento che dovr\u00e0 esser letto &#8211; potenzialmente &#8211; dai browser <em>dell&#8217;intero pianeta<\/em>. Ho gi\u00e0 parlato delle difficolt\u00e0 (e dell&#8217;importanza) del rendere un tema <em>cross-browser<\/em> e cio\u00e8 capace d&#8217;esser letto da browser diversi (<em>cellulari, netbook, etc.<\/em>) ma non dobbiamo neanche dimenticare un ulteriore aspetto delle nostre pagine: l&#8217;accessibilit\u00e0 passa anche da <strong>un buon codice<\/strong>.<\/p>\n<p>La sintassi di una pagina \u00e8 paragonabile <strong>ai costrutti lessicali di una lingua<\/strong>. <em>&#8220;Io <\/em><em>posso <\/em><em>non\u00a0 parlerei cos\u00ec&#8221;<\/em>. Ecco. Usare costrutti errati o posizionati erroneamente pu\u00f2 portare a <strong>difficolt\u00e0 di interpretazione<\/strong> da parte dei browser tanto quanto vi \u00e8 venuto difficile capire il senso di quella frase.<\/p>\n<p>Il motore interno del vostro browser web, quando riceve una pagina, analizza prima i tag (che sono le indicazioni della nostra sintassi, per continuare il paragone) e in base a quelli <strong>costruisce<\/strong> un <a title=\"Wikipedia - Document Object Model\" href=\"https:\/\/it.wikipedia.org\/wiki\/Document_Object_Model\" target=\"_blank\">DOM<\/a> in cui posiziona i vari oggetti.<\/p>\n<p>Per capire meglio cosa succede <strong>durante<\/strong> il caricamento di una pagina date un&#8217;occhiata al seguente video.<\/p>\n<div align=\"center\"><div style=\"width: 640px;\" class=\"wp-video\"><video class=\"wp-video-shortcode\" id=\"video-5605-1\" width=\"640\" height=\"360\" preload=\"metadata\" controls=\"controls\"><source type=\"video\/mp4\" src=\"\/\/www.dreamsworld.it\/video\/2009-06-01_gecko_rendering_mozilla.mp4?_=1\" \/><source type=\"video\/x-flv\" src=\"\/\/www.dreamsworld.it\/video\/2009-06-01_gecko_rendering_mozilla.flv?_=1\" \/><a href=\"\/\/www.dreamsworld.it\/video\/2009-06-01_gecko_rendering_mozilla.mp4\">\/\/www.dreamsworld.it\/video\/2009-06-01_gecko_rendering_mozilla.mp4<\/a><\/video><\/div><\/div>\n<p>Questa operazione prende il nome di <strong>reflow di una pagina<\/strong> (<em>quello nel video \u00e8 il reflow di Gecko per Mozilla.org<\/em>) e, per via della struttura dell&#8217;html, avviene ricorsivamente <strong>sempre pi\u00f9 in profondit\u00e0<\/strong>. Da questo si capisce anche perch\u00e9 solitamente su pagine molto pesante e piene di elementi i computer con processore pi\u00f9 datato impieghino qualche istante in pi\u00f9 nel visualizzare la pagina.<\/p>\n<p>Ecco che la parola chiave di un buon codice diventa <strong>ottimizzazione<\/strong>.<\/p>\n<p>L&#8217;ottimizzazione, passa per prima cosa, dalla <strong>validazione del codice<\/strong> secondo gli standard concordati dal <a title=\"World Wide Web Consortium\" href=\"http:\/\/www.w3.org\/\" target=\"_blank\">consorzio W3<\/a>. Avere delle pagine con codice sintatticamente corretto aiuta sicuramente i browser durante il loro compito. E&#8217; vero che i browser pi\u00f9 diffusi <strong>fanno miracoli<\/strong> e spesso accettano codice non del tutto corretto (<em>ad esempio un tag &lt;div&gt; inserito dentro un tag &lt;a&gt;<\/em>) ma evitare problemi alla lunga <strong>paga<\/strong>.<\/p>\n<p>Inoltre, non dobbiamo dimenticarci dei <strong>motori di ricerca<\/strong>. C&#8217;\u00e8 chi dice che internet senza <em>Google<\/em> sarebbe ancora una grossa e asettica web-directory. Avere una pagina <strong>facilmente accessibile agli spider<\/strong> dei motori di ricerca significa ricevere un buon punteggio nelle loro liste di &#8220;siti preferiti&#8221; (<em>semplificando di molto il discorso<\/em>) e un buon punteggio si traduce in una <strong>buona indicizzazione<\/strong> e&#8230; sono poche le persone che costruiscono un sito web senza volere che sia visibile (<em>cos\u00ec come sono poche le persone che usano il balcone per nascondersi!<\/em>).<\/p>\n<p>Dunque, una regola fondamentale da ricordare \u00e8: i motori di ricerca <strong>apprezzano pagine leggere<\/strong>, veloci da caricare e sintatticamente corrette.<\/p>\n<p>Questo non mette in secondo piano <strong>i contenuti<\/strong> che rimangono l&#8217;elemento principale della pagina (<em>figurarsi che possa importare a Google o chi per lui una pagina vuota ma correttissima sintatticamente<\/em>) ma, a parit\u00e0 di &#8220;valore&#8221; del contenuto, <strong>il contenitore<\/strong> migliore verr\u00e0 preferito.<\/p>\n<p>Un po&#8217; come quando esco da casa e devo scegliere tra Porsche e Ferrari&#8230; (<em>sigh, \u00e8 una metafora pi\u00f9 astratta delle cose di cui stiamo parlando!<\/em> :-D).<\/p>\n<p>Un altro aspetto da tenere in considerazione \u00e8 <strong>la struttura del codice<\/strong> che pubblichiamo.<\/p>\n<p>I <a title=\"Wikipedia - Elemento HTML (Frame)\" href=\"https:\/\/it.wikipedia.org\/wiki\/Elemento_HTML#Frame\" target=\"_blank\">frame<\/a> ad esempio, sono <strong>deprecati<\/strong> e non credo esistano ragioni valide per usarli ormai. Oltre a questo, cerchiamo di pubblicare i contenuti pi\u00f9 importanti <strong>nella parte pi\u00f9 alta del documento<\/strong>, in modo da far si che gli spider gli diano maggiore importanza (com&#8217;\u00e8 giusto che sia). Ovviamente possiamo giocare poi con il <strong>posizionamento grafico<\/strong> tramite i <a title=\"Wikipedia - Cascading Style Sheet\" href=\"https:\/\/it.wikipedia.org\/wiki\/CSS\" target=\"_blank\">fogli di stile<\/a>.<\/p>\n<p>Realizziamo un header compatto e completo. I motori di ricerca sfruttano quei dati per avere qualche informazione in pi\u00f9 ma <strong>abusarne non serve a nulla<\/strong>&#8230; per questo non facciamo mancare il tag &#8220;<em>title<\/em>&#8221; ad esempio ma non abusiamo del metatag &#8220;<em>description<\/em>&#8221; perch\u00e9 spesso i motori di ricerca <strong>ignorano<\/strong> quelle keyword (<em>che considerano viziate in partenza<\/em>).<\/p>\n<p>Evitiamo inoltre l&#8217;uso smodato di risorse esterne. Caricare contenuti esterni (<em>immagini, javascript, video flash, audio&#8230;<\/em>) <strong>rallenta il caricamento della pagina<\/strong> e oltre a non essere apprezzato dai motori di ricerca (<em>Google<\/em> tramite <a title=\"Google - Webmasters Tools\" href=\"https:\/\/www.google.com\/webmasters\/tools\/home?hl=it\" target=\"_blank\">i webmasters tools<\/a> vi permette di monitorare il <strong>tempo medio di caricamento<\/strong> delle vostre pagine), sicuramente fa perdere <strong>la pazienza ai visitatori<\/strong> (che alla fine, rimangono il vostro riferimento). Cerchiamo di ospitare sul nostro hosting il maggior numero possibile di contenuti.<\/p>\n<p>A quest&#8217;ultimo aspetto ovviamente si ricollega la <a title=\"Scelta dell\u2019hosting.\" href=\"\/\/www.dreamsworld.it\/emanuele\/2009-04-16\/scelta-dellhosting\/\" target=\"_blank\">scelta dell&#8217;hosting<\/a> che, sicuramente, va fatta anche in considerazione del peso dei contenuti che vogliamo pubblicare.<\/p>\n<p>Un altra piccola attenzione pu\u00f2 esser quella di <strong>comprimere<\/strong> i fogli di stile e collegarli all&#8217;interno del documento come unico file. Per capirci meglio, nel mio blog, il CSS \u00e8 segnalato al browser <strong>tramite un&#8217;unica riga<\/strong>:<\/p>\n<pre lang=\"html4strict\">\r\n&lt;link rel=&quot;stylesheet&quot; href=&quot;\/\/www.dreamsworld.it\/emanuele\/wp-content\/themes\/emanuele-theme\/style.css&quot; type=&quot;text\/css&quot; media=&quot;screen&quot; \/&gt;<\/pre>\n<p>Il file <em>style.css <\/em>al suo interno, per\u00f2, richiama i vari fogli di stile:<\/p>\n<pre lang=\"css\">@import url(&quot;\/\/www.dreamsworld.it\/emanuele\/wp-content\/themes\/emanuele-theme\/css\/main.css&quot;);\r\n@import url(&quot;\/\/www.dreamsworld.it\/emanuele\/wp-content\/themes\/emanuele-theme\/css\/header.css&quot;);\r\n@import url(&quot;\/\/www.dreamsworld.it\/emanuele\/wp-content\/themes\/emanuele-theme\/css\/sidebar.css&quot;);\r\n@import url(&quot;\/\/www.dreamsworld.it\/emanuele\/wp-content\/themes\/emanuele-theme\/css\/footer.css&quot;);<\/pre>\n<p>Questa scelta, oltre a favorire gli spider (<em>che durante la scansione saltano una riga e non incontrano altre risorse esterne da scartare<\/em>), favorisce anche <strong>la manutenzione del blog<\/strong>. Se volessi cambiare nome o inserire un nuovo foglio di stile, mi baster\u00e0 effettuare le opportune modifiche dentro <em>style.css<\/em> senza dovermi ricordare dove l&#8217;avevo linkato.<\/p>\n<p>Insomma, tanti piccoli accorgimenti che aiutano a <strong>mantenere sotto controllo<\/strong> sia il peso della pagina che la sua struttura.<\/p>\n<p>Voi, avete qualche suggerimento da darmi? \ud83d\ude42<\/p>\n<p><strong>Emanuele<\/strong><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Per mancanza di tempo, sono passati due mesi dall&#8217;ultimo post della serie &#8220;Realizziamo un tema per WordPress da zero&#8221; riguardo le attenzioni che ho avuto io durante la costruzione del mio nuovo template, cos\u00ec&#8230; eccomi di nuovo qui. Facendo un &hellip; <a href=\"https:\/\/www.dreamsworld.it\/emanuele\/2009-06-04\/costruire-un-tema-ottimizzazione-del-codice\/\">Leggi ancora &rarr;<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"activitypub_content_warning":"","activitypub_content_visibility":"","activitypub_max_image_attachments":4,"activitypub_interaction_policy_quote":"anyone","activitypub_status":"","footnotes":""},"categories":[4],"tags":[1282,726,84,508,494,483,724,776,320,485,657,1281,1279,529,1280,490,491,526,528,493],"class_list":["post-5605","post","type-post","status-publish","format-standard","hentry","category-internet","tag-access","tag-benchmark","tag-browser","tag-codice","tag-coding","tag-css","tag-dom","tag-google","tag-hosting","tag-html","tag-pulizia","tag-reflow","tag-sintassi","tag-siti-web","tag-spider","tag-tema","tag-template","tag-user-experience","tag-web-design","tag-wordpress"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.dreamsworld.it\/emanuele\/wp-json\/wp\/v2\/posts\/5605","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dreamsworld.it\/emanuele\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dreamsworld.it\/emanuele\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dreamsworld.it\/emanuele\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dreamsworld.it\/emanuele\/wp-json\/wp\/v2\/comments?post=5605"}],"version-history":[{"count":0,"href":"https:\/\/www.dreamsworld.it\/emanuele\/wp-json\/wp\/v2\/posts\/5605\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.dreamsworld.it\/emanuele\/wp-json\/wp\/v2\/media?parent=5605"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dreamsworld.it\/emanuele\/wp-json\/wp\/v2\/categories?post=5605"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dreamsworld.it\/emanuele\/wp-json\/wp\/v2\/tags?post=5605"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}