{"id":58937,"date":"2022-08-11T13:29:20","date_gmt":"2022-08-11T12:29:20","guid":{"rendered":"https:\/\/kinsta.com\/it\/?p=58937&#038;preview=true&#038;preview_id=58937"},"modified":"2023-02-02T08:16:13","modified_gmt":"2023-02-02T07:16:13","slug":"performance-api","status":"publish","type":"post","link":"https:\/\/kinsta.com\/it\/blog\/performance-api\/","title":{"rendered":"Introduzione alla Performance API"},"content":{"rendered":"<p>La <a href=\"https:\/\/developer.mozilla.org\/docs\/Web\/API\/Performance_API\">Performance API<\/a> misura la reattivit\u00e0 della vostra applicazione web live su dispositivi e connessioni di rete reali. Pu\u00f2 aiutare a identificare i colli di bottiglia nel codice lato client e lato server grazie a:<\/p>\n<ul>\n<li><strong>user timing:<\/strong> Misurazione personalizzata delle prestazioni <a href=\"https:\/\/kinsta.com\/it\/blog\/cosa-e-javascript\/\">delle funzioni JavaScript<\/a> lato client<\/li>\n<li><strong>paint timing:<\/strong> Metriche di rendering del browser<\/li>\n<li><strong>resource timing:<\/strong> Prestazioni di caricamento delle risorse e delle chiamate Ajax<\/li>\n<li><strong>navigation timing:<\/strong> Metriche di caricamento della pagina, compresi i reindirizzamenti, le ricerche DNS, la prontezza del DOM e altro ancora<\/li>\n<\/ul>\n<p>Questo tipo di API risolve diversi problemi associati alla tipica valutazione delle prestazioni:<\/p>\n<ol>\n<li>Gli sviluppatori spesso testano le applicazioni su PC di fascia alta collegati a una rete veloce. DevTools pu\u00f2 emulare dispositivi pi\u00f9 lenti, ma non sempre mette in evidenza i problemi del mondo reale quando la maggior parte dei clienti usa un cellulare di due anni fa connesso al WiFi dell&#8217;aeroporto.<\/li>\n<li>Le opzioni di terze parti come <a href=\"https:\/\/kinsta.com\/it\/blog\/come-utilizzare-google-analytics\/\">Google Analytics<\/a> sono spesso bloccate, il che porta a risultati e ipotesi distorte. Inoltre, in alcuni Paesi si possono verificare implicazioni per la privacy.<\/li>\n<li>La Performance API pu\u00f2 misurare con precisione diverse metriche e meglio di metodi come <a href=\"https:\/\/developer.mozilla.org\/docs\/Web\/JavaScript\/Reference\/Global_Objects\/Date\"><code>Date()<\/code><\/a>.<\/li>\n<\/ol>\n<p><br \/>\nLe sezioni seguenti descrivono i modi in cui potete usare la Performance API. \u00c8 necessario avere una certa <a href=\"https:\/\/kinsta.com\/it\/argomenti\/tutorial-javascript\/\">conoscenza di JavaScript<\/a> e delle <a href=\"https:\/\/kinsta.com\/it\/blog\/speed-test-sito-web\/\">metriche di caricamento delle pagine<\/a>.<br \/>\n<div><\/div><kinsta-auto-toc heading=\"Table of Contents\" exclude=\"last\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc><\/p>\n<h2>Disponibilit\u00e0 della Performance API<\/h2>\n<p>La maggior parte dei browser moderni supporta la Performance API, compresi IE10 e IE11 (anche IE9 ha un supporto limitato). Potete rilevare la presenza dell&#8217;API in questo modo:<\/p>\n<pre><code>if ('performance' in window) {\n  \/\/ use Performance API\n}<\/code><\/pre>\n<p>Non \u00e8 possibile effettuare un Polyfill completo dell&#8217;API, quindi fate attenzione ai browser mancanti. Se il 90% dei vostri utenti naviga felicemente con Internet Explorer 8, misurerete solo il 10% dei clienti con applicazioni pi\u00f9 performanti.<\/p>\n<p>L&#8217;API pu\u00f2 essere utilizzata nei <a href=\"https:\/\/developer.mozilla.org\/docs\/Web\/API\/Web_Workers_API\/Using_web_workers\">Web Worker<\/a>, che forniscono un modo per eseguire calcoli complessi in un thread in background senza interrompere le operazioni del browser.<\/p>\n<p>La maggior parte dei metodi dell&#8217;API pu\u00f2 essere utilizzata in Node.js lato server con il <a href=\"https:\/\/nodejs.org\/dist\/latest\/docs\/api\/perf_hooks.html\">modulo standard perf_hooks<\/a>:<\/p>\n<pre><code>\/\/ Node.js performance\nimport { performance } from 'node:perf_hooks';\n\/\/ or in Common JS: const { performance } = require('node:perf_hooks');\n\nconsole.log( performance.now() );<\/code><\/pre>\n<p>Deno fornisce la <a href=\"https:\/\/doc.deno.land\/deno\/stable\/~\/Performance\">Performance API standard<\/a>:<\/p>\n<pre><code>\/\/ Deno performance\nconsole.log( performance.now() );<\/code><\/pre>\n<p>Per abilitare la misurazione del tempo ad alta risoluzione, dovrai eseguire gli script con l&#8217;autorizzazione <code>--allow-hrtime<\/code>:<\/p>\n<pre><code>deno run --allow-hrtime index.js<\/code><\/pre>\n<p>Le prestazioni lato server sono solitamente pi\u00f9 facili da valutare e gestire perch\u00e9 dipendono dal carico, dalla CPU, dalla RAM, dai dischi rigidi e dai <a href=\"https:\/\/kinsta.com\/it\/blog\/spazio-su-disco-hosting-wordpress\/\">limiti dei servizi cloud<\/a>. Gli aggiornamenti dell&#8217;hardware o le opzioni di gestione dei processi come <a href=\"https:\/\/pm2.keymetrics.io\/\">PM2<\/a>, <a href=\"https:\/\/nodejs.org\/api\/cluster.html\">clustering<\/a> e <a href=\"https:\/\/kubernetes.io\/\">Kubernetes<\/a> possono essere pi\u00f9 efficaci della rifattorizzazione del codice.<\/p>\n<p>Per questo motivo, le sezioni seguenti si concentrano sulle prestazioni del lato client.<\/p>\n<h2>Misurazione Personalizzata delle Prestazioni<\/h2>\n<p>La Performance API pu\u00f2 essere usata per cronometrare la velocit\u00e0 di esecuzione delle funzioni della vostra applicazione. Potreste aver usato o incontrato funzioni di cronometraggio che usano <a href=\"https:\/\/developer.mozilla.org\/docs\/Web\/JavaScript\/Reference\/Global_Objects\/Date\"><code>Date()<\/code><\/a>:<\/p>\n<pre><code>const timeStart = new Date();\nrunMyCode();\nconst timeTaken = new Date() - timeStart;\n\nconsole.log(`runMyCode() executed in ${ timeTaken }ms`);<\/code><\/pre>\n<p>La Performance API offre due vantaggi principali:<\/p>\n<ol>\n<li><strong>Migliore accuratezza:<\/strong> <code>Date()<\/code> misura al millisecondo, ma la Performance API pu\u00f2 misurare frazioni di millisecondo (a seconda del browser).<\/li>\n<li><strong>Migliore affidabilit\u00e0:<\/strong> L&#8217;utente o il sistema operativo possono modificare l&#8217;ora del sistema, quindi le metriche basate su <code>Date()<\/code> non saranno sempre accurate. Ci\u00f2 significa che le vostre funzioni potrebbero apparire particolarmente lente quando gli orologi si spostano in avanti!<\/li>\n<\/ol>\n<p>L&#8217;equivalente di <code>Date()<\/code> \u00e8 <a href=\"https:\/\/developer.mozilla.org\/docs\/Web\/API\/Performance\/now\"><code>performance.now()<\/code><\/a> che restituisce un timestamp ad alta risoluzione che viene azzerato quando inizia il processo responsabile della creazione del documento (la pagina \u00e8 stata caricata):<\/p>\n<pre><code>const timeStart = performance.now();\nrunMyCode();\nconst timeTaken = performance.now() - timeStart;\n\nconsole.log(`runMyCode() executed in ${ timeTaken }ms`);<\/code><\/pre>\n<p>Una propriet\u00e0 non standard <a href=\"https:\/\/developer.mozilla.org\/docs\/Web\/API\/Performance\/timeOrigin\"><code>performance.timeOrigin<\/code><\/a> pu\u00f2 anche restituire un timestamp a partire dal 1 gennaio 1970, anche se questo non \u00e8 disponibile in IE e Deno.<\/p>\n<p><code>performance.now()<\/code> diventa poco pratico quando si effettuano pi\u00f9 di poche misurazioni. La Performance API fornisce un buffer in cui \u00e8 possibile registrare gli eventi per un&#8217;analisi successiva, passando il nome di un&#8217;etichetta a <a href=\"https:\/\/developer.mozilla.org\/docs\/Web\/API\/Performance\/mark\"><code>performance.mark()<\/code><\/a>:<\/p>\n<pre><code>performance.mark('start:app');\nperformance.mark('start:init');\n\ninit(); \/\/ run initialization functions\n\nperformance.mark('end:init');\nperformance.mark('start:funcX');\n\nfuncX(); \/\/ run another function\n\nperformance.mark('end:funcX');\nperformance.mark('end:app');<\/code><\/pre>\n<p>Un array di tutti gli oggetti marcati nel buffer delle prestazioni pu\u00f2 essere estratto utilizzando:<\/p>\n<pre><code>const mark = performance.getEntriesByType('mark');<\/code><\/pre>\n<p>Risultato di esempio:<\/p>\n<pre><code>[\n\n  {\n    detail: null\n    duration: 0\n    entryType: \"mark\"\n    name: \"start:app\"\n    startTime: 1000\n  },\n  {\n    detail: null\n    duration: 0\n    entryType: \"mark\"\n    name: \"start:init\"\n    startTime: 1001\n  },\n  {\n    detail: null\n    duration: 0\n    entryType: \"mark\"\n    name: \"end:init\"\n    startTime: 1100\n  },\n...\n]<\/code><\/pre>\n<p>Il metodo <a href=\"https:\/\/developer.mozilla.org\/docs\/Web\/API\/Performance\/measure\"><code>performance.measure()<\/code><\/a> calcola il tempo tra due segni e lo memorizza nel buffer delle prestazioni. Si passa il nome di una nuova misura, il nome del segno iniziale (o null per misurare dal caricamento della pagina) e il nome del segno finale (o null per misurare l&#8217;ora corrente):<\/p>\n<pre><code>performance.measure('init', 'start:init', 'end:init');<\/code><\/pre>\n<p>Un <a href=\"https:\/\/developer.mozilla.org\/docs\/Web\/API\/PerformanceMeasure\">oggetto PerformanceMeasure<\/a> viene aggiunto al buffer con la durata calcolata. Per ottenere questo valore, potete richiedere un array di tutte le misure:<\/p>\n<pre><code>const measure = performance.getEntriesByType('measure');<\/code><\/pre>\n<p>oppure richiedere una misura in base al suo nome:<\/p>\n<pre><code>performance.getEntriesByName('init');<\/code><\/pre>\n<p>Esempio di risultato:<\/p>\n<pre><code>[\n  {\n    detail: null\n    duration: 99\n    entryType: \"measure\"\n    name: \"init\"\n    startTime: 1001\n  }\n]<\/code><\/pre>\n<h3>Usare il Performance Buffer<\/h3>\n<p>Oltre ai segni e alle misure, il Performance Buffer si usa per registrare automaticamente il navigation timing, il resource timing e il paint timing (di cui parleremo pi\u00f9 avanti). Potete ottenere un array di tutte le voci del buffer:<\/p>\n<pre><code>performance.getEntries();<\/code><\/pre>\n<p>Per impostazione predefinita, la maggior parte dei browser fornisce un buffer che memorizza fino a 150 metriche delle risorse. Questo dovrebbe essere sufficiente per la maggior parte delle valutazioni, ma potete aumentare o diminuire il limite del buffer se necessario:<\/p>\n<pre><code>\/\/ record 500 metrics\nperformance.setResourceTimingBufferSize(500);<\/code><\/pre>\n<p>I punteggi possono essere cancellati per nome oppure potete specificare un valore vuoto per cancellare tutti i punteggi:<\/p>\n<pre><code>performance.clearMarks('start:init');<\/code><\/pre>\n<p>Allo stesso modo, le misure possono essere cancellate con un nome o con un valore vuoto per cancellarle tutte:<\/p>\n<pre><code>performance.clearMeasures();<\/code><\/pre>\n<h3>Monitoraggio degli Aggiornamenti del Performance Buffer<\/h3>\n<p>Un <a href=\"https:\/\/developer.mozilla.org\/docs\/Web\/API\/PerformanceObserver\"><strong>PerformanceObserver<\/strong><\/a> pu\u00f2 monitorare le modifiche al buffer delle prestazioni ed eseguire una funzione quando si verificano eventi specifici. La sintassi vi sar\u00e0 familiare se avete usato il metodo <a href=\"https:\/\/developer.mozilla.org\/docs\/Web\/API\/MutationObserver\"><strong>MutationObserver<\/strong><\/a> per rispondere agli aggiornamenti del DOM o <a href=\"https:\/\/developer.mozilla.org\/docs\/Web\/API\/IntersectionObserver\"><strong>IntersectionObserver<\/strong><\/a> per rilevare quando gli elementi vengono fatti scorrere nel viewport.<\/p>\n<p>Dovete definire una funzione osservatore con due parametri:<\/p>\n<ol>\n<li>un array delle entry observer rilevate e<\/li>\n<li>l&#8217;observer object. Se necessario, il suo metodo <a href=\"https:\/\/developer.mozilla.org\/docs\/Web\/API\/PerformanceObserver\/disconnect\"><code>disconnect()<\/code><\/a> pu\u00f2 essere richiamato per fermare l\u2019observer.<\/li>\n<\/ol>\n<pre><code>function performanceCallback(list, observer) {\n\n  list.getEntries().forEach(entry =&gt; {\n    console.log(`name    : ${ entry.name }`);\n    console.log(`type    : ${ entry.type }`);\n    console.log(`start   : ${ entry.startTime }`);\n    console.log(`duration: ${ entry.duration }`);\n  });\n\n}<\/code><\/pre>\n<p>La funzione viene passata a un nuovo oggetto PerformanceObserver. Il suo metodo <a href=\"https:\/\/developer.mozilla.org\/docs\/Web\/API\/PerformanceObserver\/observe\"><code>observe()<\/code><\/a> riceve un array entryTypes di Performance Buffer da osservare:<\/p>\n<pre><code>let observer = new PerformanceObserver( performanceCallback );\nobserver.observe({ entryTypes: ['mark', 'measure'] });<\/code><\/pre>\n<p>In questo esempio, l&#8217;aggiunta di un nuovo punteggio o di una nuova misura esegue la funzione <code>performanceCallback()<\/code>. Anche se in questo caso si limita a registrare i messaggi, potrebbe essere utilizzata per attivare un caricamento di dati o per effettuare ulteriori calcoli.<\/p>\n<h3>Misurare la Paint Performance<\/h3>\n<p>L&#8217;API Paint Timing \u00e8 disponibile solo in JavaScript lato client e registra automaticamente due metriche importanti per i <a href=\"https:\/\/kinsta.com\/it\/blog\/core-web-vitals\/\">Core Web Vitals<\/a>:<\/p>\n<ol>\n<li><strong>first-paint:<\/strong> Il browser ha iniziato a rendere la pagina.<\/li>\n<li><strong>first-contentful-paint:<\/strong> Il browser ha reso il primo elemento significativo del contenuto DOM, come un titolo o un&#8217;immagine.<\/li>\n<\/ol>\n<p>Queste possono essere estratte dal buffer delle prestazioni in un array:<\/p>\n<pre><code>const paintTimes = performance.getEntriesByType('paint');<\/code><\/pre>\n<p>Fate attenzione a eseguire questa operazione prima che la pagina sia completamente caricata; i valori non saranno pronti. Attendete l&#8217;evento <a href=\"https:\/\/developer.mozilla.org\/docs\/Web\/API\/Window\/load_event\"><code>window.load<\/code><\/a> o usate un parametro <a href=\"https:\/\/docs.google.com\/document\/d\/1bO-CdqPOUVV0xaZkQMu5f5eHYxmV1RfoYVwPHXDRvyg\/edit#heading=h.y0ea1dh8xmx\"><code>PerformanceObserver<\/code><\/a> per monitorare <code>paint<\/code> entryTypes.<\/p>\n<p>Esempio di risultato:<\/p>\n<pre><code>[\n  {\n    \"name\": \"first-paint\",\n    \"entryType\": \"paint\",\n    \"startTime\": 812,\n    \"duration\": 0\n  },\n  {\n    \"name\": \"first-contentful-paint\",\n    \"entryType\": \"paint\",\n    \"startTime\": 856,\n    \"duration\": 0\n  }\n]<\/code><\/pre>\n<p>Un first-paint lento \u00e8 spesso causato da CSS o JavaScript che bloccano il rendering. Lo scarto rispetto al first-contentful-paint potrebbe essere elevato se il browser deve scaricare un&#8217;immagine di grandi dimensioni o <a href=\"https:\/\/kinsta.com\/it\/blog\/eliminare-javascript-e-css-che-boccano-la-visualizzazione\/\">renderizzare elementi complessi<\/a>.<\/p>\n<h2>Misurazione delle Resource Performance<\/h2>\n<p>I tempi di rete di risorse come immagini, fogli di stile e file JavaScript vengono registrati automaticamente nel Performance Buffer. Sebbene non si possa fare molto per risolvere i problemi di velocit\u00e0 della rete (a parte ridurre le dimensioni dei file), questa misurazione pu\u00f2 aiutare a evidenziare i problemi legati alle risorse pi\u00f9 grandi, alle risposte Ajax lente o agli script di terze parti che funzionano male.<\/p>\n<p>Un array di metriche <a href=\"https:\/\/developer.mozilla.org\/docs\/Web\/API\/PerformanceResourceTiming\">PerformanceResourceTiming<\/a> pu\u00f2 essere estratto dal buffer usando:<\/p>\n<pre><code>const resources = performance.getEntriesByType('resource');<\/code><\/pre>\n<p>In alternativa, potete recuperare le metriche di un asset passando il suo URL completo:<\/p>\n<pre><code>const resource = performance.getEntriesByName('https:\/\/test.com\/script.js');<\/code><\/pre>\n<p>Esempio di risultato:<\/p>\n<pre><code>[\n  {\n    connectEnd: 195,\n    connectStart: 195,\n    decodedBodySize: 0,\n    domainLookupEnd: 195,\n    domainLookupStart: 195,\n    duration: 2,\n    encodedBodySize: 0,\n    entryType: \"resource\",\n    fetchStart: 195,\n    initiatorType: \"script\",\n    name: \"https:\/\/test.com\/script.js\",\n    nextHopProtocol: \"h3\",\n    redirectEnd: 0,\n    redirectStart: 0,\n    requestStart: 195,\n    responseEnd: 197,\n    responseStart: 197,\n    secureConnectionStart: 195,\n    serverTiming: [],\n    startTime: 195,\n    transferSize: 0,\n    workerStart: 195\n  }\n]<\/code><\/pre>\n<p>\u00c8 possibile esaminare le seguenti propriet\u00e0:<\/p>\n<ul>\n<li><strong>name<\/strong>: URL della risorsa<\/li>\n<li><strong>entryType<\/strong>: &#8220;resource&#8221;<\/li>\n<li><strong>initiatorType<\/strong>: Come \u00e8 stata avviata la risorsa, per esempio &#8220;script&#8221; o &#8220;link&#8221;<\/li>\n<li><strong>serverTiming<\/strong>: Un array di oggetti <a href=\"https:\/\/developer.mozilla.org\/docs\/Web\/API\/PerformanceServerTiming\"><code>PerformanceServerTiming<\/code><\/a> passati dal server nell&#8217;<a href=\"https:\/\/developer.mozilla.org\/docs\/Web\/HTTP\/Headers\/Server-Timing\">header HTTP Server-Timing<\/a> (l&#8217;applicazione lato server potrebbe inviare le metriche al client per ulteriori analisi)<\/li>\n<li><strong>startTime<\/strong>: Timestamp dell&#8217;inizio del fetch<\/li>\n<li><strong>nextHopProtocol<\/strong>: Protocollo di rete utilizzato<\/li>\n<li><strong>workerStart<\/strong>: Timestamp prima dell&#8217;avvio di un Service Worker di Progressive Web App (0 se la richiesta non viene intercettata da un Service Worker)<\/li>\n<li><strong>redirectStart<\/strong>: Timestamp dell&#8217;inizio di un redirect<\/li>\n<li><strong>redirectEnd<\/strong>: Timestamp dopo l&#8217;ultimo byte dell&#8217;ultima risposta di redirect<\/li>\n<li><strong>fetchStart<\/strong>: Timestamp prima del recupero della risorsa<\/li>\n<li><strong>domainLookupStart<\/strong>: Timestamp prima di una ricerca DNS<\/li>\n<li><strong>domainLookupEnd<\/strong>: Timestamp dopo la ricerca DNS<\/li>\n<li><strong>connectStart<\/strong>: Timestamp prima di stabilire una connessione al server<\/li>\n<li><strong>connectEnd<\/strong>: Timestamp dopo aver stabilito una connessione al server<\/li>\n<li><strong>secureConnectionStart<\/strong>: Timestamp prima dell&#8217;handshake SSL<\/li>\n<li><strong>requestStart<\/strong>: Timestamp prima che il browser richieda la risorsa<\/li>\n<li><strong>responseStart<\/strong>: Timestamp in cui il browser riceve il primo byte di dati<\/li>\n<li><strong>responseEnd<\/strong>: Timestamp dopo la ricezione dell&#8217;ultimo byte o la chiusura della connessione<\/li>\n<li><strong>duration<\/strong>: La differenza tra startTime e responseEnd<\/li>\n<li><strong>transferSize<\/strong>: La dimensione della risorsa in byte che include l\u2019header e il body compresso<\/li>\n<li><strong>encodedBodySize<\/strong>: Il corpo della risorsa in byte prima della decompressione<\/li>\n<li><strong>decodedBodySize<\/strong>: Il corpo della risorsa in byte dopo la decompressione<\/li>\n<\/ul>\n<p>Questo esempio di script recupera tutte le richieste Ajax avviate dall&#8217;<a href=\"https:\/\/developer.mozilla.org\/docs\/Web\/API\/Fetch_API\">API Fetch<\/a> e restituisce la dimensione e la durata totale del trasferimento:<\/p>\n<pre><code>const fetchAll = performance.getEntriesByType('resource')\n  .filter( r =&gt; r.initiatorType === 'fetch')\n  .reduce( (sum, current) =&gt; {\n    return {\n      transferSize: sum.transferSize += current.transferSize,\n      duration: sum.duration += current.duration\n    }\n  },\n  { transferSize: 0, duration: 0 }\n);<\/code><\/pre>\n<h2>Misurazione della Navigation Performance<\/h2>\n<p>I tempi di rete per lo scaricamento della pagina precedente e il caricamento della pagina corrente vengono registrati automaticamente nel Performance Buffer come un singolo oggetto <a href=\"https:\/\/developer.mozilla.org\/docs\/Web\/API\/PerformanceNavigationTiming\"><code>PerformanceNavigationTiming<\/code><\/a>.<\/p>\n<p>Estraetelo in un array utilizzando:<\/p>\n<pre><code>const pageTime = performance.getEntriesByType('navigation');<\/code><\/pre>\n<p>&#8230;o passando l&#8217;URL della pagina a <code>.getEntriesByName()<\/code>:<\/p>\n<pre><code>const pageTiming = performance.getEntriesByName(window.location);<\/code><\/pre>\n<p>Le metriche sono identiche a quelle delle <a href=\"https:\/\/docs.google.com\/document\/d\/1bO-CdqPOUVV0xaZkQMu5f5eHYxmV1RfoYVwPHXDRvyg\/edit#heading=h.k94hcflv9m3o\">risorse<\/a> ma includono anche valori specifici della pagina:<\/p>\n<ul>\n<li><strong>entryType<\/strong>: Per esempio &#8220;navigation&#8221;<\/li>\n<li><strong>tipo<\/strong>: O &#8220;navigation&#8221;, &#8220;reload&#8221;, &#8220;back_forward&#8221; o &#8220;prerender&#8221;<\/li>\n<li><strong>redirectCount<\/strong>: Il numero di reindirizzamenti<\/li>\n<li><strong>unloadEventStart<\/strong>: Timestamp prima dell&#8217;evento di scarico del documento precedente<\/li>\n<li><strong>unloadEventEnd<\/strong>: Timestamp dopo l&#8217;evento di unload del documento precedente<\/li>\n<li><strong>domInteractive<\/strong>: Timestamp in cui il browser ha analizzato l&#8217;HTML e costruito il DOM<\/li>\n<li><strong>domContentLoadedEventStart<\/strong>: Timestamp prima che si attivi l&#8217;evento DOMContentLoaded del documento<\/li>\n<li><strong>domContentLoadedEventEnd<\/strong>: Timestamp dopo il completamento dell&#8217;evento DOMContentLoaded del documento<\/li>\n<li><strong>domComplete<\/strong>: Timestamp dopo che la costruzione del DOM e gli eventi DOMContentLoaded sono stati completati<\/li>\n<li><strong>loadEventStart<\/strong>: Timestamp prima che l&#8217;evento load della pagina sia stato attivato<\/li>\n<li><strong>loadEventEnd<\/strong>: Timestamp dopo l&#8217;evento di caricamento della pagina e tutte le risorse sono disponibili<\/li>\n<\/ul>\n<p>I problemi tipici includono:<\/p>\n<ul>\n<li>Un lungo ritardo tra <strong>unloadEventEnd<\/strong> e <strong>domInteractive<\/strong>. Questo potrebbe indicare una risposta lenta del server.<\/li>\n<li>Un lungo ritardo tra <strong>domContentLoadedEventStart<\/strong> e <strong>domComplete<\/strong>. Questo potrebbe indicare che gli script di avvio della pagina sono troppo lenti.<\/li>\n<li>Un lungo ritardo tra <strong>domComplete<\/strong> e <strong>loadEventEnd<\/strong>. Questo potrebbe indicare che la pagina ha troppe risorse o che alcune di esse richiedono troppo tempo per essere caricate.<\/li>\n<\/ul>\n<h2>Registrazione e Analisi della Performance<\/h2>\n<p>La Performance API vi permette di raccogliere i dati di utilizzo reali e di caricarli su un server per ulteriori analisi. <i>Potreste<\/i> usare un <a href=\"https:\/\/kinsta.com\/it\/blog\/alternative-a-google-analytics\/\">servizio di terze parti come Google Analytics<\/a> per archiviare i dati, ma c&#8217;\u00e8 il rischio che lo script di terze parti venga bloccato o introduca nuovi problemi di prestazioni. La vostra soluzione pu\u00f2 essere personalizzata in base alle vostre esigenze per garantire che il monitoraggio non influisca sulle altre funzionalit\u00e0.<\/p>\n<p>Fate attenzione alle situazioni in cui non \u00e8 possibile determinare le statistiche, magari perch\u00e9 gli utenti usano browser vecchi, bloccano JavaScript o si trovano dietro un proxy aziendale. Capire quali dati mancano pu\u00f2 essere pi\u00f9 proficuo che fare ipotesi basate su informazioni incomplete.<\/p>\n<p>Idealmente, i vostri script di analisi non devono avere un impatto negativo sulle prestazioni eseguendo calcoli complessi o caricando grandi quantit\u00e0 di dati. Considerate l&#8217;utilizzo di web worker e di ridurre al minimo l&#8217;uso di chiamate sincrone a localStorage. \u00c8 sempre possibile elaborare i dati grezzi in batch in un secondo momento.<\/p>\n<p>Infine, fate attenzione ai valori anomali, come i dispositivi e le connessioni molto veloci o molto lente, che influiscono negativamente sulle statistiche. Per esempio, se 9 utenti caricano una pagina in 2 secondi ma il decimo la scarica in 60 secondi, la latenza media \u00e8 di quasi 8 secondi. Un parametro pi\u00f9 realistico \u00e8 la mediana (2 secondi) o il 90\u00b0 percentile (9 utenti su 10 hanno un tempo di caricamento di 2 secondi o meno).<\/p>\n<h2>Riepilogo<\/h2>\n<p>Le <a href=\"https:\/\/kinsta.com\/it\/blog\/monitoraggio-prestazioni-applicazioni\/\">performance web<\/a> rimangono un <a href=\"https:\/\/kinsta.com\/it\/blog\/sviluppatore-frontend\/\">fattore critico per chi lavora come frontend developer<\/a>. Gli utenti si aspettano che i siti e le applicazioni siano responsive sulla maggior parte dei dispositivi. Anche l&#8217;ottimizzazione per i motori di ricerca pu\u00f2 risentirne perch\u00e9 i <a href=\"https:\/\/kinsta.com\/it\/blog\/core-web-vitals\/\">siti pi\u00f9 lenti vengono declassati da Google<\/a>.<br \/>\n<br \/>\nEsistono molti <a href=\"https:\/\/kinsta.com\/it\/blog\/monitoraggio-prestazioni-applicazioni\/\">strumenti di monitoraggio delle prestazioni<\/a>, ma la maggior parte di essi valuta la velocit\u00e0 di esecuzione lato server o usa un numero limitato di client idonei per valutare il rendering del browser. La Performance API offre un modo per raccogliere le metriche reali degli utenti che non sarebbe possibile calcolare in altro modo.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>La Performance API misura la reattivit\u00e0 della vostra applicazione web live su dispositivi e connessioni di rete reali. Pu\u00f2 aiutare a identificare i colli di bottiglia &#8230;<\/p>\n","protected":false},"author":188,"featured_media":58938,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[21446,25619,25648,25627,17413,25628],"topic":[25847],"class_list":["post-58937","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","tag-api","tag-browsers","tag-javascript","tag-node-js","tag-performance","tag-performance-testing","topic-tutorial-javascript"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v24.6 (Yoast SEO v24.6) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Introduzione alla Performance API<\/title>\n<meta name=\"description\" content=\"Impara a usare la Performance API per misurare la reattivit\u00e0 della tua applicazione web live su dispositivi e connessioni di rete reali.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kinsta.com\/it\/blog\/performance-api\/\" \/>\n<meta property=\"og:locale\" content=\"it_IT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Introduzione alla Performance API\" \/>\n<meta property=\"og:description\" content=\"Impara a usare la Performance API per misurare la reattivit\u00e0 della tua applicazione web live su dispositivi e connessioni di rete reali.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/it\/blog\/performance-api\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/kinstaitalia\/\" \/>\n<meta property=\"article:published_time\" content=\"2022-08-11T12:29:20+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-02-02T07:16:13+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2022\/08\/performance-api.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1460\" \/>\n\t<meta property=\"og:image:height\" content=\"730\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Craig Buckler\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"Impara a usare la Performance API per misurare la reattivit\u00e0 della tua applicazione web live su dispositivi e connessioni di rete reali.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2022\/08\/performance-api.png\" \/>\n<meta name=\"twitter:creator\" content=\"@craigbuckler\" \/>\n<meta name=\"twitter:site\" content=\"@Kinsta_IT\" \/>\n<meta name=\"twitter:label1\" content=\"Scritto da\" \/>\n\t<meta name=\"twitter:data1\" content=\"Craig Buckler\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo di lettura stimato\" \/>\n\t<meta name=\"twitter:data2\" content=\"12 minuti\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/it\/blog\/performance-api\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/performance-api\/\"},\"author\":{\"name\":\"Craig Buckler\",\"@id\":\"https:\/\/kinsta.com\/it\/#\/schema\/person\/715d986404b06691ab3014e06596908e\"},\"headline\":\"Introduzione alla Performance API\",\"datePublished\":\"2022-08-11T12:29:20+00:00\",\"dateModified\":\"2023-02-02T07:16:13+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/performance-api\/\"},\"wordCount\":2063,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/it\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/performance-api\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2022\/08\/performance-api.png\",\"keywords\":[\"API\",\"Browsers\",\"JavaScript\",\"node.js\",\"performance\",\"performance testing\"],\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/it\/blog\/performance-api\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/it\/blog\/performance-api\/\",\"url\":\"https:\/\/kinsta.com\/it\/blog\/performance-api\/\",\"name\":\"Introduzione alla Performance API\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/it\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/performance-api\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/performance-api\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2022\/08\/performance-api.png\",\"datePublished\":\"2022-08-11T12:29:20+00:00\",\"dateModified\":\"2023-02-02T07:16:13+00:00\",\"description\":\"Impara a usare la Performance API per misurare la reattivit\u00e0 della tua applicazione web live su dispositivi e connessioni di rete reali.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/performance-api\/#breadcrumb\"},\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/it\/blog\/performance-api\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/kinsta.com\/it\/blog\/performance-api\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2022\/08\/performance-api.png\",\"contentUrl\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2022\/08\/performance-api.png\",\"width\":1460,\"height\":730,\"caption\":\"Introduzione alla Performance API\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/it\/blog\/performance-api\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/it\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Tutorial JavaScript\",\"item\":\"https:\/\/kinsta.com\/it\/argomenti\/tutorial-javascript\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Introduzione alla Performance API\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/it\/#website\",\"url\":\"https:\/\/kinsta.com\/it\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Soluzioni di hosting premium, veloci e sicure\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/it\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/it\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"it-IT\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/it\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/it\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/kinsta.com\/it\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/it\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/kinstaitalia\/\",\"https:\/\/x.com\/Kinsta_IT\",\"https:\/\/www.instagram.com\/kinstahosting\/\",\"https:\/\/www.linkedin.com\/company\/kinsta\/\",\"https:\/\/www.pinterest.com\/kinstahosting\/\",\"https:\/\/www.youtube.com\/c\/Kinsta\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/kinsta.com\/it\/#\/schema\/person\/715d986404b06691ab3014e06596908e\",\"name\":\"Craig Buckler\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/kinsta.com\/it\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/8e76011e66720bd2e3e24e164aa6f0b2?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/8e76011e66720bd2e3e24e164aa6f0b2?s=96&d=mm&r=g\",\"caption\":\"Craig Buckler\"},\"description\":\"Freelance UK web developer, writer, and speaker. Has been around a long time and rants about standards and performance.\",\"sameAs\":[\"https:\/\/craigbuckler.com\/\",\"https:\/\/www.linkedin.com\/in\/craigbuckler\",\"https:\/\/x.com\/craigbuckler\",\"https:\/\/www.youtube.com\/channel\/UCQwdl5oBTWGhifS6bRGADMQ\"],\"url\":\"https:\/\/kinsta.com\/it\/blog\/author\/craigbuckler\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Introduzione alla Performance API","description":"Impara a usare la Performance API per misurare la reattivit\u00e0 della tua applicazione web live su dispositivi e connessioni di rete reali.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/kinsta.com\/it\/blog\/performance-api\/","og_locale":"it_IT","og_type":"article","og_title":"Introduzione alla Performance API","og_description":"Impara a usare la Performance API per misurare la reattivit\u00e0 della tua applicazione web live su dispositivi e connessioni di rete reali.","og_url":"https:\/\/kinsta.com\/it\/blog\/performance-api\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinstaitalia\/","article_published_time":"2022-08-11T12:29:20+00:00","article_modified_time":"2023-02-02T07:16:13+00:00","og_image":[{"width":1460,"height":730,"url":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2022\/08\/performance-api.png","type":"image\/png"}],"author":"Craig Buckler","twitter_card":"summary_large_image","twitter_description":"Impara a usare la Performance API per misurare la reattivit\u00e0 della tua applicazione web live su dispositivi e connessioni di rete reali.","twitter_image":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2022\/08\/performance-api.png","twitter_creator":"@craigbuckler","twitter_site":"@Kinsta_IT","twitter_misc":{"Scritto da":"Craig Buckler","Tempo di lettura stimato":"12 minuti"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/it\/blog\/performance-api\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/it\/blog\/performance-api\/"},"author":{"name":"Craig Buckler","@id":"https:\/\/kinsta.com\/it\/#\/schema\/person\/715d986404b06691ab3014e06596908e"},"headline":"Introduzione alla Performance API","datePublished":"2022-08-11T12:29:20+00:00","dateModified":"2023-02-02T07:16:13+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/it\/blog\/performance-api\/"},"wordCount":2063,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/it\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/it\/blog\/performance-api\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2022\/08\/performance-api.png","keywords":["API","Browsers","JavaScript","node.js","performance","performance testing"],"inLanguage":"it-IT","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/it\/blog\/performance-api\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/it\/blog\/performance-api\/","url":"https:\/\/kinsta.com\/it\/blog\/performance-api\/","name":"Introduzione alla Performance API","isPartOf":{"@id":"https:\/\/kinsta.com\/it\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/it\/blog\/performance-api\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/it\/blog\/performance-api\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2022\/08\/performance-api.png","datePublished":"2022-08-11T12:29:20+00:00","dateModified":"2023-02-02T07:16:13+00:00","description":"Impara a usare la Performance API per misurare la reattivit\u00e0 della tua applicazione web live su dispositivi e connessioni di rete reali.","breadcrumb":{"@id":"https:\/\/kinsta.com\/it\/blog\/performance-api\/#breadcrumb"},"inLanguage":"it-IT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/it\/blog\/performance-api\/"]}]},{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/kinsta.com\/it\/blog\/performance-api\/#primaryimage","url":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2022\/08\/performance-api.png","contentUrl":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2022\/08\/performance-api.png","width":1460,"height":730,"caption":"Introduzione alla Performance API"},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/it\/blog\/performance-api\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/it\/"},{"@type":"ListItem","position":2,"name":"Tutorial JavaScript","item":"https:\/\/kinsta.com\/it\/argomenti\/tutorial-javascript\/"},{"@type":"ListItem","position":3,"name":"Introduzione alla Performance API"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/it\/#website","url":"https:\/\/kinsta.com\/it\/","name":"Kinsta\u00ae","description":"Soluzioni di hosting premium, veloci e sicure","publisher":{"@id":"https:\/\/kinsta.com\/it\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/it\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"it-IT"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/it\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/it\/","logo":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/kinsta.com\/it\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/it\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kinstaitalia\/","https:\/\/x.com\/Kinsta_IT","https:\/\/www.instagram.com\/kinstahosting\/","https:\/\/www.linkedin.com\/company\/kinsta\/","https:\/\/www.pinterest.com\/kinstahosting\/","https:\/\/www.youtube.com\/c\/Kinsta"]},{"@type":"Person","@id":"https:\/\/kinsta.com\/it\/#\/schema\/person\/715d986404b06691ab3014e06596908e","name":"Craig Buckler","image":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/kinsta.com\/it\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/8e76011e66720bd2e3e24e164aa6f0b2?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/8e76011e66720bd2e3e24e164aa6f0b2?s=96&d=mm&r=g","caption":"Craig Buckler"},"description":"Freelance UK web developer, writer, and speaker. Has been around a long time and rants about standards and performance.","sameAs":["https:\/\/craigbuckler.com\/","https:\/\/www.linkedin.com\/in\/craigbuckler","https:\/\/x.com\/craigbuckler","https:\/\/www.youtube.com\/channel\/UCQwdl5oBTWGhifS6bRGADMQ"],"url":"https:\/\/kinsta.com\/it\/blog\/author\/craigbuckler\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/posts\/58937","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/users\/188"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/comments?post=58937"}],"version-history":[{"count":5,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/posts\/58937\/revisions"}],"predecessor-version":[{"id":59195,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/posts\/58937\/revisions\/59195"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/58937\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/58937\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/58937\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/58937\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/58937\/translations\/de"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/58937\/translations\/es"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/58937\/translations\/nl"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/58937\/translations\/jp"},{"href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/58937\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/media\/58938"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/media?parent=58937"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/tags?post=58937"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/topic?post=58937"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}