{"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":"lobsession-du-demarrage-a-froid","status":"publish","type":"post","link":"https:\/\/zydeno.com\/fr\/lobsession-du-demarrage-a-froid\/","title":{"rendered":"L'obsession du d\u00e9marrage \u00e0 froid"},"content":{"rendered":"<p>Le d\u00e9marrage \u00e0 froid est la premi\u00e8re impression qu\u2019une application donne \u00e0 son utilisateur. Si elle met plus d\u2019une seconde \u00e0 devenir utilisable, nous avons d\u00e9j\u00e0 donn\u00e9 \u00e0 l\u2019utilisateur l\u2019impression qu\u2019il s\u2019agit d\u2019une application lente, quelle que soit la rapidit\u00e9 avec laquelle elle fonctionnera par la suite.<\/p>\n<p>C'est aussi le moment que les utilisateurs vivent le plus souvent. Une application de suivi des habitudes est ouverte pendant quelques secondes pour cocher une case. Une application de suivi des migraines est ouverte lorsqu'une personne ne se sent pas bien et souhaite noter rapidement son \u00e9tat. Pour ce type d'applications, le lancement n'est pas un simple pr\u00e9lude \u00e0 l'exp\u00e9rience : il constitue l'essentiel de celle-ci.<\/p>\n<h2>Notre objectif<\/h2>\n<p>Notre objectif est de <strong>moins de 600 ms<\/strong> De l\u2019appui sur une ic\u00f4ne \u00e0 l\u2019interface utilisateur interactive sur un iPhone vieux de cinq ans. Et cela, une fois que le syst\u00e8me d\u2019exploitation a charg\u00e9 le fichier binaire, allou\u00e9 de la m\u00e9moire et mis le thread principal \u00e0 notre disposition. Tout ce qui se passe entre ce transfert et la premi\u00e8re image rel\u00e8ve de notre responsabilit\u00e9.<\/p>\n<p>\u201cLe mot cl\u00e9, c\u2019est \u201d interactif \u00bb. Un \u00e9cran de d\u00e9marrage qui s\u2019affiche instantan\u00e9ment puis reste fig\u00e9 ne compte pas. Pas plus qu\u2019une premi\u00e8re image remplie d\u2019\u00e9l\u00e9ments de remplissage qui se r\u00e9organisent quelques instants plus tard. L\u2019objectif, c\u2019est le moment o\u00f9 l\u2019on peut appuyer sur ce que l\u2019on est venu chercher et o\u00f9 cela r\u00e9agit.<\/p>\n<p>Nous effectuons les mesures sur l'ancien appareil, et non sur le nouveau, pour la m\u00eame raison qui nous pousse \u00e0 effectuer ces tests : le t\u00e9l\u00e9phone le plus r\u00e9cent masquera pratiquement toutes les erreurs.<\/p>\n<h2>Ce que cela impose<\/h2>\n<p>Atteindre ce chiffre met rapidement fin \u00e0 bien de discussions. Le r\u00e9seautage n\u2019est pas possible pendant la phase de lancement. Les SDK tiers sont difficiles \u00e0 faire accepter : la plupart d\u2019entre eux g\u00e9n\u00e8rent des t\u00e2ches en arri\u00e8re-plan avant <code>application(_:didFinishLaunching\u2026)<\/code> m\u00eame les r\u00e9sultats. Les caches d'images se chargent de mani\u00e8re diff\u00e9r\u00e9e. Les migrations de base de donn\u00e9es s'ex\u00e9cutent dans une file d'attente en arri\u00e8re-plan, sans jamais bloquer la file d'attente principale.<\/p>\n<p>Il en d\u00e9coule quelques principes. Le premier \u00e9cran s'appuie sur les donn\u00e9es d\u00e9j\u00e0 pr\u00e9sentes sur l'appareil ; ainsi, l'application affiche imm\u00e9diatement des informations r\u00e9elles et se met \u00e0 jour en arri\u00e8re-plan si n\u00e9cessaire. Les fonctionnalit\u00e9s qui ne sont pas n\u00e9cessaires sur le premier \u00e9cran ne sont activ\u00e9es que lorsque l'utilisateur en fait la demande. Et chaque fois que nous sommes tent\u00e9s d\u2019ajouter une biblioth\u00e8que, nous nous demandons d\u2019abord ce qu\u2019elle fait au lancement avant de nous demander ce qu\u2019elle peut nous apporter.<\/p>\n<h2>Les compromis<\/h2>\n<p>Cette rigueur a un co\u00fbt. Renoncer \u00e0 un SDK pratique implique parfois d\u2019\u00e9crire et de maintenir soi-m\u00eame le code \u00e9quivalent. Afficher en priorit\u00e9 les donn\u00e9es locales signifie concevoir l\u2019application en tenant compte du fait qu\u2019elles puissent \u00eatre l\u00e9g\u00e8rement obsol\u00e8tes. Le chargement diff\u00e9r\u00e9 n\u00e9cessite une attention particuli\u00e8re pour \u00e9viter tout ralentissement lors de la premi\u00e8re ouverture d\u2019un \u00e9cran plus lourd. Nous acceptons ces co\u00fbts car l\u2019alternative serait une petite perte de performance \u00e0 chaque lancement, pour toujours, pour tout le monde.<\/p>\n<h2>Nos erreurs<\/h2>\n<p>Le temps de lancement ne se d\u00e9t\u00e9riore que rarement d\u2019un seul coup. Il s\u2019\u00e9rode progressivement : un peu de code de configuration par-ci, une v\u00e9rification suppl\u00e9mentaire par-l\u00e0, chacun inoffensif en soi. Nous l\u2019avons appris \u00e0 nos d\u00e9pens, en remarquant trop tard qu\u2019une application mettait d\u00e9sormais plus de temps \u00e0 s\u2019ouvrir, sans qu\u2019aucun commit en particulier ne soit en cause. D\u00e9sormais, le temps de lancement est v\u00e9rifi\u00e9 sur l\u2019appareil de r\u00e9f\u00e9rence \u00e0 chaque version, ce qui permet de d\u00e9tecter les d\u00e9rives d\u00e8s qu\u2019elles sont encore minimes.<\/p>\n<p>Ce principe s'applique \u00e9galement \u00e0 nos autres plateformes. Une application Windows ou une fen\u00eatre contextuelle d'extension de navigateur dispose de sa propre version du \u00ab d\u00e9marrage \u00e0 froid \u00bb, et la m\u00eame r\u00e8gle s'applique : afficher imm\u00e9diatement quelque chose d'utile, et remettre tout le reste \u00e0 plus tard.<\/p>\n<h2>Pourquoi cela en vaut la peine<\/h2>\n<p>La rigueur est rentable. Une fois que le lancement est rapide, tout le reste l'est aussi \u2014 car les m\u00eames r\u00e8gles s'appliquent partout.<\/p>","protected":false},"excerpt":{"rendered":"<p>Pourquoi nous mesurons le temps de lancement d'une application en millisecondes \u2014 et pourquoi cela change la fa\u00e7on dont tout le reste est con\u00e7u.<\/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\/fr\/lobsession-du-demarrage-a-froid\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\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\/fr\/lobsession-du-demarrage-a-froid\/\" \/>\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=\"\u00c9crit par\" \/>\n\t<meta name=\"twitter:data1\" content=\"Andrii Matiushev\" \/>\n\t<meta name=\"twitter:label2\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\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\":\"fr-FR\"},{\"@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\":\"fr-FR\",\"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\":\"fr-FR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/zydeno.com\/#organization\",\"name\":\"Zydeno Studio\",\"url\":\"https:\/\/zydeno.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@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\":\"fr-FR\",\"@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'obsession du d\u00e9marrage \u00e0 froid - 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\/fr\/lobsession-du-demarrage-a-froid\/","og_locale":"fr_FR","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\/fr\/lobsession-du-demarrage-a-froid\/","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":{"\u00c9crit par":"Andrii Matiushev","Dur\u00e9e de lecture estim\u00e9e":"3 minutes"},"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":"fr-FR"},{"@type":"WebPage","@id":"https:\/\/zydeno.com\/the-cold-start-obsession\/","url":"https:\/\/zydeno.com\/the-cold-start-obsession\/","name":"L'obsession du d\u00e9marrage \u00e0 froid - 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":"fr-FR","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 est un studio ind\u00e9pendant qui con\u00e7oit des applications dans de nombreux domaines, toutes anim\u00e9es par une m\u00eame passion pour le savoir-faire et le souci du d\u00e9tail. Des applications rapides, originales et ind\u00e9pendantes pour iPhone, Android, Windows et Mac, ainsi que des extensions pour Chrome, Edge et Firefox. D\u00e9velopp\u00e9es avec soin, lanc\u00e9es avec minutie.","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":"fr-FR"},{"@type":"Organization","@id":"https:\/\/zydeno.com\/#organization","name":"Zydeno Studio","url":"https:\/\/zydeno.com\/","logo":{"@type":"ImageObject","inLanguage":"fr-FR","@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":"fr-FR","@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\/fr\/wp-json\/wp\/v2\/posts\/570","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/zydeno.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/zydeno.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/zydeno.com\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/zydeno.com\/fr\/wp-json\/wp\/v2\/comments?post=570"}],"version-history":[{"count":2,"href":"https:\/\/zydeno.com\/fr\/wp-json\/wp\/v2\/posts\/570\/revisions"}],"predecessor-version":[{"id":773,"href":"https:\/\/zydeno.com\/fr\/wp-json\/wp\/v2\/posts\/570\/revisions\/773"}],"wp:attachment":[{"href":"https:\/\/zydeno.com\/fr\/wp-json\/wp\/v2\/media?parent=570"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/zydeno.com\/fr\/wp-json\/wp\/v2\/categories?post=570"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/zydeno.com\/fr\/wp-json\/wp\/v2\/tags?post=570"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}