{"id":164056,"date":"2025-08-12T09:00:00","date_gmt":"2025-08-12T07:00:00","guid":{"rendered":"https:\/\/gtechgroup.it\/blog\/preload-prefetch-preconnect-ottimizzare-caricamento\/"},"modified":"2025-08-12T09:00:00","modified_gmt":"2025-08-12T07:00:00","slug":"preload-prefetch-preconnect-ottimizzare-caricamento","status":"publish","type":"post","link":"https:\/\/gtechgroup.it\/blog\/preload-prefetch-preconnect-ottimizzare-caricamento\/","title":{"rendered":"Preload, Prefetch e Preconnect: Ottimizzare il Caricamento in HTML"},"content":{"rendered":"<p style=\"text-align: justify;\">La velocit\u00e0 di caricamento di una pagina web dipende in gran parte da come il browser gestisce le risorse necessarie: fogli di stile, font, script, immagini e connessioni a server esterni. HTML offre una serie di meccanismi chiamati <strong>resource hints<\/strong> che permettono agli sviluppatori di comunicare al browser quali risorse saranno necessarie e quando, ottimizzando cos\u00ec il processo di caricamento. In questa guida analizzeremo in dettaglio <code>&lt;link rel=\"preload\"&gt;<\/code>, <code>&lt;link rel=\"prefetch\"&gt;<\/code>, <code>&lt;link rel=\"preconnect\"&gt;<\/code> e gli altri hint disponibili.<\/p>\n<h2>Panoramica dei Resource Hints<\/h2>\n<p style=\"text-align: justify;\">Quando un browser carica una pagina, segue un processo ben definito: scarica l&#8217;HTML, lo analizza, scopre le risorse necessarie e le scarica. Questo processo \u00e8 intrinsecamente sequenziale: il browser non pu\u00f2 sapere che avr\u00e0 bisogno di un font finch\u00e9 non ha scaricato e analizzato il CSS che lo dichiara. I <strong>resource hints<\/strong> permettono di anticipare queste informazioni, inserendole direttamente nel <code>&lt;head&gt;<\/code> del documento HTML.<\/p>\n<p style=\"text-align: justify;\">Ogni hint ha uno scopo diverso e un impatto differente sulle performance. Utilizzarli correttamente pu\u00f2 ridurre i tempi di caricamento di centinaia di millisecondi, un miglioramento percepibile dall&#8217;utente e misurabile nei <a href=\"https:\/\/gtechgroup.it\/blog\/core-web-vitals-html-lcp-cls-inp\/\">Core Web Vitals<\/a>. Tuttavia, un uso eccessivo o scorretto pu\u00f2 peggiorare le performance anzich\u00e9 migliorarle, poich\u00e9 ogni hint consuma risorse del browser e banda di rete.<\/p>\n<h2>Preload: Caricare Subito le Risorse Critiche<\/h2>\n<p style=\"text-align: justify;\">Il <code>&lt;link rel=\"preload\"&gt;<\/code> \u00e8 il resource hint pi\u00f9 potente e aggressivo. Dice al browser: &#8220;Avrai bisogno di questa risorsa molto presto nella pagina corrente, inizia a scaricarla immediatamente con alta priorit\u00e0&#8221;. \u00c8 fondamentale per le risorse che il browser scoprirebbe troppo tardi nel processo di analisi.<\/p>\n<p style=\"text-align: justify;\">La sintassi richiede l&#8217;attributo <code>&lt;as&gt;<\/code> per indicare il tipo di risorsa, il che permette al browser di assegnare la priorit\u00e0 corretta e di applicare le policy di sicurezza appropriate:<\/p>\n<pre><code>&lt;!-- Preload di un font --&gt;\n&lt;link rel=\"preload\" href=\"\/fonts\/inter.woff2\" as=\"font\" type=\"font\/woff2\" crossorigin&gt;\n\n&lt;!-- Preload di un CSS critico --&gt;\n&lt;link rel=\"preload\" href=\"\/css\/critical.css\" as=\"style\"&gt;\n\n&lt;!-- Preload di uno script --&gt;\n&lt;link rel=\"preload\" href=\"\/js\/app.js\" as=\"script\"&gt;\n\n&lt;!-- Preload di un'immagine LCP --&gt;\n&lt;link rel=\"preload\" href=\"\/img\/hero.webp\" as=\"image\" type=\"image\/webp\"&gt;<\/code><\/pre>\n<p style=\"text-align: justify;\">I <strong>font<\/strong> sono il caso d&#8217;uso pi\u00f9 comune per preload. Senza preload, il browser deve: scaricare l&#8217;HTML, trovare il link al CSS, scaricare il CSS, trovare la dichiarazione @font-face, e solo allora iniziare a scaricare il font. Con preload, il download del font inizia immediatamente, in parallelo con le altre risorse. \u00c8 obbligatorio aggiungere l&#8217;attributo <code>crossorigin<\/code> per i font, anche se sono ospitati sullo stesso dominio, poich\u00e9 i font vengono sempre richiesti in modalit\u00e0 CORS.<\/p>\n<p style=\"text-align: justify;\">Per le <strong>immagini hero<\/strong> (le immagini principali above-the-fold), il preload \u00e8 particolarmente efficace quando l&#8217;immagine \u00e8 referenziata dal CSS come background-image, poich\u00e9 altrimenti il browser la scoprirebbe molto tardi. In alternativa, per immagini nel markup HTML, si pu\u00f2 usare l&#8217;attributo <code>fetchpriority=\"high\"<\/code> direttamente sul tag <code>&lt;img&gt;<\/code>.<\/p>\n<p style=\"text-align: justify;\">Un errore comune \u00e8 fare preload di troppe risorse. Il browser ha un limite di connessioni simultanee per dominio, e saturarlo con preload pu\u00f2 rallentare il download di risorse che il browser avrebbe caricato naturalmente con priorit\u00e0 maggiore. La regola pratica \u00e8: <strong>preload solo 2-4 risorse veramente critiche<\/strong> per il rendering above-the-fold.<\/p>\n<h2>Prefetch: Anticipare le Risorse delle Pagine Successive<\/h2>\n<p style=\"text-align: justify;\">A differenza di preload che riguarda la pagina corrente, <code>&lt;link rel=\"prefetch\"&gt;<\/code> anticipa le risorse che saranno necessarie nelle <strong>navigazioni future<\/strong>. Il browser scarica queste risorse con bassa priorit\u00e0, durante i momenti di inattivit\u00e0, senza impattare il caricamento della pagina corrente.<\/p>\n<pre><code>&lt;!-- Prefetch di una pagina che l'utente probabilmente visiter\u00e0 --&gt;\n&lt;link rel=\"prefetch\" href=\"\/prodotti\/catalogo.html\"&gt;\n\n&lt;!-- Prefetch di un CSS necessario nella pagina successiva --&gt;\n&lt;link rel=\"prefetch\" href=\"\/css\/product-page.css\" as=\"style\"&gt;\n\n&lt;!-- Prefetch di dati JSON --&gt;\n&lt;link rel=\"prefetch\" href=\"\/api\/products.json\" as=\"fetch\"&gt;<\/code><\/pre>\n<p style=\"text-align: justify;\">Il prefetch \u00e8 ideale per scenari in cui si pu\u00f2 prevedere con ragionevole certezza quale pagina l&#8217;utente visiter\u00e0 successivamente. Ad esempio, in un e-commerce, se l&#8217;utente \u00e8 sulla pagina di elenco prodotti, \u00e8 probabile che cliccher\u00e0 su uno dei prodotti per vederne i dettagli. Fare prefetch della pagina del primo prodotto visibile pu\u00f2 rendere la navigazione quasi istantanea.<\/p>\n<p style=\"text-align: justify;\">\u00c8 importante sottolineare che le risorse prefetchate vengono memorizzate nella <strong>cache HTTP<\/strong> del browser. Se l&#8217;utente non visita mai la pagina anticipata, la risorsa viene comunque scaricata, consumando banda. Per questo motivo, il prefetch va usato solo quando la probabilit\u00e0 di navigazione \u00e8 alta. Inoltre, il browser pu\u00f2 decidere di ignorare i prefetch hint in determinate condizioni, come connessioni lente o modalit\u00e0 di risparmio dati.<\/p>\n<h2>Preconnect e DNS-Prefetch: Preparare le Connessioni<\/h2>\n<p style=\"text-align: justify;\">Quando il browser deve scaricare una risorsa da un dominio esterno (CDN, API, font server), deve prima completare diversi passaggi di rete: risoluzione DNS, handshake TCP e negoziazione TLS. Questo processo pu\u00f2 richiedere 100-300 millisecondi. <code>&lt;link rel=\"preconnect\"&gt;<\/code> permette di completare questi passaggi in anticipo.<\/p>\n<pre><code>&lt;!-- Preconnect a Google Fonts --&gt;\n&lt;link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\"&gt;\n&lt;link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin&gt;\n\n&lt;!-- Preconnect a un CDN --&gt;\n&lt;link rel=\"preconnect\" href=\"https:\/\/cdn.example.com\"&gt;\n\n&lt;!-- DNS-prefetch come fallback --&gt;\n&lt;link rel=\"dns-prefetch\" href=\"https:\/\/cdn.example.com\"&gt;<\/code><\/pre>\n<p style=\"text-align: justify;\">Il <code>&lt;link rel=\"dns-prefetch\"&gt;<\/code> \u00e8 una versione pi\u00f9 leggera che esegue solo la risoluzione DNS, senza il TCP handshake e la negoziazione TLS. \u00c8 supportato da tutti i browser, anche i pi\u00f9 datati, e ha un costo praticamente nullo. Una pratica comune \u00e8 inserire dns-prefetch come fallback dopo ogni preconnect, per garantire che almeno la risoluzione DNS venga anticipata anche nei browser che non supportano preconnect.<\/p>\n<p style=\"text-align: justify;\">Limitate i preconnect a <strong>massimo 4-6 domini<\/strong>: ogni connessione aperta consuma risorse del browser, e troppe connessioni simultanee possono rallentare quelle veramente necessarie. Per domini da cui scaricherete solo una risorsa piccola, dns-prefetch \u00e8 pi\u00f9 che sufficiente.<\/p>\n<h2>Modulepreload e Casi Avanzati<\/h2>\n<p style=\"text-align: justify;\"><code>&lt;link rel=\"modulepreload\"&gt;<\/code> \u00e8 una variante specializzata di preload progettata per i moduli JavaScript ES. A differenza del preload standard, modulepreload non solo scarica il file ma lo analizza e lo compila immediatamente, e inoltre scarica ricorsivamente tutti i moduli importati:<\/p>\n<pre><code>&lt;link rel=\"modulepreload\" href=\"\/js\/app.mjs\"&gt;\n&lt;link rel=\"modulepreload\" href=\"\/js\/utils.mjs\"&gt;<\/code><\/pre>\n<p style=\"text-align: justify;\">Senza modulepreload, un albero di dipendenze di moduli viene scoperto e scaricato in modo sequenziale: il browser scarica il modulo principale, lo analizza, scopre le importazioni, scarica quei moduli, li analizza, e cos\u00ec via. Questo crea una cascata che pu\u00f2 aggiungere centinaia di millisecondi al caricamento. Con modulepreload, tutti i moduli vengono scaricati in parallelo fin dall&#8217;inizio.<\/p>\n<p style=\"text-align: justify;\">Un altro caso avanzato \u00e8 l&#8217;uso dell&#8217;attributo <code>imagesrcset<\/code> con preload per anticipare il caricamento di <a href=\"https:\/\/gtechgroup.it\/blog\/immagini-responsive-html-srcset-sizes-picture\/\">immagini responsive<\/a>. Questo permette di fare preload dell&#8217;immagine corretta in base alla viewport, senza caricare risorse inutili. La sintassi \u00e8 la seguente: <code>&lt;link rel=\"preload\" as=\"image\" imagesrcset=\"...\" imagesizes=\"...\"&gt;<\/code>.<\/p>\n<h2>Errori Comuni e Come Evitarli<\/h2>\n<p style=\"text-align: justify;\">L&#8217;errore pi\u00f9 frequente \u00e8 <strong>confondere preload con prefetch<\/strong>: preload \u00e8 per la pagina corrente con alta priorit\u00e0, prefetch \u00e8 per le navigazioni future con bassa priorit\u00e0. Usare preload quando si intende prefetch spreca banda e CPU nel momento pi\u00f9 critico del caricamento.<\/p>\n<p style=\"text-align: justify;\">Un altro errore comune \u00e8 <strong>dimenticare l&#8217;attributo as<\/strong> nel preload, il che impedisce al browser di assegnare la priorit\u00e0 corretta e pu\u00f2 causare il download doppio della risorsa. Allo stesso modo, dimenticare <code>crossorigin<\/code> per i font causa un doppio download. Se vedete warning nella console del browser relativi a risorse preloaded non utilizzate entro pochi secondi, \u00e8 un segnale che il preload non \u00e8 configurato correttamente.<\/p>\n<p style=\"text-align: justify;\">Infine, evitate di fare preload di risorse che il browser avrebbe comunque scoperto velocemente. Un CSS linkato direttamente nel <code>&lt;head&gt;<\/code> viene gi\u00e0 scaricato con alta priorit\u00e0; fare preload in quel caso non aggiunge alcun beneficio. Concentrate il preload su risorse &#8220;nascoste&#8221; come font (referenziati dal CSS), immagini CSS background e script caricati dinamicamente.<\/p>\n<p style=\"text-align: justify;\">Hai bisogno di aiuto con l&#8217;ottimizzazione del caricamento delle tue pagine web? <strong>G Tech Group<\/strong> offre servizi di sviluppo web professionale e consulenza tecnica. Contattaci a <strong>support@gtechgroup.it<\/strong> o via WhatsApp al <strong>0465 84 62 45<\/strong>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>La velocit\u00e0 di caricamento di una pagina web dipende in gran parte da come il browser gestisce le risorse necessarie: fogli di stile, font, script,&hellip;<\/p>\n","protected":false},"author":2,"featured_media":164236,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_seopress_robots_primary_cat":"1246","_seopress_titles_title":"Preload, Prefetch e Preconnect: Ottimizzare il Caricamento %%sep%% %%sitename%%","_seopress_titles_desc":"Guida completa ai resource hints HTML: preload, prefetch, preconnect e dns-prefetch per ottimizzare i tempi di caricamento delle pagine web.","_seopress_robots_index":"","footnotes":""},"categories":[1246],"tags":[875,1775,787],"class_list":["post-164056","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-html","tag-ottimizzazione","tag-performance","tag-sviluppo-web"],"_links":{"self":[{"href":"https:\/\/gtechgroup.it\/blog\/wp-json\/wp\/v2\/posts\/164056","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/gtechgroup.it\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/gtechgroup.it\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/gtechgroup.it\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/gtechgroup.it\/blog\/wp-json\/wp\/v2\/comments?post=164056"}],"version-history":[{"count":0,"href":"https:\/\/gtechgroup.it\/blog\/wp-json\/wp\/v2\/posts\/164056\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/gtechgroup.it\/blog\/wp-json\/wp\/v2\/media\/164236"}],"wp:attachment":[{"href":"https:\/\/gtechgroup.it\/blog\/wp-json\/wp\/v2\/media?parent=164056"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/gtechgroup.it\/blog\/wp-json\/wp\/v2\/categories?post=164056"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/gtechgroup.it\/blog\/wp-json\/wp\/v2\/tags?post=164056"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}