{"id":570,"date":"2026-06-22T10:00:00","date_gmt":"2026-06-22T10:00:00","guid":{"rendered":"https:\/\/zydeno.com\/?p=570"},"modified":"2026-10-14T16:43:18","modified_gmt":"2026-10-14T16:43:18","slug":"lossessione-per-lavvio-a-freddo","status":"publish","type":"post","link":"https:\/\/zydeno.com\/it\/lossessione-per-lavvio-a-freddo\/","title":{"rendered":"L'ossessione per l'avvio a freddo"},"content":{"rendered":"<p>L'avvio a freddo \u00e8 la prima promessa che un'app fa al proprio utente. Se ci vuole pi\u00f9 di un secondo prima che diventi utilizzabile, abbiamo gi\u00e0 fatto capire a chi la sta utilizzando che si tratta di un'app lenta, indipendentemente dalla velocit\u00e0 con cui funzioner\u00e0 in seguito.<\/p>\n<p>\u00c8 anche il momento che gli utenti vivono pi\u00f9 spesso. Un\u2019app per monitorare le abitudini viene aperta per pochi secondi per spuntare qualcosa. Un\u2019app per monitorare l\u2019emicrania viene aperta quando qualcuno non si sente bene e vuole registrare rapidamente il disturbo. Per app come queste, l\u2019avvio non \u00e8 un preludio all\u2019esperienza: \u00e8 la maggior parte dell\u2019esperienza stessa.<\/p>\n<h2>Il nostro obiettivo<\/h2>\n<p>Il nostro obiettivo \u00e8 <strong>meno di 600 ms<\/strong> Dal tocco dell\u2019icona all\u2019interfaccia utente interattiva su un iPhone di cinque anni fa. Questo avviene dopo che il sistema operativo ha caricato il file binario, allocato la memoria e ci ha fornito il thread principale. Tutto ci\u00f2 che accade tra quel passaggio di consegne e il primo fotogramma dipende da noi.<\/p>\n<p>\u201cInterattivo\u201d \u00e8 la parola chiave. Una schermata iniziale che appare all\u2019istante e poi rimane l\u00ec ferma non conta. E nemmeno un primo fotogramma pieno di segnaposto che si riorganizzano un attimo dopo. L\u2019obiettivo \u00e8 il momento in cui puoi toccare ci\u00f2 che stavi cercando e questo risponde.<\/p>\n<p>Effettuiamo le misurazioni sul vecchio dispositivo, non su quello nuovo, proprio per lo stesso motivo per cui effettuiamo i test proprio l\u00ec: il telefono pi\u00f9 recente nasconderebbe praticamente qualsiasi errore.<\/p>\n<h2>Cosa impone<\/h2>\n<p>Raggiungere quella cifra mette subito fine a molte discussioni. Il networking non pu\u00f2 avvenire durante la fase di lancio. Gli SDK di terze parti sono difficili da far accettare: la maggior parte di essi genera attivit\u00e0 in background prima che <code>application(_:didFinishLaunching\u2026)<\/code> restituisce anche i risultati. Le cache delle immagini vengono caricate in modo differito. Le migrazioni del database vengono eseguite in una coda in background, senza mai bloccare quella principale.<\/p>\n<p>Da ci\u00f2 derivano alcune abitudini. La prima schermata viene generata dai dati gi\u00e0 presenti sul dispositivo, quindi l\u2019app mostra immediatamente contenuti reali e si aggiorna in modo discreto se necessario. Le funzionalit\u00e0 non necessarie nella prima schermata non vengono configurate finch\u00e9 qualcuno non le richiede. E ogni volta che siamo tentati di aggiungere una libreria, ci chiediamo innanzitutto quale sia la sua funzione al momento del lancio, prima ancora di chiederci cosa possa fare per noi.<\/p>\n<h2>I compromessi<\/h2>\n<p>Questa disciplina ha un costo. Rinunciare a un SDK pronto all\u2019uso a volte significa scrivere e mantenere da soli il codice equivalente. Mostrare prima i dati locali significa progettare tenendo conto del caso in cui questi siano leggermente obsoleti. Il caricamento differito richiede un\u2019attenzione particolare per evitare rallentamenti la prima volta che si apre una schermata pi\u00f9 pesante. Accettiamo questi costi perch\u00e9 l\u2019alternativa \u00e8 un piccolo rallentamento ad ogni singolo avvio, per sempre, per tutti.<\/p>\n<h2>Cosa abbiamo sbagliato<\/h2>\n<p>Il tempo di avvio raramente subisce un cambiamento drastico in un colpo solo. Si deteriora gradualmente: un po\u2019 di codice di configurazione qui, un controllo in pi\u00f9 l\u00e0, ciascuno innocuo di per s\u00e9. L\u2019abbiamo imparato a nostre spese, accorcendocene troppo tardi che un\u2019app era diventata pi\u00f9 lenta ad aprirsi senza che ci fosse un singolo commit da incolpare. Ora il tempo di avvio viene verificato sul dispositivo di riferimento come parte integrante di ogni release, in modo che eventuali scostamenti vengano individuati quando sono ancora minimi.<\/p>\n<p>Lo stesso principio vale anche per le nostre altre piattaforme. Un'app Windows o un popup di un'estensione del browser hanno una propria versione di \"cold start\", e vale la stessa regola: mostrare subito qualcosa di utile, rimandando tutto il resto.<\/p>\n<h2>Perch\u00e9 ne vale la pena<\/h2>\n<p>La disciplina si ripaga da sola. Quando il lancio \u00e8 veloce, lo \u00e8 anche tutto il resto \u2014 perch\u00e9 le stesse regole valgono ovunque.<\/p>","protected":false},"excerpt":{"rendered":"<p>Perch\u00e9 misuriamo il tempo di avvio delle app in millisecondi \u2014 e perch\u00e9 questo cambia il modo in cui viene sviluppato tutto il resto.<\/p>","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-570","post","type-post","status-publish","format-standard","hentry","category-journal"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v22.2 (Yoast SEO v22.2) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>The cold-start obsession - Zydeno Studio<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/zydeno.com\/it\/lossessione-per-lavvio-a-freddo\/\" \/>\n<meta property=\"og:locale\" content=\"it_IT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"The cold-start obsession\" \/>\n<meta property=\"og:description\" content=\"Why we count app launch time in milliseconds \u2014 and why it changes how everything else gets built.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/zydeno.com\/it\/lossessione-per-lavvio-a-freddo\/\" \/>\n<meta property=\"og:site_name\" content=\"Zydeno Studio\" \/>\n<meta property=\"article:published_time\" content=\"2026-06-22T10:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-10-14T16:43:18+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/zydeno.com\/wp-content\/uploads\/2026\/10\/zydeno-social.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Andrii Matiushev\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Scritto da\" \/>\n\t<meta name=\"twitter:data1\" content=\"Andrii Matiushev\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo di lettura stimato\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minuti\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":[\"Article\",\"BlogPosting\"],\"@id\":\"https:\/\/zydeno.com\/the-cold-start-obsession\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/zydeno.com\/the-cold-start-obsession\/\"},\"author\":{\"name\":\"Andrii Matiushev\",\"@id\":\"https:\/\/zydeno.com\/#\/schema\/person\/1af4d0e254f05b407f306ede28252259\"},\"headline\":\"The cold-start obsession\",\"datePublished\":\"2026-06-22T10:00:00+00:00\",\"dateModified\":\"2026-10-14T16:43:18+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/zydeno.com\/the-cold-start-obsession\/\"},\"wordCount\":577,\"publisher\":{\"@id\":\"https:\/\/zydeno.com\/#organization\"},\"articleSection\":[\"Journal\"],\"inLanguage\":\"it-IT\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/zydeno.com\/the-cold-start-obsession\/\",\"url\":\"https:\/\/zydeno.com\/the-cold-start-obsession\/\",\"name\":\"The cold-start obsession - Zydeno Studio\",\"isPartOf\":{\"@id\":\"https:\/\/zydeno.com\/#website\"},\"datePublished\":\"2026-06-22T10:00:00+00:00\",\"dateModified\":\"2026-10-14T16:43:18+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/zydeno.com\/the-cold-start-obsession\/#breadcrumb\"},\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/zydeno.com\/the-cold-start-obsession\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/zydeno.com\/the-cold-start-obsession\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/zydeno.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"The cold-start obsession\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/zydeno.com\/#website\",\"url\":\"https:\/\/zydeno.com\/\",\"name\":\"Zydeno Studio\",\"description\":\"Zydeno is an indie studio designing apps across many categories \u2014 united by a shared obsession with craft and detail. Fast, opinionated, independent apps for iPhone, Android, Windows and Mac, plus extensions for Chrome, Edge and Firefox. Built slowly, shipped carefully.\",\"publisher\":{\"@id\":\"https:\/\/zydeno.com\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/zydeno.com\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"it-IT\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/zydeno.com\/#organization\",\"name\":\"Zydeno Studio\",\"url\":\"https:\/\/zydeno.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/zydeno.com\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/zydeno.com\/wp-content\/uploads\/2026\/04\/cropped-icon-512-1.png\",\"contentUrl\":\"https:\/\/zydeno.com\/wp-content\/uploads\/2026\/04\/cropped-icon-512-1.png\",\"width\":512,\"height\":512,\"caption\":\"Zydeno Studio\"},\"image\":{\"@id\":\"https:\/\/zydeno.com\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/zydeno.com\/#\/schema\/person\/1af4d0e254f05b407f306ede28252259\",\"name\":\"Andrii Matiushev\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/zydeno.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/4df57b6b4737601c798e728e7d4d209a9a9513422db2b613ff707286cb1ea58a?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/4df57b6b4737601c798e728e7d4d209a9a9513422db2b613ff707286cb1ea58a?s=96&d=mm&r=g\",\"caption\":\"Andrii Matiushev\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"L'ossessione per l'avvio a freddo - Zydeno Studio","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:\/\/zydeno.com\/it\/lossessione-per-lavvio-a-freddo\/","og_locale":"it_IT","og_type":"article","og_title":"The cold-start obsession","og_description":"Why we count app launch time in milliseconds \u2014 and why it changes how everything else gets built.","og_url":"https:\/\/zydeno.com\/it\/lossessione-per-lavvio-a-freddo\/","og_site_name":"Zydeno Studio","article_published_time":"2026-06-22T10:00:00+00:00","article_modified_time":"2026-10-14T16:43:18+00:00","og_image":[{"width":1200,"height":630,"url":"https:\/\/zydeno.com\/wp-content\/uploads\/2026\/10\/zydeno-social.png","type":"image\/png"}],"author":"Andrii Matiushev","twitter_card":"summary_large_image","twitter_misc":{"Scritto da":"Andrii Matiushev","Tempo di lettura stimato":"3 minuti"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":["Article","BlogPosting"],"@id":"https:\/\/zydeno.com\/the-cold-start-obsession\/#article","isPartOf":{"@id":"https:\/\/zydeno.com\/the-cold-start-obsession\/"},"author":{"name":"Andrii Matiushev","@id":"https:\/\/zydeno.com\/#\/schema\/person\/1af4d0e254f05b407f306ede28252259"},"headline":"The cold-start obsession","datePublished":"2026-06-22T10:00:00+00:00","dateModified":"2026-10-14T16:43:18+00:00","mainEntityOfPage":{"@id":"https:\/\/zydeno.com\/the-cold-start-obsession\/"},"wordCount":577,"publisher":{"@id":"https:\/\/zydeno.com\/#organization"},"articleSection":["Journal"],"inLanguage":"it-IT"},{"@type":"WebPage","@id":"https:\/\/zydeno.com\/the-cold-start-obsession\/","url":"https:\/\/zydeno.com\/the-cold-start-obsession\/","name":"L'ossessione per l'avvio a freddo - Zydeno Studio","isPartOf":{"@id":"https:\/\/zydeno.com\/#website"},"datePublished":"2026-06-22T10:00:00+00:00","dateModified":"2026-10-14T16:43:18+00:00","breadcrumb":{"@id":"https:\/\/zydeno.com\/the-cold-start-obsession\/#breadcrumb"},"inLanguage":"it-IT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/zydeno.com\/the-cold-start-obsession\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/zydeno.com\/the-cold-start-obsession\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/zydeno.com\/"},{"@type":"ListItem","position":2,"name":"The cold-start obsession"}]},{"@type":"WebSite","@id":"https:\/\/zydeno.com\/#website","url":"https:\/\/zydeno.com\/","name":"Zydeno Studio","description":"Zydeno \u00e8 uno studio indipendente che sviluppa app in diverse categorie, accomunate da una comune passione per la qualit\u00e0 artigianale e l\u2019attenzione ai dettagli. App veloci, con una forte personalit\u00e0 e indipendenti per iPhone, Android, Windows e Mac, oltre a estensioni per Chrome, Edge e Firefox. Realizzate con calma, lanciate con cura.","publisher":{"@id":"https:\/\/zydeno.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/zydeno.com\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"it-IT"},{"@type":"Organization","@id":"https:\/\/zydeno.com\/#organization","name":"Zydeno Studio","url":"https:\/\/zydeno.com\/","logo":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/zydeno.com\/#\/schema\/logo\/image\/","url":"https:\/\/zydeno.com\/wp-content\/uploads\/2026\/04\/cropped-icon-512-1.png","contentUrl":"https:\/\/zydeno.com\/wp-content\/uploads\/2026\/04\/cropped-icon-512-1.png","width":512,"height":512,"caption":"Zydeno Studio"},"image":{"@id":"https:\/\/zydeno.com\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/zydeno.com\/#\/schema\/person\/1af4d0e254f05b407f306ede28252259","name":"Andrii Matiushev","image":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/zydeno.com\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/4df57b6b4737601c798e728e7d4d209a9a9513422db2b613ff707286cb1ea58a?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/4df57b6b4737601c798e728e7d4d209a9a9513422db2b613ff707286cb1ea58a?s=96&d=mm&r=g","caption":"Andrii Matiushev"}}]}},"_links":{"self":[{"href":"https:\/\/zydeno.com\/it\/wp-json\/wp\/v2\/posts\/570","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/zydeno.com\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/zydeno.com\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/zydeno.com\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/zydeno.com\/it\/wp-json\/wp\/v2\/comments?post=570"}],"version-history":[{"count":2,"href":"https:\/\/zydeno.com\/it\/wp-json\/wp\/v2\/posts\/570\/revisions"}],"predecessor-version":[{"id":773,"href":"https:\/\/zydeno.com\/it\/wp-json\/wp\/v2\/posts\/570\/revisions\/773"}],"wp:attachment":[{"href":"https:\/\/zydeno.com\/it\/wp-json\/wp\/v2\/media?parent=570"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/zydeno.com\/it\/wp-json\/wp\/v2\/categories?post=570"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/zydeno.com\/it\/wp-json\/wp\/v2\/tags?post=570"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}