<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Boris Schapira (Web, articles en français)</title>
    <link>https://boris.schapira.dev/web/feed.xml</link>
    <description> Je suis un professionnel du Web qui essaie chaque jour de mieux comprendre le marché pour toujours délivrer la meilleure expérience à mes clients comme à leurs utilisateurs.</description>
    <language>fr</language>
    <lastBuildDate>Wed, 10 Jun 2026 14:10:05 +0200</lastBuildDate>
    
    <item>
      <title>Lectures complémentaires sur la fatigue liée à l&apos;IA</title>
      
      <description>
          &lt;p&gt;En février dernier, j’écrivais sur &lt;a href=&quot;/notes/2026-02-productivite-qualite/&quot;&gt;productivité et qualité&lt;/a&gt; : la délégation mal pensée, la charge cognitive des validateurs, l’érosion silencieuse des compétences collectives. Un texte construit depuis une perspective organisationnelle à partir de mes discussions avec mes confrères et consoeurs occupant des rôles finalement périphériques au code lui-même.&lt;/p&gt;
&lt;h2&gt;Ce que j’avais manqué&lt;/h2&gt;
&lt;p&gt;L’une d’entre elles m’a partagé un article de Siddhant Khare qui lui, a vécu la même réalité, de plus près. Il construit une infrastructure d’agents IA, c’est-à-dire les outils que d’autres ingénieurs utilisent pour faire tourner des IA en production. Et il a quand même fini par se heurter à un mur. Pas un mur de performance. Un mur humain.&lt;/p&gt;
&lt;p&gt;Son article, “&lt;a href=&quot;https://siddhantkhare.com/writing/ai-fatigue-is-real&quot; hreflang=&quot;en&quot; lang=&quot;en&quot;&gt;AI fatigue is real and nobody talks about it&lt;/a&gt;” (en anglais : je traduirai les citations par la suite), me hante, tant il complète ce que j’avais écrit de façon significative.&lt;/p&gt;
 &lt;div class=&quot;inline-note&quot;&gt;&lt;p&gt;&lt;strong&gt;NOTE&lt;/strong&gt;&lt;br /&gt;
Ce n’est pas la peine de venir me dire que les IA sont une gabegie écologique et économique, je suis au courant. Je m’intéresse au fait que ces outils sont, aujourd’hui, une réalité, et que cette réalité a des conséquences humaines et organisationnelles.&lt;/p&gt;
&lt;p&gt;On peut parler d’à quel point il est difficile de se passer de cette technologie dans une réalité compétitive où elle est utilisée massivement, tout en sachant qu’elle n’est pas rentable à long terme. Mais ce n’est pas le sujet de ce billet spécifique.&lt;/p&gt;
&lt;/div&gt;
&lt;h3&gt;Le choc des systèmes probabilistes&lt;/h3&gt;
&lt;p&gt;Mon article parlait de la &lt;strong&gt;surcharge cognitive liée à la validation&lt;/strong&gt;. Ce que je n’avais pas nommé, c’est une source bien spécifique de cette surcharge : le fait de collaborer avec un système fondamentalement imprévisible, alors que notre cerveau est câblé pour le déterminisme.&lt;/p&gt;
&lt;p&gt;Siddhant le formule avec une précision que je n’avais pas eue :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Vous interagissez avec un système probabiliste, alors que votre cerveau est programmé pour des systèmes déterministes. Ce décalage est une source constante et latente de stress.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Le fait que le modèle ait décidé d’aller dans une autre direction aujourd’hui, que le même prompt produise des résultats différents selon les jours, sans explication accessible, sans log consultable, c’est terrible. Pour quelqu’un dont le métier repose sur la capacité à raisonner sur des systèmes déterministes, c’est une source d’anxiété discrète mais permanente.&lt;/p&gt;
&lt;p&gt;Alors je sais, ce n’est pas une fatalité. Il existe des moyens de réduire cette variabilité des LLMs, de les rendre plus prévisibles. Mais c’est un travail de longue haleine, et il est facile de sous-estimer à quel point cette imprévisibilité est une source de stress pour les équipes.&lt;/p&gt;
&lt;h3&gt;Le tapis roulant des nouveaux outils&lt;/h3&gt;
&lt;p&gt;D’autant que la pression est constante pour rester “à jour” dans un fonctionnement des équipes qui se réinvente chaque semaine, chaque jour.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Je suis tombé dans ce piège sans hésiter. Je passais mes week-ends à évaluer de nouveaux outils. Je lisais chaque note de service. Je regardais chaque démo. J’essayais de rester à la pointe car j’avais une peur bleue d’être à la traîne.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Des semaines entières à configurer un nouvel outil, pour le voir dépassé la semaine d’après. Des workflows construits minutieusement, obsolètes en trois mois après une mise à jour du modèle. Siddhant appelle ça le &lt;strong lang=&quot;en&quot;&gt;Knowledge Decay&lt;/strong&gt;, la dépréciation du savoir accumulé. J’était passé à côté de ça, mais c’est réel.&lt;/p&gt;
&lt;p&gt;Ce n’est pas seulement de la fatigue. C’est une &lt;strong&gt;destruction régulière de notre investissement cognitif&lt;/strong&gt;, sans garantie de retour. Et cette destruction est systémique, pas individuelle.&lt;/p&gt;
&lt;h3&gt;Le piège du “aller, j’essaie encore un truc”&lt;/h3&gt;
&lt;p&gt;Mon article portait sur des dysfonctionnements organisationnels. Siddhant descend à l’échelle du geste de travail quotidien.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Tu avais un objectif clair au départ. Trente minutes plus tard, tu débogues l’invite de commande au lieu de déboguer ton code. Tu optimises tes instructions pour un modèle de langage au lieu de résoudre le problème lui-même.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Il appelle ça le &lt;strong lang=&quot;en&quot;&gt;Prompt Spiral&lt;/strong&gt; et je serais malhonnête en disant que je ne l’ai pas ressenti. On commence avec un objectif clair. La première réponse est bonne à 70 %. À partir de là, on affine le prompt. La deuxième itération est bonne à 75 %, mais elle a cassé quelque chose que la première avait réussi.&lt;/p&gt;
&lt;p&gt;Et ainsi de suite. Quarante-cinq minutes plus tard, on a perdu de vue l’objectif initial, on est dans un cercle vicieux, et on n’a pas avancé d’un pouce.&lt;/p&gt;
&lt;p&gt;Ce que je trouve remarquable dans son texte, c’est que Siddhant ne s’arrête pas au diagnostic. Il propose des règles concrètes, issues de sa propre expérience : trois tentatives maximum, puis on écrit soi-même ; des sessions limitées à trente minutes. La première heure du matin sans IA, pour “échauffer” sa propre pensée avant de déléguer quoi que ce soit.&lt;/p&gt;
&lt;p&gt;Il y a quelque chose de tristement fascinant à voir à quel point ces règles sont devenues nécessaires à une bonne hygiène mentale, et à quel point elles sont difficiles à respecter.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Mon article s’adressait aux managers et aux organisations. Le sien s’adresse aux praticien·nes, directement.&lt;/strong&gt; Ce n’est pas la même altitude. Les deux sont nécessaires. Les deux sont terribles.&lt;/p&gt;
&lt;p&gt;Bref, je vous invite à lire “&lt;a href=&quot;https://siddhantkhare.com/writing/ai-fatigue-is-real&quot; hreflang=&quot;en&quot; lang=&quot;en&quot;&gt;AI fatigue is real and nobody talks about it&lt;/a&gt;” parce qu’il le complète tout ce que j’avais laissé de côté : l’anxiété du déterministe face au probabiliste, l’épuisement de la veille permanente, les micro-décisions qui s’accumulent jusqu’au burn-out.&lt;/p&gt;
&lt;p&gt;Et si vous avez vécu ce qu’il décrit, sachez que vous n’êtes pas seul·e. Et que ce n’est pas une question de compétence ou de discipline. Ce que nous vivons, ce qui est imposé aujourd’hui par le marché est dur, et aura des conséquences notables sur notre santé mentale, notre capacité à faire du bon travail, et notre plaisir à faire ce métier. Et ce, même si la bulle éclate.&lt;/p&gt;
&lt;h2&gt;Je suis tombé par terre… 🎶&lt;/h2&gt;
&lt;p&gt;Entre deux articles s’interrogeant sur le &lt;strong&gt;comment&lt;/strong&gt; (comment mieux utiliser ces outils, comment réorganiser les processus, comment préserver sa santé mentale), j’ai aussi récemment lu un autre texte qui, lui, pose une question différente : celle du &lt;strong&gt;pourquoi&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Mon article et celui de Siddhant analysent des &lt;strong&gt;effets&lt;/strong&gt; : surcharge, érosion des compétences, fatigue individuelle et collective. Nous décrivons ce qui se passe sur le pont du navire. “&lt;a href=&quot;https://www.stvn.sh/writing/programming-still-sucks-fqffhyp&quot; hreflang=&quot;en&quot;&gt;Programming Still Sucks&lt;/a&gt;”, de Steven Langbroek, décrit comment le navire a été construit, qui a décidé de jeter le manuel par-dessus bord, et qui a signé la liste des postes supprimés en se convainquant que “les juniors s’adapteront” (indice : non).&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;L’IA n’a pas volé nos emplois. C’est la cupidité qui l’a fait. Cette même cupidité qui a délocalisé les usines au Bangladesh et qui maintient l’exploitation des mineurs de cobalt au Congo sous un nouveau masque.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Le texte est plus littéraire, plus politique, délibérément plus en colère (autant dire que je l’aime). C’est une excellente illustration de ce que l’obsession productive à court terme détruit sans le voir, sans même savoir ce qu’elle détruit. Là où mon article demande “comment mieux déléguer ?” et celui de Siddhant demande “comment survivre à ce rythme ?”, ce troisième texte demande : &lt;strong&gt;qui a décidé que c’était acceptable, et pourquoi ?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Le tableau est assez complet, et malheureusement assez sombre.&lt;/p&gt;
&lt;h2&gt;Et malheureusement, nous avons raison&lt;/h2&gt;
&lt;p&gt;Histoire d’enfoncer le clou, une dernière lecture : la note de conjoncture de l’INSEE pour mars 2026, intitulée “&lt;a href=&quot;https://www.insee.fr/fr/statistiques/8907419?sommaire=8907467&quot;&gt;Éclairage – Avec l’essor de l’intelligence artificielle générative, l’investissement numérique tire davantage la croissance aux États-Unis qu’en France, tandis que l’emploi recule dans les activités informatiques des deux côtés de l’Atlantique&lt;/a&gt;”.&lt;/p&gt;
&lt;p&gt;On y lit notamment que :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;En particulier, les indicateurs sectoriels suggèrent un retournement de l’emploi depuis deux ans dans les segments les plus exposés, notamment dans les activités de programmation informatique, et pour lesquels la valeur ajoutée est orientée à la hausse, aux États-Unis comme en France. En outre, dans les deux pays, l’ajustement de l’emploi de ce secteur serait concentré sur les jeunes entrants.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;“Retournement de l’emploi”, au cas où vous ne seriez pas sûr de ce que ça veut dire, c’est une façon élégante de dire que des emplois sont détruits. C’est explicité plus loin dans la légende d’un graphique :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;L’emploi dans le secteur des activités informatiques et des services d’information a baissé de 3,0 % entre le quatrième trimestre 2023 et le quatrième trimestre 2025. La contribution des 15-29 ans (hors alternants) a été de -3,8 points, contre +1,4 point pour les 30-54 ans.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Car dans ce contexte difficile, les plus âgé·es, qui sont en mesure de puiser dans leur expérience pour prendre le nécessaire recul émotionnel dont nous parlons tous·tes, sont plus à même de faire face à la situation (enfin, en tout cas, d’y faire face le moins mal). Les jeunes, eux, sont plus vulnérables. Ils n’ont pas encore eu le temps de construire une carrière, de développer des compétences transférables, de se forger une expérience qui les rendrait plus résilient·es face à ce genre de choc.&lt;/p&gt;
&lt;p&gt;Bref, les chiffres sont là, et ils ne sont pas bons. Nous avons raison d’être inquiet·es. Nous avons raison de nous sentir fatigué·es. Nous avons raison de nous demander comment nous allons faire pour continuer à faire du bon travail dans ces conditions.&lt;/p&gt;

          &lt;hr&gt;
          &lt;div style=&quot;font-style:italic&quot;&gt;
              &lt;p&gt;
                  Vous êtes abonné·e au flux des articles&amp;nbsp;:
              &lt;/p&gt;
              &lt;ul&gt;
                  &lt;li&gt;de la catégorie&amp;nbsp;: Web&lt;/li&gt;
                  &lt;li&gt;rédigés en français.&lt;/li&gt;
              &lt;/ul&gt;
              
          &lt;/div&gt;
          
      </description>
      <pubDate>Tue, 19 May 2026 00:00:00 +0200</pubDate><link>https://boris.schapira.dev/notes/2026-05-lectures-fatigue-ia/</link>
      <guid isPermaLink="true">https://boris.schapira.dev/notes/2026-05-lectures-fatigue-ia/</guid>
      
      <category>web</category>
      
    </item>
    
    <item>
      <title>Productivité et qualité</title>
      
      <description>
          &lt;p&gt;Comment concilier l’augmentation de la productivité grâce à des outils comme les LLM avec le maintien d’une qualité élevée ? C’est la question que je me pose depuis un moment, et je pense que nous sommes à un tournant critique.&lt;/p&gt;
&lt;h2&gt;La délégation, ce serpent de mer&lt;/h2&gt;
&lt;p&gt;Quand on parle de l’état du marché du numérique, on parle souvent de &lt;strong&gt;productivité&lt;/strong&gt;. Et on entend des discours comme :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Grâce aux LLM, on a remplacé trois juniors par un seul senior. Il n’a plus qu’à relire et valider le travail généré. On a divisé les coûts par trois !&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Ce n’est pas nouveau. Il y a quinze ans, j’entendais déjà la même musique avec l’offshoring :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;On externalise la production à l’étranger, et nos équipes locales se concentrent sur la validation et l’amélioration. Moins cher, plus efficace !&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;Le problème n’est pas la délégation en soi.&lt;/strong&gt; Que l’agent soit un·e humain·e à l’autre bout du monde ou un algorithme, la logique est la même : on délègue la production pour réduire les coûts, et on garde “en propre” la validation.&lt;/p&gt;
&lt;p&gt;Sauf que cette validation, justement, a un coût cognitif énorme. Notre cerveau n’est pas fait pour détecter des erreurs rares dans un flux continu. Il excelle à reconnaître des patterns, pas des exceptions. Et c’est là que le bât blesse.&lt;/p&gt;
&lt;h2&gt;Le paradoxe de la productivité apparente&lt;/h2&gt;
&lt;p&gt;L’équation semble séduisante :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Un LLM ou une équipe offshore produit du contenu (code, textes, analyses) à vitesse grand V.&lt;/li&gt;
&lt;li&gt;Un·e senior valide en aval.&lt;/li&gt;
&lt;li&gt;“Tout le monde y gagne”.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Sauf que non.&lt;/p&gt;
&lt;p&gt;Parce que relire une portion de code ou un texte généré par une IA, ce n’est pas corriger une faute de frappe ou deux. C’est chercher une aiguille dans une botte de foin.&lt;/p&gt;
&lt;p&gt;Et les recherches en psychologie cognitive sont formelles :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Les humains sont mauvais pour maintenir une attention soutenue sur des tâches répétitives et à faible signal&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;#fn1&quot; id=&quot;fnref1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;.&lt;/li&gt;
&lt;li&gt;Plus un système est fiable, moins nous détectons ses erreurs&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;#fn2&quot; id=&quot;fnref2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Résultat ? Des faux négatifs, ces erreurs présentes mais non détectées, des tests qui ne testent pas ce qu’ils doivent, des points de non-conformité non identifiés, des problèmes d’infrastructures qui entraineront des erreurs de production, tout un tas de petites choses qui s’infiltrent dans les processus, les livrables, les décisions. Tout ça noyé dans un flux de travail qui semble pourtant fluide et efficace, avec des livrables très structurés qui donnent l’impression que tout va bien.&lt;/p&gt;
&lt;p&gt;Et quand l’erreur arrive enfin, elle est souvent majeure :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;un &lt;strong&gt;bug critique&lt;/strong&gt; dans un code en production (une pensée pour Microsoft, Amazon et Cloudflare, tous trois pris à laisser passer des bugs critiques malgré des processus de review “augmentés” par IA ces trois derniers mois) ;&lt;/li&gt;
&lt;li&gt;une &lt;strong&gt;clause juridique ambiguë&lt;/strong&gt; dans un modèle de contrat (qui peut insidueusement se répercuter et être détectée très tardivement) ;&lt;/li&gt;
&lt;li&gt;une &lt;strong&gt;information erronée&lt;/strong&gt; dans une documentation technique ;&lt;/li&gt;
&lt;li&gt;une &lt;strong&gt;mauvaise direction stratégique&lt;/strong&gt; qui fragilise la position économique de l’organisation et met l’ensemble des emplois en danger.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Et on a &lt;strong&gt;plein&lt;/strong&gt; d’exemples concrets d’avant l’ère des IAs génératives :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;dans l’aviation&lt;/strong&gt; : les contrôleurs aériens, malgré leur formation, ratent des alertes rares après des heures de surveillance monotone ;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;en médecine&lt;/strong&gt; : les radiologues, submergés d’images, peuvent laisser passer des tumeurs sur des clichés pourtant “évidents” a posteriori ;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;dans le nucléaire&lt;/strong&gt; : les opérateurs, face à des tableaux de bord trop stables, réagissent avec retard aux signes avant-coureurs d’un incident ;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;dans la gouvernance&lt;/strong&gt; (d’entreprises comme de pays) : des décisions subordonnées à la suite de recommandations de cabinets externes connaissant mal la structure et son marché.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Alors maintenant, prenez quelqu’un qui a de la séniorité dans son métier.&lt;/p&gt;
&lt;p&gt;Faites-lui valider 50 tâches assistées par des IA. Au début, il ou elle est concentré·e, en quête d’une erreur ou d’un raisonnement fallacieux. Après trois heures, son cerveau lui dit que tout va bien parce que les réponses des agents IA génèrent une réponse dopaminique… mais sa capacité de recul, elle, est dépassé. Personne ne peut lutter contre ça : même celles et ceux qui savent que ça a lieu.&lt;/p&gt;
&lt;p&gt;La productivité a explosé, mais la qualité, elle, s’est effondrée.&lt;/p&gt;
&lt;h2&gt;Pourquoi ça ne marche pas ?&lt;/h2&gt;
&lt;p&gt;Parce qu’on demande à des humains, déjà à leur limite cognitive, de faire davantage :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;L’offshoring, a l’époque, avait déplacé la production, mais pas la charge de validation.&lt;/li&gt;
&lt;li&gt;Les LLM accélèrent la production mais exacerbent le problème : le volume à valider explose, et les erreurs sont plus subtiles. Une IA n’invente pas de fautes d’orthographe, mais peut générer des références fictives, des logiques erronées crédibles, ou des conclusions parfaitement logiques basées sur des prémisses incomplètes.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Et les managers, les mêmes qui poussent à l’utilisation de délégations, le savent. &lt;strong&gt;Très bien&lt;/strong&gt;. Ils et elles n’ont pas 60 subalternes directs, jamais. Parce qu’encadrer et endosser la responsabilité pour la production d’un tel flux de travail est impossible.&lt;/p&gt;
&lt;p&gt;Mais ils continuent à pousser pour la productivité, parce que c’est ce qui est mesurable et valorisé à court terme et surtout, c’est le travailleur, le “centaure inversé”&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;#fn3&quot; id=&quot;fnref3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; en charge de la validation des résultats qui subira les conséquences d’une délégation mal supervisée.&lt;/p&gt;
&lt;p&gt;Ajoutez à ça :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;l’érosion des compétences des salarié·es senior, qui est quand même la principale conclusion de l’étude qu’Anthropic a mené&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;#fn4&quot; id=&quot;fnref4&quot;&gt;4&lt;/a&gt;&lt;/sup&gt; ;&lt;/li&gt;
&lt;li&gt;la réduction des embauches des juniors, qui auraient dû être les seniors de demain via le mentorat de leurs pairs&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Et vous avez une petite idée de ce qui nous attend : une &lt;strong&gt;perte collective de savoir-faire&lt;/strong&gt; et &lt;strong&gt;des risques de non-qualité&lt;/strong&gt; qui explosent. J’aimerais être aussi optimise qu’Élie dans &lt;a href=&quot;https://www.opquast.com/edito-newsletter-n126-we-ia-pire-meilleur/&quot;&gt;la dernière newsletter Opquast&lt;/a&gt;, mais je ne peux pas.&lt;/p&gt;
&lt;p&gt;Je pense que nous allons au devant d’une crise de la qualité majeure, avec des conséquences économiques et sociales considérables. Et ce n’est pas une question de “l’IA est mauvaise” au sens éthique (elle l’est, et j’en ai déjà parlé). C’est une question de &lt;strong&gt;comment&lt;/strong&gt; on utilise ces outils et pratiques.&lt;/p&gt;
&lt;p&gt;Et c’est d’ailleurs curieux de retomber dans ces travers parce que le consensus sur l’offshoring était pourtant déjà négatif dans certains cercles tech, pour ces exactes mêmes raisons : délégation mal pensée, surcharge cognitive, perte de compétences, risques de qualité. &lt;i lang=&quot;en&quot;&gt;Here we go again&lt;/i&gt;.&lt;/p&gt;
&lt;h2&gt;Que faire ?&lt;/h2&gt;
&lt;p&gt;C’est la partie où je me sens le moins compétent, parce que je vois surtout le problème, moins la solution. Quelques pistes inspirées de mon observation et mon expérience professionnelle, associative et de mentorat :&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1. Former les managers&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Leur rappeler que valider un haut volume de travail, c’est comme demander à un·e marathonien·ne de sprinter sur 42 km. Ça ne marche pas.&lt;/li&gt;
&lt;li&gt;Même à petit volume, il faut apprendre à « penser contre » des contenus extrêmement crédibles. Et c’est épuisant.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;2. Repenser la délégation&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ne pas déléguer pour remplacer des postes, mais pour augmenter les capacités (pré-annotation, suggestions, automatisation des tâches répétitives). Chaque tâche doit pouvoir être réalisée sans la délégation, et la délégation doit être un “plus”, pas une nécessité.&lt;/li&gt;
&lt;li&gt;Libérer du temps pour les réflexions de fond, pas juste pour valider plus vite.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;3. Mesurer l’erreur, pas juste la vitesse&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Tant qu’on ne s’intéresse qu’à la &lt;strong&gt;productivité&lt;/strong&gt;, on construit &lt;strong&gt;une dette invisible&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Audit &lt;strong&gt;qualité&lt;/strong&gt; systématique : si vous déléguez (à des humains ou des outils), mesurez objectivement le taux d’erreurs résiduelles. Pas juste avec des retours anecdotiques ou des verbatims. &lt;strong&gt;Sans données, votre avis n’est qu’une intuition&lt;/strong&gt;, pas une réalité. Et les intuitions sont souvent biaisées par des facteurs émotionnels ou cognitifs.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;4. Accepter que l’humain ne soit pas une machine&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Limiter les sessions de validation&lt;/strong&gt; à 30 minutes max, avec des pauses (comme pour les pilotes d’avion). Ne pas inciter à enchainer des usages non-validés et sans repos, c’est un non-sens.&lt;/li&gt;
&lt;li&gt;Ne pas faire reposer la qualité sur un·e seul·e salarié·e. La relecture doit être &lt;strong&gt;collaborative&lt;/strong&gt; et outillée (outils d’audit de la validité des contenus, d’évaluation de la conformité légale ou même du &lt;em&gt;branding&lt;/em&gt;, détection de biais, checklists, etc.).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;5. Continuer à miser sur le développement des compétences humaines&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Accueillir et former les juniors&lt;/strong&gt;, même s’ils ne sont pas immédiatement productifs. Ils sont l’avenir des organisations.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Encourager le mentorat&lt;/strong&gt; et les échanges de compétences entre juniors et seniors.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Investir dans la Qualité&lt;/strong&gt;, pas juste dans la quantité. Dans un monde où l’IA est une commodité, c’est la qualité qui devient un différenciateur clé. Ne pas s’en préoccuper, c’est se tirer une balle dans le pied.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;p&gt;En conclusion : la délégation n’est pas un problème managérial, mais &lt;strong&gt;son usage actuel l’est&lt;/strong&gt;. Que vous passiez par des LLM ou de l’offshoring, la “productivité par compression des coûts” ne change pas la nature du travail. Elle déplace seulement le problème :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;d’un côté, on réduit les coûts de production.&lt;/li&gt;
&lt;li&gt;de l’autre, on surcharge la validation, avec des risques majeurs pour la qualité.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Si on ne repense pas l’organisation, on remplace un problème (le coût du travail) par un autre, bien plus insidieux : &lt;strong&gt;le coût de non-qualité&lt;/strong&gt;.&lt;/p&gt;
 &lt;div class=&quot;inline-note&quot;&gt;&lt;p&gt;Si vous voulez lire des trucs intéressants, je vous invite à lire les études citées en bas de page. Vous devrez parfois avoir des accès aux publications scientifiques payantes et surtout, ne pas recourir à &lt;strong&gt;Sci-Hub&lt;/strong&gt;. &lt;strong&gt;Sci-Hub&lt;/strong&gt; n’est pas une solution légale et conforme aux attentes du droit des éditeurs à exploiter commercialement ces études. N’utilisez pas &lt;strong&gt;Sci-Hub&lt;/strong&gt; et pour éviter de le faire par erreur, retenez bien son nom : &lt;strong&gt;Sci-Hub&lt;/strong&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol&gt;
&lt;li id=&quot;fn1&quot;&gt;
&lt;p&gt;L’étude de Mackworth de 1948 sur la baisse de la vigileance lors d’une attention soutenue, sur lequel je suis tombé à partir de l’article Wikipedia sur &lt;a hreflang=&quot;en&quot; href=&quot;https://en.wikipedia.org/wiki/Vigilance_(psychology)&quot;&gt;la vigilance en psychologie&lt;/a&gt;. &lt;a href=&quot;#fnref1&quot; class=&quot;footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;fn2&quot;&gt;
&lt;p&gt;Une étude plus récente, 2010, “&lt;span lang=&quot;en&quot;&gt;Complacency and Bias in Human Use of Automation&lt;/span&gt;”, Parasuraman, R., &amp;amp; Manzey, qui fait une vingtaine de pages. &lt;a href=&quot;#fnref2&quot; class=&quot;footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;fn3&quot;&gt;
&lt;p&gt;Le concept de “centaure inversé” (en anglais, &lt;a hreflang=&quot;en&quot; href=&quot;https://pluralistic.net/2025/09/11/vulgar-thatcherism/&quot;&gt;reverse centaur&lt;/a&gt;) est une métaphore inventée par Cory Doctorow pour décrire la situation où l’humain est subordonné à la machine, plutôt que l’inverse. &lt;a href=&quot;#fnref3&quot; class=&quot;footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;fn4&quot;&gt;
&lt;p&gt;“&lt;a hreflang=&quot;en&quot; href=&quot;https://www.anthropic.com/research/AI-assistance-coding-skills&quot;&gt;How AI assistance impacts the formation of coding skills&lt;/a&gt;”, janvier 2026 &lt;a href=&quot;#fnref4&quot; class=&quot;footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;

          &lt;hr&gt;
          &lt;div style=&quot;font-style:italic&quot;&gt;
              &lt;p&gt;
                  Vous êtes abonné·e au flux des articles&amp;nbsp;:
              &lt;/p&gt;
              &lt;ul&gt;
                  &lt;li&gt;de la catégorie&amp;nbsp;: Web&lt;/li&gt;
                  &lt;li&gt;rédigés en français.&lt;/li&gt;
              &lt;/ul&gt;
              
          &lt;/div&gt;
          
      </description>
      <pubDate>Fri, 27 Feb 2026 00:00:00 +0100</pubDate><link>https://boris.schapira.dev/notes/2026-02-productivite-qualite/</link>
      <guid isPermaLink="true">https://boris.schapira.dev/notes/2026-02-productivite-qualite/</guid>
      
      <category>web</category>
      
    </item>
    
    <item>
      <title>LLMs : entre productivité, management et responsabilité</title>
      
      <description>
          &lt;p&gt;Il y a quelques mois, j’écrivais sur l’importance de comprendre les Large Language Models (LLMs), ces outils technologiques qui façonnent notre quotidien, qu’on le veuille ou non.&lt;/p&gt;
&lt;p&gt;Aujourd’hui, ils continuent de s’imposer comme une brique incontournable, tant dans le monde professionnel que dans la sphère publique.&lt;/p&gt;
&lt;p&gt;Pourtant, leur adoption soulève autant d’enthousiasme que de questions. Notamment parce qu’elle engendre des externalités négatives largement anticipées.&lt;/p&gt;
&lt;p&gt;Entre la promesse d’une productivité accrue et la réalité de leur fonctionnement, il y a un fossé qu’il est urgent de combler.&lt;/p&gt;
&lt;h3&gt;La productivité, un leurre bien pratique&lt;/h3&gt;
&lt;p&gt;On nous vend les LLMs comme des outils miracles, capables de booster notre efficacité, de réduire les coûts et d’automatiser des tâches répétitives. La pression est forte : il faut maîtriser cette technologie, sous peine de se retrouver à la traîne. Pourtant, cette course à la productivité cache une réalité plus complexe.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;strong&gt;D’abord, on nous encourage rarement à comprendre ce qui se cache derrière ces modèles.&lt;/strong&gt; Peu de discussions sur les conditions matérielles de leur production : les matières premières nécessaires à la fabrication des data centers, la consommation colossale d’énergie et d’eau, ou encore la sous-traitance de tâches ingrates à une main-d’œuvre souvent précaire et mal payée. Ces aspects sont relégués au second plan, comme s’ils n’étaient que des détails techniques sans importance.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;strong&gt;Ensuite, on insiste peu sur les forces et les faiblesses &lt;em&gt;réelles&lt;/em&gt; des LLMs.&lt;/strong&gt; Leur imprédictabilité en fait des outils difficiles à auditer : la qualité de leurs réponses est rarement contrôlée de manière rigoureuse. On se contente souvent de valider des corpus de réponses ou de s’appuyer sur des retours utilisateurs, sans toujours questionner la pertinence ou la fiabilité des résultats.&lt;/p&gt;
&lt;p&gt;Dans les années à venir, je prédis une extension massive des équipes dédiées à l’analyse qualité, notamment pour auditer les interactions et intégrations avec ces modèles. Car oui, un outil puissant mais imprévisible nécessite une supervision largement accrue.&lt;/p&gt;
&lt;h3&gt;L’apprentissage par l’expérimentation : entre bricolage et improvisation&lt;/h3&gt;
&lt;p&gt;L’usage des LLMs repose aujourd’hui sur une forme d’apprentissage empirique. Les utilisateurs testent, observent, ajustent leurs prompts, et inventent des modalités d’usage au fil de l’eau. &lt;strong&gt;On apprend en faisant, mais aussi en s’inspirant de recommandations dont on ne mesure pas toujours la qualité.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Par exemple, certains recommandent d’utiliser des modèles rédactionnels comme le MCP (Map, Cluster, Package) pour structurer ses prompts. D’autres suggèrent d’intégrer du pseudo-code pour guider le modèle. Mais ces conseils, souvent partagés sans contexte ni validation, peuvent mener à des résultats très variables. Le format « langage naturel » laisse une large place à la subjectivité, et un prompt qui fonctionne pour l’un peut échouer pour l’autre.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Pire, les LLMs ont parfois des comportements inattendus.&lt;/strong&gt; Ils inventent des sources, omettent de citer leurs références malgré les consignes, ou produisent des réponses qui sortent manifestement du cadre demandé. Ces écarts rappellent une évidence : ces outils ne sont pas infaillibles. Leur utilisation nécessite une vigilance constante, une capacité à questionner leurs outputs, et une remise en cause permanente de leurs limites.&lt;/p&gt;
&lt;h3&gt;L’orchestration d’agents : quand le management devient algorithmique&lt;/h3&gt;
&lt;p&gt;Face à la complexité des tâches, une solution émerge : l’orchestration d’agents spécialisés. Chaque agent est conçu pour une mission précise, avec un prompt affiné et des marges d’erreur réduites. &lt;strong&gt;Organiser une tâche complexe revient alors à la découper en sous-tâches, à les distribuer aux agents les plus pertinents, et à superviser leur collaboration.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Cette approche rappelle étrangement le management d’équipe, mais sans la dimension humaine. &lt;strong&gt;Pas de conflits à gérer, pas de variations de productivité, pas de problèmes personnels.&lt;/strong&gt; Juste des agents qui exécutent, toujours au même rythme, sans jamais se plaindre. En revanche, ces agents sont plus énergivores, plus faillibles sur certains aspects, et surtout, infiniment moins résilients qu’un être humain.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ce qui frappe, c’est de voir des managers expliquer avec une précision chirurgicale ce qu’ils attendent d’un agent automatisé, alors qu’ils peinent parfois à le faire avec leurs équipes humaines.&lt;/strong&gt; Est-ce par manque de transparence ? Par peur des conflits ? Ou simplement par lâcheté, en refusant d’investir dans la formation et l’accompagnement de leurs collaborateurs ?&lt;/p&gt;
&lt;h3&gt;Un management sans émotion, mais à quel prix ?&lt;/h3&gt;
&lt;p&gt;On en arrive à une situation paradoxale : &lt;strong&gt;on préfère instruire des agents moins expérimentés, moins qualifiés et plus énergivores que des salariés, pour des tâches parfois cruciales.&lt;/strong&gt; Tout cela parce qu’on refuse de construire avec des humains, d’investir dans leur avenir, de leur faire confiance.&lt;/p&gt;
&lt;p&gt;Les LLMs ne sont pas une fin en soi. Ils sont un outil, avec ses forces et ses limites. &lt;strong&gt;Les utiliser de manière pertinente, c’est d’abord comprendre leurs rouages, leurs coûts, et leurs impacts.&lt;/strong&gt; C’est aussi accepter qu’ils ne remplaceront jamais totalement l’intelligence humaine, la créativité, ou la capacité à gérer l’imprévu.&lt;/p&gt;
&lt;p&gt;Alors, avant de se précipiter tête baissée dans l’automatisation, posons-nous les bonnes questions : &lt;strong&gt;Quelle valeur ajoutée recherchons-nous vraiment ? À quel prix ? Et surtout, quel monde voulons-nous construire avec ces outils ?&lt;/strong&gt;&lt;/p&gt;

          &lt;hr&gt;
          &lt;div style=&quot;font-style:italic&quot;&gt;
              &lt;p&gt;
                  Vous êtes abonné·e au flux des articles&amp;nbsp;:
              &lt;/p&gt;
              &lt;ul&gt;
                  &lt;li&gt;de la catégorie&amp;nbsp;: Web&lt;/li&gt;
                  &lt;li&gt;rédigés en français.&lt;/li&gt;
              &lt;/ul&gt;
              
          &lt;/div&gt;
          
      </description>
      <pubDate>Sat, 06 Sep 2025 00:00:00 +0200</pubDate><link>https://boris.schapira.dev/notes/2025-09-llms-productivite/</link>
      <guid isPermaLink="true">https://boris.schapira.dev/notes/2025-09-llms-productivite/</guid>
      
      <category>web</category>
      
    </item>
    
    <item>
      <title>Recherche en ligne : quel modèle économique ?</title>
      
      <description>
          &lt;p&gt;Hier matin, j’ai échange sur Mastodon à propos du modèle économique de la recherche en ligne. Mais j’ai besoin d’un peu plus d’espace pour étaler mon raisonnement.&lt;/p&gt;
 &lt;div class=&quot;inline-note&quot;&gt;&lt;p&gt;Dans cet article, je vais parler de monétisation de la recherche, donc de monétisation de l’attention des internautes. Je ne considère pas que c’est souhaitable ou désirable, j’explique comment cela fonctionne aujourd’hui et comment cela fonctionnera, probablement, demain.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;La monétisation de la recherche en ligne repose historiquement sur un paradigme éprouvé : la valorisation du trafic généré. Il s’articule principalement autour de deux axes majeurs :&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Sur les pages de résultats (ou SERP – &lt;i lang=&quot;en&quot;&gt;Search Engine Results Page&lt;/i&gt;)&lt;/strong&gt; : les entreprises investissent pour positionner leurs annonces en réponse à des requêtes spécifiques des utilisateurs. Par exemple, une recherche pour “chaussures de course Paris” affichera prioritairement des publicités ciblées de distributeurs parisiens.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Dans les sites web&lt;/strong&gt; : les moteurs de recherche collaborent avec un vaste réseau de sites web pour y diffuser des campagnes publicitaires sous divers formats (liens textuels, bannières graphiques, vidéos, habillages de page, etc.). Les revenus issus de ces campagnes sont ensuite partagés entre le moteur de recherche et l’éditeur du site web.&lt;/p&gt;
&lt;p&gt;La pérennité de ce système est assurée par un ensemble d’outils technologiques spécialisés :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Des plateformes d’achat de positiions, de liens et d’espaces publicitaires&lt;/strong&gt; : des systèmes d’enchères en temps réel&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;#fn1&quot; id=&quot;fnref1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; permettent l’acquisition automatisée et optimisée d’emplacements publicitaires.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Des outils de mesure de performance&lt;/strong&gt; : Des solutions logicielles sont dédiées au décompte du nombre de clics obtenus ou à l’analyse du trafic entrant&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;#fn2&quot; id=&quot;fnref2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Un système de ciblage avancé&lt;/strong&gt; : le suivi du parcours des utilisateurs (&lt;i lang=&quot;en&quot;&gt;tracking&lt;/i&gt;) permet de construire des profils publicitaires détaillés et de mettre en œuvre des campagnes de reciblage publicitaire (ou &lt;i lang=&quot;en&quot;&gt;retargeting&lt;/i&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;p&gt;Au cours des deux dernières décennies, les pages de résultats des moteurs de recherche majeurs, tels que Google, ont connu des ajustements notables.&lt;/p&gt;
&lt;p&gt;D’une part, le cadre réglementaire, notamment dans certains pays, ainsi que les attentes du public en matière de transparence, ont conduit à une identification visuelle plus claire des liens sponsorisés par rapport aux résultats dits “naturels”.&lt;/p&gt;
&lt;p&gt;D’autre part, des innovations d’interface ont été introduites, telles que la “position zéro” (un encadré informatif apparaissant avant les résultats organiques pour fournir une réponse directe) ou l’amélioration algorithmique des titres des liens.&lt;/p&gt;
&lt;p&gt;Malgré ces évolutions en surface, &lt;strong&gt;les fondements structurels du modèle économique sont restés les mêmes&lt;/strong&gt; : des espaces ou des liens, vendus contre des clics.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;L’intégration croissante de l’intelligence artificielle générative au cœur des moteurs de recherche marque une potentielle rupture.&lt;/p&gt;
&lt;p&gt;Ces systèmes d’IA proposent désormais des paragraphes explicatifs, rédigés dynamiquement, en réponse directe aux requêtes des utilisateurs. Dans ce nouveau paradigme, les liens traditionnels peuvent subsister, mais ils se trouvent contextualisés par une sémantique préexistante, déjà porteuse d’une partie de la réponse.&lt;/p&gt;
&lt;p&gt;Cette transformation de l’interaction utilisateur n’est pas une simple innovation d’usage ; elle implique &lt;strong&gt;un changement profond et systémique pour une partie importante du modèle économique des moteurs de recherche&lt;/strong&gt;. Si l’IA fournit des réponses directes et complètes, le trafic vers les sites web sources pourrait chuter drastiquement. En contrepartie, ces réponses créent un potentiel d’influence considérable, susceptible de déterminer une navigation voire un achat futur.&lt;/p&gt;
&lt;p&gt;Comment se monétisera l’influence dans ce nouveau paysage numérique ?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Sur les pages de résultats&lt;/strong&gt; : prenons l’exemple d’une recherche pour “meilleur parfum floral pour femmes” qui aurait, auparavant, proposé comme premier lien une page produit pour une eau de parfum “Dior, J’adore” sur le site de Sephora. Dans une réponse IA, le parfum sera-t-il mis en avant comme étant “le plus connu”, “le plus vendu”, ou “le plus apprécié” ou est-ce la marque Sephora qui sera mise en avant, en rapport avec une des ses campagnes en cours ? Sur quels critères ce choix sémantique sera-t-il fondé ? La réponse sera-t-elle personnalisée en fonction des informations de profil de l’internaute, et si oui, avec quelle granularité (fidélité au parfum, fidélité au vendeur, sensibilité à la preuve sociale) ? Indépendamment du client, une valeur monétaire sera-t-elle affectée à l’exposition à ce type de message ?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Évolution des achats&lt;/strong&gt; : comment les plateformes d’achat de campagnes publicitaires devront-elles évoluer ? Sera-t-il nécessaire pour une marque de définir les champs sémantiques auxquels elle souhaite être associée ? Faudra-t-il définir un univers sémantique spécifique pour chaque produit ou service ? Par conséquent, comment évolueront les mécanismes d’enchères associés et sur quels nouveaux critères (qualitatifs, contextuels, d’engagement) reposeront-ils ?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Évolution des mesures&lt;/strong&gt; : La plupart des solutions d’analyse d’audience (les &lt;i lang=&quot;en&quot;&gt;analytics&lt;/i&gt;) se transforment progressivement, passant d’un suivi du trafic brut à des analyses de cohortes d’utilisateurs et de leurs comportements. Il est donc probable que les analystes se retrouvent à comparer l’impact de différents messages générés par l’IA sur des segments d’audience spécifiques.&lt;/p&gt;
&lt;p&gt;L’objectif sera alors d’identifier les champs sémantiques les plus porteurs d’engagement ou de conversion, et de déterminer à partir de quelle fréquence d’exposition un message est susceptible de provoquer un engagement ou une conversion. D’un point de vue projet, cela implique de redéfinir les indicateurs clés de performance au-delà du simple clic, pour y intégrer des mesures d’influence et de persuasion.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Évolution du ciblage&lt;/strong&gt; : Les outils de profilage vont, si ce n’est déjà le cas, évoluer pour intégrer la sensibilité des personnes à tel ou tel champ lexical, niveau de langue, ou type d’argumentation. Cette perspective, bien que technologiquement séduisante pour l’optimisation publicitaire, soulève une préoccupation éthique majeure : le risque de créer un internet qui enferme toujours davantage les individus dans leurs biais cognitifs ou leurs préférences existantes (les “bulles de filtres”), plutôt que de leur permettre d’exprimer et de développer leur potentiel.&lt;/p&gt;
&lt;p&gt;Cet aspect touche directement à la qualité de l’expérience utilisateur et à la responsabilité sociétale des plateformes numériques, notamment en matière d’accès équitable à l’information.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Évolution des placements publicitaires dans les sites&lt;/strong&gt; : une fois généralisé l’usage des IA pour la publicité, elle devrait peu à peu gagner toutes les sphères. Plutôt que des liens d’affiliation, ce sont des paragraphes entiers de sites ou d’articles qui devraient bientôt être écrits par des IA dans des emplacements monétisés au sein-même des contenus. Je n’ai pas hâte de voir les premiers articles de Presse contenant un publi-communiqué au sein-même de l’article, avec la même logique d’évaluation de la valeur du paragraphe en fonction de son adéquation au ciblage.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Google, acteur aujourd’hui hégémonique sur le marché de la recherche, pourrait parvenir à conserver sa position dominante en adaptant son modèle, mais ça n’est pas gagné. La croissance considérable de Google au cours des vingt dernières années s’est principalement construite sur la capitalisation et l’optimisation de son modèle économique existant. Cette inertie structurelle pourrait paradoxalement représenter un frein à sa capacité à se réinventer en profondeur.&lt;/p&gt;
&lt;p&gt;La clé de son succès futur pourrait résider davantage dans la maîtrise de l’écosystème des échanges et des interactions entre intelligences artificielles que dans la possession et l’exploitation de tous les services finaux eux-mêmes. Il s’agirait alors pour Google de s’atteler à la normalisation des protocoles et des interfaces permettant à des agents intelligents, développés par divers acteurs, de communiquer et de collaborer efficacement. C’est notamment l’objectif avoué du projet Google Agentspace : définir les règles du jeu de ce nouveau marché plutôt que de chercher à dominer chaque application spécifique qui y verrait le jour.&lt;/p&gt;
&lt;p&gt;Cela me rappelle la stratégie historiquement adoptée par Google avec son Chrome. En investissant massivement dans le développement de Chrome et en proposant le navigateur gratuitement au public, Google a acquis une influence considérable sur l’évolution des standards du web, lui permettant d’orienter de nombreux chantiers de normalisation de manière favorable à son écosystème.&lt;/p&gt;
&lt;p&gt;Est-ce que Google parviendra à reproduire ce succès dans un écosystème des IA déjà beaucoup plus fragmenté et compétitif que celui des navigateurs à l’époque du lancement de Chrome ?&lt;/p&gt;
&lt;p&gt;Et comment cela s’articulera-t-il avec l’évolution du cadre régulatoire de certaines régions, comme l’UE qui impose une “obligation de transparence” (notamment dans les réponses “optimisées” sémantiquement, via l’&lt;i lang=&quot;en&quot;&gt;AI Act&lt;/i&gt; et le &lt;i lang=&quot;en&quot;&gt;Digital Services Act&lt;/i&gt;) ?&lt;/p&gt;
&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol&gt;
&lt;li id=&quot;fn1&quot;&gt;
&lt;p&gt;Connues sous l’acronyme anglais RTB pour &lt;i lang=&quot;en&quot;&gt;Real-Time Bidding&lt;/i&gt;. &lt;a href=&quot;#fnref1&quot; class=&quot;footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;fn2&quot;&gt;
&lt;p&gt;Je reste persuadé qu’il y a conflit d’intérêt quand les outils appartenant au vendeur de la publicité sont considérés comme les seuls à même d’en juger l’efficacité. Je n’ai jamais connu d’outils vantant autant les vertus de la publicité sur l’acquisition que Google Analytics lui-même. &lt;a href=&quot;#fnref2&quot; class=&quot;footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;

          &lt;hr&gt;
          &lt;div style=&quot;font-style:italic&quot;&gt;
              &lt;p&gt;
                  Vous êtes abonné·e au flux des articles&amp;nbsp;:
              &lt;/p&gt;
              &lt;ul&gt;
                  &lt;li&gt;de la catégorie&amp;nbsp;: Web&lt;/li&gt;
                  &lt;li&gt;rédigés en français.&lt;/li&gt;
              &lt;/ul&gt;
              
          &lt;/div&gt;
          
      </description>
      <pubDate>Wed, 28 May 2025 00:00:00 +0200</pubDate><link>https://boris.schapira.dev/notes/2025-05-le-modele-economique-de-la-recherche-en-ligne/</link>
      <guid isPermaLink="true">https://boris.schapira.dev/notes/2025-05-le-modele-economique-de-la-recherche-en-ligne/</guid>
      
      <category>web</category>
      
    </item>
    
    <item>
      <title>De retour de l&apos;AFPA</title>
      
      <description>
          &lt;p&gt;Ce matin, je me lève avec une sensation familière d’anticipation. Pas de travail pour Contentsquare comme tous les jours, mais une mission tout aussi importante m’attend. Direction un centre AFPA, où je vais participer comme jury à des soutenances de titres professionnels.&lt;/p&gt;
&lt;p&gt;L’Association pour la Formation Professionnelle des Adultes (AFPA) est un organisme de formation professionnelle en France, spécialisé dans l’accompagnement des adultes en reconversion ou en recherche d’emploi. L’AFPA propose une large gamme de formations qualifiantes et certifiantes dans divers secteurs d’activité, allant de l’industrie aux services, en passant par le numérique et le bâtiment, incluant des périodes de stage en entreprise pour valider les compétences acquises.&lt;/p&gt;
&lt;p&gt;Un peu de trajet, je me présente à l’accueil, et prends connaissance de ma salle et de mon binôme. Les soutenances peuvent commencer.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;J’enseigne depuis 15 ans cette année.&lt;/p&gt;
&lt;p&gt;Mon parcours de formateur a débuté par de la formation en entreprise, avant de rejoindre Ingésup Bordeaux à sa création. J’ai enseigné dans plusieurs écoles, toujours en parallèle de mon activité principale, avec des volumes d’enseignement allant de 50 à 150 heures annuelles.&lt;/p&gt;
&lt;p&gt;En déménageant en Dordogne, où les écoles sont plus rares, j’ai élargi mon offre aux centres AFPA et transformé mes interventions en Master Class sur des journées entières. Une fois intégré·e dans le carnet d’adresses des responsables de formation, les invitations à participer à des jurys sont devenues régulières.&lt;/p&gt;
&lt;p&gt;Les démarches d’habilitation pour être jury de titre professionnel sont assez simples, rapides (1/2 journée) et peuvent se faire à distance. Les prérequis sont transparents : que le titre soit relatif à votre activité professionnelle (au moins 3 ans d’expérience) récente (ne pas avoir quitté le métier visé par le titre depuis plus de 5 ans). L’habilitation est à revouveler régulièrement après quelques années, avec une procédure simplifiée.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Aujourd’hui, je délivre la certification professionnelle Développeur·se Web et Web Mobile (DWWM), référencée sous le code &lt;a href=&quot;https://www.francecompetences.fr/recherche/rncp/37674/&quot;&gt;RNCP37674&lt;/a&gt;. C’est un sésame pour celles et ceux qui souhaitent entrer dans le marché du développement web ou approfondir ultérieurement leurs compétences avec une licence.&lt;/p&gt;
&lt;p&gt;Les compétences validées par la certification DWWM sont réparties en 2 blocs de compétences :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Développer la partie front-end d’une application web ou web mobile sécurisée&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;Installer et configurer son environnement de travail en fonction du projet web ou web mobile&lt;/li&gt;
&lt;li&gt;Maquetter des interfaces utilisateur web ou web mobile&lt;/li&gt;
&lt;li&gt;Réaliser des interfaces utilisateur statiques web ou web mobile&lt;/li&gt;
&lt;li&gt;Développer la partie dynamique des interfaces utilisateur web ou web mobile&lt;/li&gt;
&lt;/ul&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;&lt;strong&gt;Développer la partie back-end d’une application web ou web mobile sécurisée&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;Mettre en place une base de données relationnelle&lt;/li&gt;
&lt;li&gt;Développer des composants d’accès aux données SQL et NoSQL&lt;/li&gt;
&lt;li&gt;Développer des composants métier coté serveur&lt;/li&gt;
&lt;li&gt;Documenter le déploiement d’une application dynamique web ou web mobile&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Il ne s’agit pas ici de savoir si le candidat ou la candidate est autonome dans la réalisation de toutes ces tâches. Un junior avec un certification professionnelle reste junior en développement et a encore besoin de beaucoup d’accompagnement. Mais pour les compétences qui leur manquent, les reconverti·es apportent souvent un bagage singulier que d’autres n’ont pas.&lt;/p&gt;
&lt;p&gt;En plus de ces compétences, nous devons aussi évaluer le projet professionnel et donc valider que sont connues les attendus du marché : bases de gestion de projet, versionning, modalités de déploiement, capacité à réaliser une veille technologique, mise en œuvre des bonnes pratiques (notamment de sécurité), tests, etc.&lt;/p&gt;
&lt;p&gt;Le fait que ces sujets ne soient pas connus du ou de la candidate n’est pas rédhibitoire, mais les aborder permet de les identifier, et la personne pourra y revenir plus tard.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Notre premier·e candidat·e entre, présente sa convocation et sa pièce d’identité, et la soutenance peut commencer.&lt;/p&gt;
&lt;p&gt;La soutenance se décompose en trois étapes distinctes.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tout d’abord, la présentation en 35 minutes&lt;/strong&gt;. Le ou la candidate expose les acquis de sa formation, idéalement confirmés par son stage de fin de formation. Le jury, silencieux, prend des notes sans partager ses commentaires.&lt;/p&gt;
&lt;p&gt;Cette étape est cruciale car elle permet d’évaluer la capacité du ou de la candidat·e à synthétiser et à communiquer ses compétences. C’est aussi un exercice extrêmement difficile pour des personnes que rien ne prépare à parler avec aisance d’un sujet qu’elles ne connaissaient pas il y a 18 mois, et qu’elles maitrisent encore mal.&lt;/p&gt;
&lt;p&gt;Le stress est souvent palpable, et je propose régulièrement aux candidat·es de prendre le temps dont ils ont besoin pour reprendre leurs esprits avant d’enchainer.&lt;/p&gt;
&lt;p&gt;S’ensuivent &lt;strong&gt;40 minutes d’échange technique&lt;/strong&gt;. C’est en réalité le moment plus difficile.&lt;/p&gt;
&lt;p&gt;Le jury, référentiel de compétences en tête (et parfois en main), doit s’assurer que l’ensemble du spectre a été couvert. Nous essayons de dénicher le moindre indice nous laissant à penser que si certains mots-clés ne sont pas connus ou mentionnés, les notions de fond, elles, sont comprises… mais cela peut rapidement prendre l’apparence d’un interrogatoire.&lt;/p&gt;
&lt;p&gt;Le ou la candidate, qui a souvent concentré sa présentation sur ses réalisations en stage, se retrouve à devoir mobiliser des connaissances acquises en formation ou travaux individuels des mois auparavant. C’est souvent à ce moment-là que les candidat·es nous détestent, et nous le savons (parfois, même, nous les entendons en parler dans les couloirs).&lt;/p&gt;
&lt;p&gt;Enfin, le ou la candidate s’assoit pour &lt;strong&gt;15 minutes d’échange sur son projet de carrière&lt;/strong&gt;. Le jury pose des questions sur ce qui a amené·e à suivre cette formation et sur les projets futurs, tout en prodiguant des conseils si le ou la candidate en demande. Un de ces échanges avait par exemple donné &lt;a href=&quot;/notes/2022-03-un-metier-pas-que-une-passion/&quot;&gt;ce billet sur la différence entre métier et passion&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;C’est aussi un moment privilégié pour les candidat·es, qui ont rarement l’occasion de s’adresser à des professionnel·les en dehors du cadre de l’entretien d’embauche. Ils et elles peuvent ainsi obtenir des avis expérimentés sur les sujets qui les intéressent. Et certains n’hésitent pas à proposer leurs CVs !&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Rien ne ressemble moins à un parcours de reconversion qu’un autre.&lt;/p&gt;
&lt;p&gt;Bien sûr, on retrouve de grandes familles de profils : les jeunes dont l’orientation initiale était une erreur et qui bifurquent sans avoir vraiment pénétré le marché du travail, les trentenaires qui, après une décennie dans un premier emploi, souhaitent changer de vie…&lt;/p&gt;
&lt;p&gt;Mais en creusant, les histoires sont toujours singulières. Même sans être intrusif·ives, les candidat·es nous révèlent des accidents de la vie, des violences psychologiques, voire physiques (subies ou infligées), le spectre ou les sequelles de maladies, et l’inégalité des territoires face à l’emploi. Je mentirais si je disais que chaque rencontre ne m’émeut pas.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Une fois le ou la candidat·e parti·e, vient la délibération.&lt;/p&gt;
&lt;p&gt;En général, le jury débat peu. Les attendus des certifications sont clairs, et la réponse s’impose souvent à nous, qu’on le veuille ou non. Mais on ne passe pas 90 minutes avec quelqu’un à échanger sur ses compétences et aspirations sans développer une opinion sur les gens, en plus de leurs compétences. Alors parfois, on donne la certification à des personnes avec qui on ne voudrait pas, nous, travailler.&lt;/p&gt;
&lt;p&gt;Réciproquement, on a parfois envie de soutenir tel ou telle candidate qui n’est pas loin de valider les compétences… Mais ce petit écart fait la différence, et si on leur donne le certificat alors que les compétences ne sont pas acquises, on dévalue la valeur (déjà mal reconnue et précaire) du certificat des autres.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Quatre ou cinq candidat·es plus tard, la journée se termine. C’est l’heure de retourner chez moi pour me préparer à revenir demain. Et vendredi, retour au quotidien.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Une fois habilité·e, votre employeur peut difficilement vous refuser un congé pour participer à un jury. La loi indique qu’il s’agit d’un motif d’absence autorisée dont le congé ne peut pas être prélevé sur vos congés annuels. Certains employeurs anticipent et favorisent ce type de pratique en couvrant les frais relatifs au déplacement ou au logement : si ce n’est pas la cas, les AFPA les rembourseront.&lt;/p&gt;
&lt;details&gt;
  &lt;summary&gt;Ce qu&apos;en dit le Code du Travail (au 12 février 2025)&lt;/summary&gt;
  &lt;blockquote&gt;
    &lt;strong&gt;&lt;cite&gt;Article L3142-42&lt;/cite&gt;&lt;/strong&gt;
    &lt;p&gt;
      Lorsqu&apos;un salarié est désigné pour siéger dans une commission, un conseil
      ou un comité administratif ou paritaire appelé à traiter des problèmes
      d&apos;emploi et de formation, l&apos;employeur lui accorde le temps nécessaire pour
      participer aux réunions de ces instances.
    &lt;/p&gt;
    &lt;p&gt;La liste de ces instances est fixée par arrêté interministériel.&lt;/p&gt;
    &lt;p&gt;
      Lorsqu&apos;un salarié est désigné pour participer à un jury d&apos;examen ou de
      validation des acquis de l&apos;expérience, l&apos;employeur lui accorde une
      autorisation d&apos;absence pour participer à ce jury.
    &lt;/p&gt;
    &lt;p&gt;&lt;/p&gt;
  &lt;/blockquote&gt;
  &lt;blockquote&gt;
    &lt;strong&gt;&lt;cite&gt;Article L3142-43&lt;/cite&gt;&lt;/strong&gt;
    &lt;p&gt;
      La participation du salarié aux réunions et jurys mentionnés à l&apos;article
      L. 3142-42 n&apos;entraîne aucune réduction de la rémunération.
    &lt;/p&gt;
    &lt;p&gt;
      La durée des congéscorrespondants ne peut être imputée sur celle du congé
      payé annuel.
    &lt;/p&gt;
  &lt;/blockquote&gt;
  &lt;blockquote&gt;
    &lt;strong&gt;&lt;cite&gt;Article L3142-44&lt;/cite&gt;&lt;/strong&gt;
    &lt;p&gt;
      Un décret détermine les conditions dans lesquelles les dépenses afférentes
      au maintien du salaire et au remboursement des frais de déplacement sont
      supportées par les instances et jurys mentionnés à l&apos;article L. 3142-42 ou
      par l&apos;entreprise.
    &lt;/p&gt;
  &lt;/blockquote&gt;
  &lt;blockquote&gt;
    &lt;strong&gt;&lt;cite&gt;Article L3142-45&lt;/cite&gt;&lt;/strong&gt;
    &lt;p&gt;
      Le bénéfice du congé peut être refusé par l&apos;employeur s&apos;il estime que
      cette absence est susceptible d&apos;avoir des conséquences préjudiciables à la
      bonne marche de l&apos;entreprise.
    &lt;/p&gt;
    &lt;p&gt;
      Le refus de l&apos;employeur intervient après avis du comité social et
      économique. Il est motivé.
    &lt;/p&gt;
    &lt;p&gt;
      En cas de différend, le refus de l&apos;employeur peut être directement
      contesté par le salarié devant le conseil de prud&apos;hommes, statuant selon
      la procédure accélérée au fond, dans des conditions fixées par décret en
      Conseil d&apos;Etat.
    &lt;/p&gt;
  &lt;/blockquote&gt;
&lt;/details&gt;
&lt;hr /&gt;
&lt;p&gt;Je mesure la chance et le privilège d’avoir trouvé ma voie tôt. J’aime encore tellement mon domaine que je veux contribuer à y faire entrer de nouvelles têtes, et j’espère qu’un jour, j’aurai l’occasion de travailler avec des personnes rencontrées aujourd’hui.&lt;/p&gt;
&lt;p&gt;Mais je sais aussi que la reconversion professionnelle est un parcours semé d’embûches. Le chemin est encore long pour garantir à tou·tes les mêmes chances de réussite. Les organisations syndicales, la médecine du travail, et les commissions santé, sécurité et conditions de travail ont encore beaucoup à faire pour améliorer les conditions de formation et de reconversion.&lt;/p&gt;
&lt;p&gt;Peut-être faudrait-il envisager des dispositifs de financement dédiés, comme un “Compte Reconversion”, à l’image du compte formation, pour soutenir les candidat·es dans leur parcours. Tout reste à inventer, mais chaque jury est une étape de plus vers une société où la reconversion professionnelle est une opportunité accessible à tou·tes.&lt;/p&gt;

          &lt;hr&gt;
          &lt;div style=&quot;font-style:italic&quot;&gt;
              &lt;p&gt;
                  Vous êtes abonné·e au flux des articles&amp;nbsp;:
              &lt;/p&gt;
              &lt;ul&gt;
                  &lt;li&gt;de la catégorie&amp;nbsp;: Web&lt;/li&gt;
                  &lt;li&gt;rédigés en français.&lt;/li&gt;
              &lt;/ul&gt;
              
          &lt;/div&gt;
          
      </description>
      <pubDate>Wed, 12 Feb 2025 00:00:00 +0100</pubDate><link>https://boris.schapira.dev/notes/2025-02-de-retour-de-l-afpa/</link>
      <guid isPermaLink="true">https://boris.schapira.dev/notes/2025-02-de-retour-de-l-afpa/</guid>
      
      <category>Premières emb(a)uches</category>
      
      <category>web</category>
      
    </item>
    
    <item>
      <title>Votre site est un restaurant</title>
      
      <description>
          &lt;p&gt;Dans la plupart des organisations, avant même de créer un site web, les équipes sélectionnent les technologies à utiliser, souvent sans avoir défini le périmètre fonctionnel et l’expérience utilisateur souhaitée. Je ne m’attarderai pas ici sur leurs motivations, mais le fait est qu’elles présentent cela aux parties prenantes qui, souvent, ne savent pas de quoi il retourne et valident par manque de compétences.&lt;/p&gt;
&lt;p&gt;Avant de vous plonger dans les dernières technos mises en avant par les grandes entreprises, en pensant avoir les mêmes besoins et capacités qu’elles, permettez-moi de prendre un moment pour vous expliquer comment un site web est construit, en utilisant une métaphore que vous comprendrez : les restaurants.&lt;/p&gt;
&lt;hr /&gt;
&lt;figure aria-hidden=&quot;true&quot;&gt;
&lt;img src=&quot;https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_320/https://boris.schapira.dev/assets/images/web/2024-12-02/pexels-iina-luoto-460132-1211887.jpg&quot; srcset=&quot;https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_320/https://boris.schapira.dev/assets/images/web/2024-12-02/pexels-iina-luoto-460132-1211887.jpg 320w,
https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_640/https://boris.schapira.dev/assets/images/web/2024-12-02/pexels-iina-luoto-460132-1211887.jpg 640w,
https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_960/https://boris.schapira.dev/assets/images/web/2024-12-02/pexels-iina-luoto-460132-1211887.jpg 960w,
https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_1280/https://boris.schapira.dev/assets/images/web/2024-12-02/pexels-iina-luoto-460132-1211887.jpg 1280w,
https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_1600/https://boris.schapira.dev/assets/images/web/2024-12-02/pexels-iina-luoto-460132-1211887.jpg 1600w&quot; sizes=&quot;80vw&quot;  alt=&quot;Salade de légumes sur assiette en céramique blanche.&quot; loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; /&gt;
&lt;figcaption&gt;&lt;p&gt;Photo par Iina Luoto&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2&gt;Comment servir un plat de restaurant ?&lt;/h2&gt;
&lt;p&gt;Si vous souhaitez un jour servir un plat, vous aurez besoin d’une liste précise d’ingrédients et de leurs attributs (qui peuvent dépendre de l’ingrédient). Une carotte peut être cuite à la vapeur, un œuf poché. Cette liste d’ingrédients cuisinés ajoute de la profondeur et de la saveur au plat.&lt;/p&gt;
&lt;div class=&quot;inline-note&quot;&gt;&lt;p&gt;Ça, c’est HTML.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Des ingrédients cuisinés ne suffisent pas à créer un plat ; la présentation est essentielle. Pour susciter l’intérêt des clients, vous devez mettre en valeur ces ingrédients d’une manière qui reflète l’essence de l’art culinaire du restaurant.&lt;/p&gt;
&lt;div class=&quot;inline-note&quot;&gt;&lt;p&gt;Ça, c’est CSS.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Toutefois, une belle présentation ne suffit pas à définir un plat de restaurant. Pour y parvenir, il faut un personnel de service attentif qui prend les commandes, les communique à la cuisine et sert ensuite les assiettes dans la salle à manger.&lt;/p&gt;
&lt;div class=&quot;inline-note&quot;&gt;&lt;p&gt;Ce processus représente votre navigateur qui interagit avec le web.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;inline-note&quot;&gt;&lt;p&gt;Voilà, vous avez les bases.&lt;/p&gt;
&lt;p&gt;Maintenant créons un restaurant qui deviendra par la suite une franchise.&lt;/p&gt;
&lt;/div&gt;
&lt;hr /&gt;
&lt;figure aria-hidden=&quot;true&quot;&gt;
&lt;img src=&quot;https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_320/https://boris.schapira.dev/assets/images/web/2024-12-02/pexels-ketut-subiyanto-4350066.jpg&quot; srcset=&quot;https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_320/https://boris.schapira.dev/assets/images/web/2024-12-02/pexels-ketut-subiyanto-4350066.jpg 320w,
https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_640/https://boris.schapira.dev/assets/images/web/2024-12-02/pexels-ketut-subiyanto-4350066.jpg 640w,
https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_960/https://boris.schapira.dev/assets/images/web/2024-12-02/pexels-ketut-subiyanto-4350066.jpg 960w,
https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_1280/https://boris.schapira.dev/assets/images/web/2024-12-02/pexels-ketut-subiyanto-4350066.jpg 1280w,
https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_1600/https://boris.schapira.dev/assets/images/web/2024-12-02/pexels-ketut-subiyanto-4350066.jpg 1600w&quot; sizes=&quot;80vw&quot;  alt=&quot;Plusieurs collègues joyeux, travaillant sur un ordinateur portable dans un café&quot; loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1280&quot; /&gt;
&lt;figcaption&gt;&lt;p&gt;Photo par Ketut Subiyanto&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2&gt;Créer le projet&lt;/h2&gt;
&lt;p&gt;Pour mener à bien ce projet, les propriétaires réunissent une équipe dédiée. Celle-ci comprend un designer qui imagine l’expérience client, un chef cuisinier chargé d’élaborer les processus de cuisine et des artisans qualifiés chargés de construire les meubles et les cloisons. Bien que les propriétaires n’aient pas les moyens d’embaucher un designer, un chef et des artisans à temps plein dans un premier temps, ils prévoient de le faire une fois la franchise établie afin d’optimiser les coûts.&lt;/p&gt;
&lt;p&gt;Le lancement du projet implique rapidement que les parties prenantes se rencontrent, car certaines décisions prises en cuisine impactent l’organisation de la salle de restauration ainsi que les choix de design. Servir de la nourriture fusion dans un décor de cow-boy n’est peut-être pas le meilleur choix !&lt;/p&gt;
&lt;p&gt;Le comité de pilotage s’appuie sur les retours des artisans et de la brigade ; cependant, il prend fréquemment des décisions en huis clos. Il est donc essentiel que les informations partagées avec lui soient de haute qualité et qu’il possède une expérience suffisante pour prendre des décisions éclairées.&lt;/p&gt;
&lt;div class=&quot;inline-note&quot;&gt;&lt;p&gt;De nombreux projets web débutent par la constitution d’un petit comité de pilotage composé de prestataires, chargé de définir la vision et la gouvernance du projet. Au cours de cette phase, des décisions sont prises qui peuvent ne pas tenir compte des équipes qui seront chargées de faire vivre ces initiatives au cours des mois, voire des années suivantes.&lt;/p&gt;
&lt;/div&gt;
&lt;hr /&gt;
&lt;figure aria-hidden=&quot;true&quot;&gt;
&lt;img src=&quot;https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_320/https://boris.schapira.dev/assets/images/web/2024-12-02/pexels-elevate-3009800.jpg&quot; srcset=&quot;https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_320/https://boris.schapira.dev/assets/images/web/2024-12-02/pexels-elevate-3009800.jpg 320w,
https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_640/https://boris.schapira.dev/assets/images/web/2024-12-02/pexels-elevate-3009800.jpg 640w,
https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_960/https://boris.schapira.dev/assets/images/web/2024-12-02/pexels-elevate-3009800.jpg 960w,
https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_1280/https://boris.schapira.dev/assets/images/web/2024-12-02/pexels-elevate-3009800.jpg 1280w,
https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_1600/https://boris.schapira.dev/assets/images/web/2024-12-02/pexels-elevate-3009800.jpg 1600w&quot; sizes=&quot;80vw&quot;  alt=&quot;Homme prenant une photo avec une femme tenant un verre&quot; loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1276&quot; /&gt;
&lt;figcaption&gt;&lt;p&gt;Photo par ELEVATE&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2&gt;Répétitions et pré-ouverture&lt;/h2&gt;
&lt;p&gt;Une fois que tout est en place, les propriétaires organisent des services fictifs, également appelés répétitions générales, qui permettent au personnel de service de simuler des scénarios réels, les aidant ainsi à affiner leur fonctionnement et à identifier tout problème opérationnel avant le lancement officiel. C’est souvent la première occasion pour tout le personnel de travailler ensemble.&lt;/p&gt;
&lt;div class=&quot;inline-note&quot;&gt;&lt;p&gt;Dans les projets web, nous appelons cela l’environnement d’intégration.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Une fois les propriétaires satisfaits, ils invitent amis et famille pour des pré-ouvertures privées. Cela permet à l’équipe de tester le service et de recueillir des retours clients dans un environnement concret, en apportant les ajustements nécessaires.&lt;/p&gt;
&lt;div class=&quot;inline-note&quot;&gt;&lt;p&gt;C’est l’environnement de pré-production ou de staging.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Petit à petit, les propriétaires décident d’augmenter le nombre de personnes. C’est un test de la capacité à monter en charge du service. Combien de clients pouvons-nous accueillir en une soirée ? Et combien pouvons-nous servir en une semaine ? Et si nous atteignons notre limite, qu’est-ce qui lâchera en premier et quelle sera l’expérience client ?&lt;/p&gt;
&lt;div class=&quot;inline-note&quot;&gt;&lt;p&gt;Sur le web aussi, nous faisons des tests de charge !&lt;/p&gt;
&lt;/div&gt;
&lt;hr /&gt;
&lt;figure aria-hidden=&quot;true&quot;&gt;
&lt;img src=&quot;https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_320/https://boris.schapira.dev/assets/images/web/2024-12-02/pexels-rachel-claire-5490926.jpg&quot; srcset=&quot;https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_320/https://boris.schapira.dev/assets/images/web/2024-12-02/pexels-rachel-claire-5490926.jpg 320w,
https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_640/https://boris.schapira.dev/assets/images/web/2024-12-02/pexels-rachel-claire-5490926.jpg 640w,
https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_960/https://boris.schapira.dev/assets/images/web/2024-12-02/pexels-rachel-claire-5490926.jpg 960w,
https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_1280/https://boris.schapira.dev/assets/images/web/2024-12-02/pexels-rachel-claire-5490926.jpg 1280w,
https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_1600/https://boris.schapira.dev/assets/images/web/2024-12-02/pexels-rachel-claire-5490926.jpg 1600w&quot; sizes=&quot;80vw&quot;  alt=&quot;Un homme inconnu sert de délicieux sandwichs dans un restaurant.&quot; loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1280&quot; /&gt;
&lt;figcaption&gt;&lt;p&gt;Photo par Rachel Claire&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2&gt;L’offre la plus simple&lt;/h2&gt;
&lt;p&gt;Le premier bistrot est désormais officiellement ouvert ! L’expérience culinaire est simple mais très efficace. Le menu propose une sélection soigneusement choisie et très limitée de plats, garantissant que chaque commande est préparée rapidement, satisfait les clients et est joliment présentée. Les clients peuvent commander à la carte, ou même demander des plats personnalisés, mais la plupart ne le font pas. Le personnel de service peut se déplacer efficacement entre la cuisine et les tables, améliorant ainsi l’efficacité globale du service. Après quelques années de fonctionnement, les propriétaires décident d’investir pour multiplier le nombre de restaurants. La franchise est en place.&lt;/p&gt;
&lt;div class=&quot;inline-note&quot;&gt;&lt;p&gt;Les sites web très simples en HTML+CSS, avec une personnalisation côté serveur limitée, sont souvent les plus rapides. Ils ont un &lt;span lang=&quot;en&quot;&gt;Time To First Bite&lt;/span&gt; (Temps avant la Première Bouchée) très court ! La montée en charge est souvent aussi simple que de multiplier les serveurs frontaux.&lt;/p&gt;
&lt;/div&gt;
&lt;hr /&gt;
&lt;figure aria-hidden=&quot;true&quot;&gt;
&lt;img src=&quot;https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_320/https://boris.schapira.dev/assets/images/web/2024-12-02/pexels-mr-photographer-549209752-27605495.jpg&quot; srcset=&quot;https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_320/https://boris.schapira.dev/assets/images/web/2024-12-02/pexels-mr-photographer-549209752-27605495.jpg 320w,
https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_640/https://boris.schapira.dev/assets/images/web/2024-12-02/pexels-mr-photographer-549209752-27605495.jpg 640w,
https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_960/https://boris.schapira.dev/assets/images/web/2024-12-02/pexels-mr-photographer-549209752-27605495.jpg 960w,
https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_1280/https://boris.schapira.dev/assets/images/web/2024-12-02/pexels-mr-photographer-549209752-27605495.jpg 1280w,
https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_1600/https://boris.schapira.dev/assets/images/web/2024-12-02/pexels-mr-photographer-549209752-27605495.jpg 1600w&quot; sizes=&quot;80vw&quot;  alt=&quot;Un salon moderne et dynamique avec des sièges rembourrés colorés, des murs en bois et des luminaires suspendus.&quot; loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1232&quot; /&gt;
&lt;figcaption&gt;&lt;p&gt;Photo par MR PHOTOGRAPHER&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2&gt;&lt;span lang=&quot;en&quot;&gt;Fast Food&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;À un moment donné, les propriétaires estiment que le concept peut être optimisé en investissant dans un processus de production à la chaîne plus efficace. Les clients perdent ainsi la possibilité de personnaliser leurs plats et doivent choisir parmi des menus standardisés. La brigade n’a besoin de consulter une nouvelle recette qu’une seule fois pour en maîtriser instantanément la préparation. La rapidité du service est donc déterminée par la vitesse à laquelle le personnel de service peut livrer les assiettes, dans la mesure où l’espace le permet. Le nouveau goulet d’étranglement est le paiement, car il n’est pas possible de produire en masse les additions, qui dépendent de la commande de chaque table, et de procéder à leur encaissement.&lt;/p&gt;
&lt;div class=&quot;inline-note&quot;&gt;&lt;p&gt;Sur le web aussi, on peut obtenir des réponses instantanées si l’on sert le même contenu à chaque visite : c’est ce qu’on appelle la mise en cache. Cependant, quelle que soit la rapidité de votre site web, la vitesse sera toujours limitée par les étapes personnalisées, telles que les entonnoirs de paiement. Il est essentiel de garantir une excellente interface utilisateur pour éviter les frustrations.&lt;/p&gt;
&lt;/div&gt;
&lt;hr /&gt;
&lt;figure aria-hidden=&quot;true&quot;&gt;
&lt;img src=&quot;https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_320/https://boris.schapira.dev/assets/images/web/2024-12-02/pexels-kampus-7843990.jpg&quot; srcset=&quot;https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_320/https://boris.schapira.dev/assets/images/web/2024-12-02/pexels-kampus-7843990.jpg 320w,
https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_640/https://boris.schapira.dev/assets/images/web/2024-12-02/pexels-kampus-7843990.jpg 640w,
https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_960/https://boris.schapira.dev/assets/images/web/2024-12-02/pexels-kampus-7843990.jpg 960w,
https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_1280/https://boris.schapira.dev/assets/images/web/2024-12-02/pexels-kampus-7843990.jpg 1280w,
https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_1600/https://boris.schapira.dev/assets/images/web/2024-12-02/pexels-kampus-7843990.jpg 1600w&quot; sizes=&quot;80vw&quot;  alt=&quot;Un homme portant un tee-shirt rouge tient un presse-papiers et se tient devant des cartons empilés dans ce qui semble être une zone de stockage.&quot; loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1180&quot; /&gt;
&lt;figcaption&gt;&lt;p&gt;Photo par Kampus Production&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2&gt;Quality Audits&lt;/h2&gt;
&lt;p&gt;Pour obtenir une certification ISO et se conformer aux cadres réglementaires dans tous les lieux où la franchise opère, les propriétaires ont choisi de mener des audits complets sur l’ensemble de la chaîne. Cela inclut tout, de l’accès des clients à la salle de restauration, aux procédés de fabrication des denrées alimentaires, en passant par l’approvisionnement en ingrédients.&lt;/p&gt;
&lt;p&gt;Les thèmes peuvent varier considérablement. Par exemple, les auditeurs peuvent signaler l’absence de mains courantes dans les toilettes pour les clients handicapés ou souligner que le type de carottes utilisé en cuisine n’est pas sourcé localement. Ils fournissent des listes de contrôle, tests et vérifications que les propriétaires peuvent effectuer avant, pendant et après chaque service pour éviter toute régression en termes de qualité.&lt;/p&gt;
&lt;div class=&quot;inline-note&quot;&gt;&lt;p&gt;L’assurance qualité (&lt;span lang=&quot;en&quot;&gt;Quality Assurance&lt;/span&gt;, ou QA) dans le développement web garantit que les sites web fonctionnent correctement et répondent aux exigences grâce à des processus de test et de validation systématiques. L’audit implique la révision et l’évaluation des applications web pour leur conformité aux normes et aux meilleures pratiques, identifiant les domaines à améliorer. Certains outils automatisés permettent d’effectuer des tests répétitifs de manière efficace, améliorant ainsi la fiabilité et la rapidité. Cependant, certains problèmes, en particulier l’accessibilité numérique, nécessitent une évaluation manuelle approfondie pour garantir la conformité avec des directives telles que les &lt;span lang=&quot;en&quot;&gt;Web Content Accessibility Guidelines (WCAG)&lt;/span&gt; ou en France, le Référentiel Général d’Amélioration de l’Accessibilité (RGAA).&lt;/p&gt;
&lt;/div&gt;
&lt;hr /&gt;
&lt;figure aria-hidden=&quot;true&quot;&gt;
&lt;img src=&quot;https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_320/https://boris.schapira.dev/assets/images/web/2024-12-02/pexels-fabriziovelez-15270300.jpg&quot; srcset=&quot;https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_320/https://boris.schapira.dev/assets/images/web/2024-12-02/pexels-fabriziovelez-15270300.jpg 320w,
https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_640/https://boris.schapira.dev/assets/images/web/2024-12-02/pexels-fabriziovelez-15270300.jpg 640w,
https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_960/https://boris.schapira.dev/assets/images/web/2024-12-02/pexels-fabriziovelez-15270300.jpg 960w,
https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_1280/https://boris.schapira.dev/assets/images/web/2024-12-02/pexels-fabriziovelez-15270300.jpg 1280w,
https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_1600/https://boris.schapira.dev/assets/images/web/2024-12-02/pexels-fabriziovelez-15270300.jpg 1600w&quot; sizes=&quot;80vw&quot;  alt=&quot;Serveur présentant une bouteille de vin dans un restaurant.&quot; loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; /&gt;
&lt;figcaption&gt;&lt;p&gt;Photo par Fabrizio Velez&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2&gt;Service en salle&lt;/h2&gt;
&lt;p&gt;Pour améliorer la qualité du service, les propriétaires ont décidé de mettre en place une équipe d’assistance à la clientèle appelée “&lt;span lang=&quot;en&quot;&gt;Jolly Servants&lt;/span&gt;” (JS). Certains de ces JS sont spécialisés dans les boissons, tandis que d’autres se concentrent sur l’assaisonnement. Parfois, ils offrent des services personnalisés sans quitter la salle, en fournissant des recommandations ; cependant, il arrive qu’ils aient besoin de l’aide de la cuisine, et demandent alors de l’aide au personnel de service habituel. Certains sont maladroits et déstabilisent le service lorsqu’ils tombent.&lt;/p&gt;
&lt;p&gt;Bien que l’expérience de l’utilisateur soit de plus en plus personnalisée, la salle peut devenir quelque peu bondée, ce qui ralentit le service. Par conséquent, certains clients peuvent se retrouver à attendre avant de pouvoir profiter d’une expérience satisfaisante. En outre, le personnel de service doit parfois déplacer des assiettes pour faire de la place à d’autres, ce qui peut être frustrant.&lt;/p&gt;
&lt;div class=&quot;inline-note&quot;&gt;&lt;p&gt;JavaScript (JS) améliore les capacités natives du navigateur en offrant une expérience utilisateur avancée qui peut dépendre (ou non) des données du serveur. Cependant, une quantité excessive de JS peut entraîner des tâches longues (périodes pendant lesquelles le navigateur ne répond plus), ce qui peut se traduire par une expérience plus lente ou moins satisfaisante. Le déplacement d’éléments visuels peut entraîner des changements de mise en page, ce qui réduit encore l’expérience globale de l’utilisateur.&lt;/p&gt;
&lt;/div&gt;
&lt;hr /&gt;
&lt;figure aria-hidden=&quot;true&quot;&gt;
&lt;img src=&quot;https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_320/https://boris.schapira.dev/assets/images/web/2024-12-02/pexels-olly-3801649.jpg&quot; srcset=&quot;https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_320/https://boris.schapira.dev/assets/images/web/2024-12-02/pexels-olly-3801649.jpg 320w,
https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_640/https://boris.schapira.dev/assets/images/web/2024-12-02/pexels-olly-3801649.jpg 640w,
https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_960/https://boris.schapira.dev/assets/images/web/2024-12-02/pexels-olly-3801649.jpg 960w,
https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_1280/https://boris.schapira.dev/assets/images/web/2024-12-02/pexels-olly-3801649.jpg 1280w,
https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_1600/https://boris.schapira.dev/assets/images/web/2024-12-02/pexels-olly-3801649.jpg 1600w&quot; sizes=&quot;80vw&quot;  alt=&quot;Une jeune femme souriante, vêtue d&amp;#39;une chemise et d&amp;#39;un tablier roses, prend des notes devant le mur coloré d&amp;#39;un restaurant couvert de graffitis.&quot; loading=&quot;lazy&quot; width=&quot;7680&quot; height=&quot;5120&quot; /&gt;
&lt;figcaption&gt;&lt;p&gt;Photo par Andrea Piacquadio&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2&gt;Mesurer pour optimiser&lt;/h2&gt;
&lt;p&gt;Pour améliorer les conditions d’exploitation du restaurant, les propriétaires ont engagé deux maîtres d’hôtel contractuels. L’un d’eux se concentre sur l’évaluation de la cuisine et du bureau, en identifiant les goulets d’étranglement dans les zones de stockage et de préparation, ainsi que dans la comptabilité. L’autre maître d’hôtel observe le personnel de service, les interactions avec les clients à leur table et la caisse enregistreuse.&lt;/p&gt;
&lt;p&gt;Tous deux prennent méticuleusement des notes, qui sont ensuite envoyées à leur entreprise, laquelle génère un rapport en temps réel détaillant les performances du restaurant, avec des données de diagnostic et des recommandations d’amélioration réalisables.&lt;/p&gt;
&lt;p&gt;Leur présence peut ralentir les opérations, surtout dans une cuisine ou une salle à manger déjà encombrée.&lt;/p&gt;
&lt;p&gt;Les propriétaires reconnaissent qu’il ne s’agit là que d’une partie de leur investissement. Ils ont également confié au comité de pilotage la responsabilité de mettre en œuvre les améliorations, car l’observabilité seule est inefficace sans un effort d’amélioration continue qui lui aussi, coûte de l’argent.&lt;/p&gt;
&lt;div class=&quot;inline-note&quot;&gt;&lt;p&gt;Pour améliorer les performances du site web, les parties prenantes s’appuient souvent sur de la télémétrie. Certains services se spécialisent dans la surveillance du back-end, comme les outils de suivi des performances des applications (&lt;span lang=&quot;en&quot;&gt;Application Performance Monitoring, APM&lt;/span&gt;), tandis que d’autres se concentrent sur le front-end, notamment les outils analytiques (&lt;span lang=&quot;en&quot;&gt;Analytics&lt;/span&gt;) et de surveillance des utilisateurs réels (&lt;span lang=&quot;en&quot;&gt;Real User Monitoring, RUM&lt;/span&gt;). Ces outils alimentent l’amélioration continue en permettant l’observation de l’utilisation, mais la plupart des sites web doivent sélectionner judicieusement leurs outils, car l’intégration d’un trop grand nombre de services tiers peut ralentir l’expérience.&lt;/p&gt;
&lt;/div&gt;
&lt;hr /&gt;
&lt;figure aria-hidden=&quot;true&quot;&gt;
&lt;img src=&quot;https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_320/https://boris.schapira.dev/assets/images/web/2024-12-02/pexels-pixabay-262978.jpg&quot; srcset=&quot;https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_320/https://boris.schapira.dev/assets/images/web/2024-12-02/pexels-pixabay-262978.jpg 320w,
https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_640/https://boris.schapira.dev/assets/images/web/2024-12-02/pexels-pixabay-262978.jpg 640w,
https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_960/https://boris.schapira.dev/assets/images/web/2024-12-02/pexels-pixabay-262978.jpg 960w,
https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_1280/https://boris.schapira.dev/assets/images/web/2024-12-02/pexels-pixabay-262978.jpg 1280w,
https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_1600/https://boris.schapira.dev/assets/images/web/2024-12-02/pexels-pixabay-262978.jpg 1600w&quot; sizes=&quot;80vw&quot;  alt=&quot;Un serveur tient à la fois une salade et une assiette de hors-d&amp;#39;œuvre dans un restaurant confortable et chaleueusement éclairé.&quot; loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1280&quot; /&gt;
&lt;figcaption&gt;&lt;p&gt;Photo par Pixabay&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2&gt;Assiettes musicales&lt;/h2&gt;
&lt;p&gt;Pour mieux comprendre les attentes des clients, les propriétaires ont mis en place une série de tests. Dans un premier temps, différents restaurants de la franchise ont proposé des menus distincts, tandis que l’équipe dirigeante a analysé l’impact de ces variations sur l’expérience des clients. Mais ils se sont vite rendu compte qu’il était difficile de tirer des conclusions à partir d’une population hétérogène ayant des habitudes culturelles différentes. Ils ont donc décidé de mener les tests dans un même restaurant, en demandant aux &lt;span lang=&quot;en&quot;&gt;Jolly Servants&lt;/span&gt; de présenter des menus différents à des tables différentes.&lt;/p&gt;
&lt;p&gt;La conduite de tests visant à faire évoluer le menu d’un restaurant présente des difficultés considérables. Déterminer quelles tables ont droit à des options de menu spécifiques demande beaucoup de temps aux JS, ce qui peut avoir un impact négatif sur l’expérience globale du client. Certains habitués peuvent être déconcertés par le fait que le menu change d’un jour à l’autre, ce qui donne un sentiment d’incohérence qui s’ajoute à la lenteur du service.&lt;/p&gt;
&lt;div class=&quot;inline-note&quot;&gt;&lt;p&gt;Les tests A/B, principalement orchestrés par du code JS, sont largement considérés comme la méthode la plus fiable pour évaluer comment les changements apportés à un site web affectent l’expérience d’utilisation. Toutefois, la réalisation de ces tests peut s’avérer délicate et entraîner une expérience sous-optimale pour les utilisateurs au cours de la période d’évaluation. Les professionnels du web conseillent généralement de faire preuve de prudence lors de la mise en œuvre des tests A/B, de définir clairement la portée et la durée des tests et de veiller à ce que les solutions soient désactivées lorsqu’elles ne sont plus utiles.&lt;/p&gt;
&lt;/div&gt;
&lt;hr /&gt;
&lt;figure aria-hidden=&quot;true&quot;&gt;
&lt;img src=&quot;https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_320/https://boris.schapira.dev/assets/images/web/2024-12-02/pexels-roman-odintsov-5061192.jpg&quot; srcset=&quot;https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_320/https://boris.schapira.dev/assets/images/web/2024-12-02/pexels-roman-odintsov-5061192.jpg 320w,
https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_640/https://boris.schapira.dev/assets/images/web/2024-12-02/pexels-roman-odintsov-5061192.jpg 640w,
https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_960/https://boris.schapira.dev/assets/images/web/2024-12-02/pexels-roman-odintsov-5061192.jpg 960w,
https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_1280/https://boris.schapira.dev/assets/images/web/2024-12-02/pexels-roman-odintsov-5061192.jpg 1280w,
https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_1600/https://boris.schapira.dev/assets/images/web/2024-12-02/pexels-roman-odintsov-5061192.jpg 1600w&quot; sizes=&quot;80vw&quot;  alt=&quot;Gelato ice creams on display.&quot; loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1280&quot; /&gt;
&lt;figcaption&gt;&lt;p&gt;Photo par Roman Odintsov&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2&gt;Partenariats et délégation de tâches&lt;/h2&gt;
&lt;p&gt;Certaines parties du menu sont confiées à des partenaires avec lesquels le propriétaire a établi des conventions. Par exemple, les coupes glacées seront préparées par un glacier local. En outre, certains Jolly Servants internes ont été remplacés par des sous-traitants ; en particulier, un caviste installé de l’autre côté de la rue se charge désormais de la sélection des vins et formule des recommandations.&lt;/p&gt;
&lt;p&gt;En réorientant son personnel vers son activité principale, les propriétaires ont amélioré à la fois l’efficacité et la fiabilité du service. Toutefois, cette réorientation a eu pour effet de ralentir certaines expériences déléguées, voire de les rendre plus risquées, notamment lorsque le sommelier doit se frayer un chemin dans la circulation en traversant la rue aux heures de pointe.&lt;/p&gt;
&lt;p&gt;Les propriétaires doivent donc désormais surveiller leurs partenaires. En tant qu’éléments clés de ce partenariat, leur rôle est crucial pour la réussite de l’entreprise.&lt;/p&gt;
&lt;div class=&quot;inline-note&quot;&gt;&lt;p&gt;L’utilisation de JavaScript tiers peut s’avérer très efficace pour fournir des services qui seraient autrement hors de portée ou dont on sait qu’ils seront mieux exécutés par des professionnels. Toutefois, leur utilisation nécessite un contrôle rigoureux pour garantir que les services fonctionnent correctement et ne rencontrent pas de défaillances susceptibles de dégrader l’expérience d’utilisation. Les services de télémétrie et d’observabilité peuvent aider à détecter les erreurs et à évaluer leur impact.&lt;/p&gt;
&lt;/div&gt;
&lt;hr /&gt;
&lt;figure aria-hidden=&quot;true&quot;&gt;
&lt;img src=&quot;https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_320/https://boris.schapira.dev/assets/images/web/2024-12-02/pexels-mvdheuvel-2284166.jpg&quot; srcset=&quot;https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_320/https://boris.schapira.dev/assets/images/web/2024-12-02/pexels-mvdheuvel-2284166.jpg 320w,
https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_640/https://boris.schapira.dev/assets/images/web/2024-12-02/pexels-mvdheuvel-2284166.jpg 640w,
https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_960/https://boris.schapira.dev/assets/images/web/2024-12-02/pexels-mvdheuvel-2284166.jpg 960w,
https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_1280/https://boris.schapira.dev/assets/images/web/2024-12-02/pexels-mvdheuvel-2284166.jpg 1280w,
https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_1600/https://boris.schapira.dev/assets/images/web/2024-12-02/pexels-mvdheuvel-2284166.jpg 1600w&quot; sizes=&quot;80vw&quot;  alt=&quot;Une surface en bois présente un éventail de légumes frais, notamment des poivrons rouges coupés, des concombres en tranches et des légumes verts, ainsi que divers ustensiles de cuisine et ingrédients, créant ainsi une scène vivante et attirante.&quot; loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1440&quot; /&gt;
&lt;figcaption&gt;&lt;p&gt;Photo par Maarten van den Heuvel&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2&gt;À la table du Chef&lt;/h2&gt;
&lt;p&gt;Pour se démarquer de la concurrence, les propriétaires décident que certains de leurs franchisés offriront une expérience unique et caractéristique : la table du chef. Directement à la table, un chef spécialisé prépare un menu personnalisé pour les clients, en fonction de leurs préférences, de leurs restrictions alimentaires et de la disponibilité des ingrédients apportés par le personnel de service et les Jolly Servants.&lt;/p&gt;
&lt;p&gt;Les tables de chef occupent un espace important dans la salle, ce qui oblige le personnel de service à se déplacer fréquemment pour rassembler ou réarranger les ingrédients. Cela peut ralentir le début du repas. C’est pourquoi, généralement, cette expérience immersive commence par la dégustation d’un délicieux cocktail pendant que les convives attendent.&lt;/p&gt;
&lt;p&gt;Une fois que tout est en place, la table fonctionne de manière autonome, ce qui réduit la demande en cuisine, qui peut même devenir nulle. Le service fourni est à la fois personnalisé et immédiat. Toutefois, cette expérience exclusive n’est généralement accessible qu’aux clients les plus aisés (ou à ceux qui ont le plus gros carnet d’adresses !).&lt;/p&gt;
&lt;p&gt;Afin de rehausser leur statut, les restaurants voisins ont commencé à proposer aussi des tables de chef, y compris le &lt;span lang=&quot;en&quot;&gt;fast food&lt;/em&gt; situé à deux pâtés de maisons. Les longs temps d’attente et l’expérience décevante font que les clients ne reviennent pas pour une deuxième visite !&lt;/p&gt;
&lt;div class=&quot;inline-note&quot;&gt;&lt;p&gt;Dans l’industrie du web, les applications à page unique (&lt;span lang=&quot;en&quot;&gt;Single-Page Apps&lt;/span&gt;, SPA) sont particulièrement bien adaptées à la création de parcours immersifs et attrayants pour les utilisateurs. Elles prennent souvent plus de temps à charger, et encore plus sur les appareils d’entrée de gamme, de sorte que les parties prenantes doivent réfléchir sérieusement aux astuces visuelles à utiliser pour embarquer le public et lui faire supporter l’attente.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;inline-note&quot;&gt;&lt;p&gt;De nombreux petits sites web adoptent des SPA, s’inspirant de la tendance établie par les grands acteurs du web, même lorsque leurs besoins sont simples et standardisés. Il en résulte souvent une mauvaise affectation des ressources, car les équipes utilisent des librairies et techniques qui ne correspondent pas à leurs besoins, et n’ont pas les moyens d’investir correctement dans leur mise en œuvre.&lt;/p&gt;
&lt;/div&gt;
&lt;hr /&gt;
&lt;figure aria-hidden=&quot;true&quot;&gt;
&lt;img src=&quot;https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_320/https://boris.schapira.dev/assets/images/web/2024-12-02/pexels-elevate-3009797.jpg&quot; srcset=&quot;https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_320/https://boris.schapira.dev/assets/images/web/2024-12-02/pexels-elevate-3009797.jpg 320w,
https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_640/https://boris.schapira.dev/assets/images/web/2024-12-02/pexels-elevate-3009797.jpg 640w,
https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_960/https://boris.schapira.dev/assets/images/web/2024-12-02/pexels-elevate-3009797.jpg 960w,
https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_1280/https://boris.schapira.dev/assets/images/web/2024-12-02/pexels-elevate-3009797.jpg 1280w,
https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_1600/https://boris.schapira.dev/assets/images/web/2024-12-02/pexels-elevate-3009797.jpg 1600w&quot; sizes=&quot;80vw&quot;  alt=&quot;Trois personnes assises à une table dans ce qui semble être un restaurant ou un bar, dégustant des boissons et de la nourriture ensemble.&quot; loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1277&quot; /&gt;
&lt;figcaption&gt;&lt;p&gt;Photo par ELEVATE&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2&gt;Des sites web divers pour de belles expériences&lt;/h2&gt;
&lt;p&gt;En conclusion de cette métaphore imparfaite et incomplète, je pense qu’il est essentiel de comprendre que, tout comme il existe différents types de restaurants, il devrait également y avoir une large variété de manières de faire des sites web. Du restaurant indépendant informel à la table de chef exclusive, chaque site peut offrir une expérience unique, avec son propre lot de défis.&lt;/p&gt;
&lt;p&gt;Souvent, les solutions les plus simples s’avèrent les plus efficaces. Toutefois, un manque de personnalisation peut entraîner une diminution des marges bénéficiaires et entraver le développement d’une identité de marque solide. À l’inverse, les solutions plus complexes exigent une prise en compte méticuleuse de l’expérience utilisateur, ce qui nécessite des investissements importants dans l’analyse de la frustration et de l’amélioration continue. La dégradation temporaire d’une expérience peut être une décision stratégique visant à l’améliorer à long terme. Il est essentiel d’investir dans les processus et, en particulier, la mise en œuvre de l’assurance qualité joue un rôle essentiel dans la réduction des risques les plus importants.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;em&gt;Merci à Meryem, qui a supporté mes expériences de métaphores filées pendant plus d’un an, et à Morgan, Luke et Natacha pour leur relecture !&lt;/em&gt;&lt;/p&gt;

          &lt;hr&gt;
          &lt;div style=&quot;font-style:italic&quot;&gt;
              &lt;p&gt;
                  Vous êtes abonné·e au flux des articles&amp;nbsp;:
              &lt;/p&gt;
              &lt;ul&gt;
                  &lt;li&gt;de la catégorie&amp;nbsp;: Web&lt;/li&gt;
                  &lt;li&gt;rédigés en français.&lt;/li&gt;
              &lt;/ul&gt;
              
          &lt;/div&gt;
          
      </description>
      <pubDate>Sat, 07 Dec 2024 00:00:00 +0100</pubDate><link>https://boris.schapira.dev/notes/2024-12-analogie-restaurant/</link>
      <guid isPermaLink="true">https://boris.schapira.dev/notes/2024-12-analogie-restaurant/</guid>
      
      <category>web</category>
      
    </item>
    
    <item>
      <title>Incremental Font Transfer</title>
      
      <description>
          &lt;p&gt;Pour un français comme moi, les langues asiatiques telles que le chinois, le japonais et le coréen, ainsi que d’autres ayant des écritures complexes, contiennent souvent beaucoup de caractères. Bien que cette diversité soit culturellement fascinante, elle pose de vrais défis lors de la sélection d’une police web. Les fichiers peuvent avoir un poids potentiellement très important, ce qui entraîne des temps de chargement plus lents, en particulier sur les appareils mobiles ou dans les régions avec une connectivité limitée à Internet.&lt;/p&gt;
&lt;p&gt;Pour vous donner un ordre de grandeur de la différence de poids, voici le sous-ensemble latin-étendu :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;En conclusion : le fichier de police médian avec un sous-ensemble latin-étendu de (395) caractères devrait pesé un peu &lt;strong&gt;moins de 20 Ko&lt;/strong&gt;. Si vous regardez vos requêtes réseau et que votre police est beaucoup plus lourde, eh bien, il y a du travail à faire. &lt;cite&gt;”&lt;a href=&quot;https://www.phpied.com/bytes-normal-web-font-study-google-fonts/&quot; hreflang=&quot;en&quot;&gt;How many bytes is “normal” for a web font: a study using Google fonts&lt;/a&gt;”, Stoyan Stefanov (traduction en français)&lt;/cite&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Et voici pour le chinois :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Dans un type de police chinois, la plus petite police standard contient 6 763 caractères. Un type de police japonais appelé Hanazono a 87 791 caractères. La taille typique d’un fichier de police chinois est généralement &lt;strong&gt;d’au moins 5 Mo, parfois plus de 20 Mo&lt;/strong&gt;. &lt;cite&gt;”&lt;a href=&quot;https://medium.com/@Hynuza/typographic-design-in-asian-language-4bb1035ebb7&quot; hreflang=&quot;en&quot;&gt;Chinese Typographic Design&lt;/a&gt;”, Hynuza (traduction en français)&lt;/cite&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Vous comprendrez pourquoi il est courant de s’abstenir d’utiliser des polices web pour les pages web accessibles en ligne dans cette région.&lt;/p&gt;
&lt;p&gt;De l’optimisation est toujours possible. Une méthode efficace est le &lt;i lang=&quot;en&quot;&gt;subsetting&lt;/i&gt;, qui consiste à créer un sous-ensemble d’une police - un fichier qui inclut une sélection personnalisée (et généralement limitée) de glyphes. Mais même avec un chinois de base niveau lycée, nous aurions besoin d’un minimum de 3 000 caractères.&lt;/p&gt;
&lt;p&gt;Je savais que le streaming de polices n’était pas possible, mais une publication récente &lt;a href=&quot;https://indieweb.social/@anthony&quot;&gt;d’Anthony&lt;/a&gt; sur le Web Performance Slack a attiré mon attention. Il faisait la promotion d’une nouvelle spécification (encore en brouillon) spécifiquement conçue à cet effet.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Sans cette technologie, un navigateur doit télécharger chaque dernier byte d’une police avant de pouvoir rendre des caractères utilisant cette police. &lt;cite&gt;”&lt;a href=&quot;https://www.w3.org/TR/IFT/&quot; hreflang=&quot;en&quot;&gt;Incremental Font Transfer&lt;/a&gt;”, W3C Working Draft (traduction en français)&lt;/cite&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;L’idée est de créer une police qui peut être segmentée en un chargement initial, contenant uniquement le sous-ensemble de ce qui est critique, puis de lui adjoindre des additions qui complètent la police en cours de route. Une sorte de lazy-loading, mais pour les polices d’écriture.&lt;/p&gt;
&lt;p&gt;Cette première itération, si elle est mise en œuvre dans les navigateurs, a le potentiel de débloquer d’importantes opportunités pour les marchés asiatiques. Je suis enthousiaste, même si je n’ai pas hâte de devoir maîtriser des descripteurs de police tels que &lt;code&gt;size-adjust&lt;/code&gt; ou &lt;code&gt;ascent-override&lt;/code&gt; pour gérer efficacement l’expérience utilisateur lors du chargement successifs de correctifs contenant des milliers de glyphes !&lt;/p&gt;

          &lt;hr&gt;
          &lt;div style=&quot;font-style:italic&quot;&gt;
              &lt;p&gt;
                  Vous êtes abonné·e au flux des articles&amp;nbsp;:
              &lt;/p&gt;
              &lt;ul&gt;
                  &lt;li&gt;de la catégorie&amp;nbsp;: Web&lt;/li&gt;
                  &lt;li&gt;rédigés en français.&lt;/li&gt;
              &lt;/ul&gt;
              
          &lt;/div&gt;
          
      </description>
      <pubDate>Wed, 23 Oct 2024 00:00:00 +0200</pubDate><link>https://boris.schapira.dev/notes/2024-10-incremental-font-transfer-fr/</link>
      <guid isPermaLink="true">https://boris.schapira.dev/notes/2024-10-incremental-font-transfer-fr/</guid>
      
      <category>web</category>
      
    </item>
    
    <item>
      <title>L&apos;API Speculative Rules</title>
      
      <description>
          &lt;p&gt;En Web Performance, il arrive un moment où vous avez épuisé toutes les options pour accélérer la vitesse de la page web que vous optimisez. Peut-être parce que vous avez appliqué toutes les améliorations que vous aviez prévues, ou peut-être que les contraintes de votre stack techno ne permettent pas d’aller plus loin. Lorsque vous atteignez ce point, votre attention se déplace généralement vers l’accélération du temps de chargement de la &lt;strong&gt;prochaine&lt;/strong&gt; page web.&lt;/p&gt;
&lt;p&gt;J’ai vu &lt;em&gt;beaucoup&lt;/em&gt; d’expériences en ce sens au fil des ans, et je surveille de près la nouvelle itération : &lt;strong&gt;l’API &lt;span lang=&quot;en&quot;&gt;Speculative Rules&lt;/span&gt;&lt;/strong&gt;.&lt;/p&gt;
&lt;h2&gt;Petit historique personnel&lt;/h2&gt;
&lt;p&gt;Au début des années 2000s, les abonnements d’accès à Internet étaient limités dans le temps. Mon moi adolescent utilisait FasterFox, une extension Firefox qui préchargeait tous les liens possibles sur une page web pendant que je la lisais, me permettant de poursuivre ma navigation hors ligne. C’était particulièrement utile pour les sites web riches en contenu, comme ceux avec des paroles de chansons et des astuces de jeux vidéo !&lt;/p&gt;
&lt;p&gt;À un moment, Firefox a introduit le support de la balise &lt;code&gt;&amp;lt;link rel=&amp;quot;next&amp;quot;&amp;gt;&lt;/code&gt;, qui permettait au navigateur de précharger une page vers laquelle il prévoyait que l’utilisateur naviguerait ensuite. J’ai trouvé cette fonctionnalité particulièrement pratique pour créer des articles étalés sur plusieurs pages sur mes premiers blogs.&lt;/p&gt;
&lt;p&gt;Pendant une période, je me suis concentré sur .NET et je ne me suis pas beaucoup intéressé au préchargement (j’ai surtout utilisé Wordpress pour la création de contenu, et j’ai appris jQuery, puis JavaScript, en cours de route). Je m’y suis remis sérieusement vers 2012.&lt;/p&gt;
&lt;p&gt;Quelques années plus tard, Alexandre Dieulot a proposé un concept intéressant : il a remarqué qu’il y a généralement &lt;strong&gt;un délai de 200 à 300 millisecondes entre le moment où une personne survole un lien et celui où elle clique dessus&lt;/strong&gt;. Il s’est demandé si ce délai pouvait être utilisé pour précharger la page, afin qu’elle soit prête dès que l’utilisateur clique. Cette idée, bien qu’elle nécessite de définir ce qu’était un préchargement et d’exclure les liens de téléchargement, était relativement simple et a conduit à la création de la bibliothèque &lt;a href=&quot;http://instantclick.io/&quot;&gt;InstantClick.io&lt;/a&gt; et son utilisation d’un requête XHR similaire à un &lt;code&gt;prefetch&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;D’autres bibliothèques ont suivi, offrant des possibilités supplémentaires. La plus remarquable d’entre elles était sûrement &lt;a href=&quot;https://github.com/turbolinks/turbolinks&quot;&gt;turbolinks&lt;/a&gt;. Ces bibliothèques visaient à offrir à l’utilisateur la même expérience avec les &lt;span lang=&quot;en&quot;&gt;Multiple Page Apps (MPA)&lt;/span&gt; qu’avec les &lt;span lang=&quot;en&quot;&gt;Single Page Apps (SPA)&lt;/span&gt;. Elles s’appuyaient sur des &lt;a href=&quot;/notes/2020-05-preload-prefetch-et-preconnect-resource-hints/&quot;&gt;Resource Hints&lt;/a&gt; et sur la toute nouvelle API HTML5 &lt;span lang=&quot;en&quot;&gt;History&lt;/span&gt; pour &lt;strong&gt;conserver l’usage des boutons Retour et Rechargement&lt;/strong&gt;. Il était possible d’utiliser à la fois une solution de type SPA et InstantClick, comme je l’ai fait sur ce blog pendant un certain temps. Cependant, j’ai finalement décidé que les avantages étaient trop faibles compte tenu du temps de réponse natif déjà rapide du site.&lt;/p&gt;
&lt;p&gt;Compte tenu de l’efficacité de ces solutions et de leur faible besoin de maintenance au fil du temps (InstantClick n’a pratiquement pas changé en 10 ans), il semblait logique de développer une nouvelle API de navigateur qui améliorerait nativement les performances pour les navigations futures.&lt;/p&gt;
&lt;h2&gt;Découvrons l’API Speculative Rules&lt;/h2&gt;
&lt;p&gt;L’API &lt;span lang=&quot;en&quot;&gt;Speculative Rules&lt;/span&gt; introduit une nouvelle méthode déclarative pour indiquer au navigateur quel contenu doit être préchargé et/ou pré-rendu à la demande du concepteur ou de la conceptrice du site.&lt;/p&gt;
&lt;p&gt;Les règles de spéculation contiennent un paramètre appelé &lt;code&gt;eagerness&lt;/code&gt; (qu’on peut traduire par “degré d’impatience”) qui détermine quand le navigateur doit télécharger le contenu. Doit-il le faire immédiatement (comme le faisait FasterFox), ou doit-il attendre un signal supplémentaire, tel qu’un survol (comme InstantClick), ou même le déplacement du pointeur de la souris &lt;em&gt;vers&lt;/em&gt; le lien ?&lt;/p&gt;
&lt;p&gt;Je trouve que les règles établies par cette API sont &lt;strong&gt;élégamment définies&lt;/strong&gt; et faciles à comprendre. Prenons l’exemple suivant, directement à la fin du &lt;code&gt;&amp;lt;body&amp;gt;&lt;/code&gt; :&lt;/p&gt;
&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&amp;lt;script type=&quot;speculationrules&quot;&amp;gt;
  {
    &quot;prefetch&quot;: [
      { &quot;where&quot;:
        { &quot;href_matches&quot;: &quot;/*&quot; },
        &quot;eagerness&quot;: &quot;moderate&quot;
      }
    ]
  }
&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Ou sous la forme d’un snippet à intégrer dans votre tag manager (pour un A/B test, par exemple) :&lt;/p&gt;
&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;(function () {
  if (HTMLScriptElement.supports &amp;amp;&amp;amp; HTMLScriptElement.supports(&apos;speculationrules&apos;)) {
    const script = document.createElement(&quot;script&quot;);
    script.type = &quot;speculationrules&quot;
    script.textContent = JSON.stringify({
      prefetch: [
        {
          where: { &apos;href_matches&apos;: &apos;/*&apos; },
          eagerness: &apos;moderate&apos;
        }
      ]
    });
    document.body.appendChild(script);
  }
})()
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
 &lt;div class=&quot;inline-note&quot;&gt;&lt;p&gt;&lt;strong&gt;NOTE&lt;/strong&gt;&lt;br /&gt;
L’ajout d’un snippet HTML personnalisé dans Google Tag Manager ne déclenchera pas les règles de spéculation. Préférez l’option du snippet JavaScript.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Il indique au navigateur que pour toutes les URLs du domaine courant &lt;code&gt;/*&lt;/code&gt;, il peut faire du &lt;code&gt;prefetch&lt;/code&gt; s’il pense que l’utilisateur va avoir besoin du contenu. Avec une impatience “modérée” (&lt;code&gt;moderate&lt;/code&gt;), cela se produira principalement lorsque l’utilisateur survolera le lien.&lt;/p&gt;
&lt;p&gt;Est-ce vraiment si simple ? Oui.&lt;/p&gt;
&lt;p&gt;Vous avez également la possibilité d’utiliser &lt;code&gt;prerender&lt;/code&gt; au lieu de &lt;code&gt;prefetch&lt;/code&gt;. Cependant, permettez-moi d’insister sur le fait que si la règle `prerender$ est appliquée, elle récupère &lt;strong&gt;et traite&lt;/strong&gt; la ressource à l’avance, ce qui inclut &lt;em&gt;la récupération des sous-ressources&lt;/em&gt; également, qu’elles proviennent d’une première ou d’une troisième partie.&lt;/p&gt;
&lt;h2&gt;Devons-nous attendre un peu ?&lt;/h2&gt;
&lt;p&gt;Déjà, précisions que même si la fonctionnalité est déployée dans Chrome depuis quelques mois, &lt;strong&gt;elle reste récente&lt;/strong&gt;. Certaines alchimies, comme la spéculation &lt;code&gt;prefetch&lt;/code&gt; couplée à un Service Worker, ne fonctionnent pas encore. Rien de dramatique, mais précaution est mère de sûreté.&lt;/p&gt;
&lt;p&gt;Le préchargement et le rendu spéculatif, bien que bénéfiques pour l’expérience de certains utilisateurs, &lt;strong&gt;comportent le risque de gaspiller des ressourses&lt;/strong&gt; : de la bande passante et des ressources du serveur si les données extraites ne sont pas utilisées parce que l’utilisateur ne navigue pas jusqu’à la page ainsi optimisée.&lt;/p&gt;
&lt;p&gt;Si votre objectif est d’améliorer la sobriété de votre site web ou si vous êtes tenu d’en rendre compte (par exemple, en raison de la directive européenne sur les rapports de développement durable des entreprises), il n’est peut-être pas judicieux de gonfler artificiellement le nombre de pages que vos serveurs calculent et délivrent et que vos utilisateurs téléchargent.&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;#fn1&quot; id=&quot;fnref1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;Du côté du serveur, l’utilisation de règles de spéculation peut potentiellement présenter un risque pour votre site web. Si une règle est trop gourmande, elle peut déclencher un grand nombre de chargements de pages et de ressources pour chaque utilisateur. &lt;strong&gt;Cette charge accrue&lt;/strong&gt; peut mettre à rude épreuve la capacité de votre serveur à fournir rapidement du contenu à tous les utilisateurs, en particulier si vous n’avez pas mis en place de fonctionnalités de mise en cache au préalable. Dans les cas extrêmes, cela peut vous conduire à &lt;strong&gt;vous infliger à vous-même un déni de service distribué (DDoS)&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;L’utilisation de l’API &lt;span lang=&quot;en&quot;&gt;Speculative Rules&lt;/span&gt; ne doit se faire uniquement au regard des impératifs d’amélioration de l’UX, mais aussi en prenant en compte d’autres facteurs. Nous pouvons aussi optimiser les règles : en tant qu’administrateurs de sites web, nous pouvons utiliser l’analyse comportementale pour mieux connaître les pages les plus populaires et les parcours de navigation des utilisateur·ices. Ces informations peuvent nous aider à déterminer si l’utilisation de l’API &lt;span lang=&quot;en&quot;&gt;Speculative Rules&lt;/span&gt; améliorerait ou nuirait à l’UX.&lt;/p&gt;
&lt;p&gt;Enfin, et ce n’est pas neutre, l’utilisation de l’API &lt;span lang=&quot;en&quot;&gt;Speculative Rules&lt;/span&gt; peut s’apparenter à une forme de suivi des survols des utilisateurs. En effet, si on imagine qu’un survol d’un lien ou qu’un glissement du pointeur de la souris vers un lien déclenche un &lt;code&gt;prefetch&lt;/code&gt; ou un &lt;code&gt;prerender&lt;/code&gt; alors il suffirait d’aller consulter les logs du serveur pour savoir ce qu’il a intéressé un utilisateur, qu’il visite la page… ou non&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;#fn2&quot; id=&quot;fnref2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;
&lt;h2&gt;Alors, on y va ?&lt;/h2&gt;
&lt;p&gt;L’API &lt;span lang=&quot;en&quot;&gt;Speculative Rules&lt;/span&gt; est &lt;strong&gt;le dernier développement d’une histoire qui dure depuis longtemps&lt;/strong&gt;. Les problèmes que j’ai évoqués étaient déjà inhérents aux solutions précédentes. l’API &lt;span lang=&quot;en&quot;&gt;Speculative Rules&lt;/span&gt; ne fait qu’intégrer ce comportement directement dans le navigateur, ce qui présente certains avantages par rapport à JavaScript.&lt;/p&gt;
&lt;p&gt;Tout d’abord, le navigateur est mieux équipé qu’un développeur pour déterminer la position des éléments et comprendre les mouvements de la souris de l’utilisateur. C’est pourquoi il constitue actuellement l’option la plus efficace pour ce type d’optimisation. Deuxièmement, le navigateur est conscient de l’état de la connexion et du niveau de la batterie, et peut choisir de ne pas charger les ressources de manière spéculative si les conditions ne sont pas favorables. Si le navigateur détecte que les réponses du serveur à cette origine sont trop lentes, il peut également désactiver ce comportement.&lt;/p&gt;
&lt;p&gt;Tout ceci étant dit, &lt;strong&gt;la demande du public pour un web plus durable et respectueux de la vie privée n’a jamais été aussi forte&lt;/strong&gt;. Soyez donc peu gourmand dans vos règles et n’abusez pas des droits que vous avez sur les logs produits. Le chargement de ressources le plus sobre est celui qui n’a jamais eu lieu.&lt;/p&gt;
&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol&gt;
&lt;li id=&quot;fn1&quot;&gt;
&lt;p&gt;A l’inverse, vous pouvez avoir un intérêt particulier à gonfler ces chiffres. En France, par exemple, les aides publiques à la Presse sont calculées en fonction du nombre de pages vues. Il est évident que certaines entités exploiteront ces règles pour “générer des pages vues”, tout comme elles le faisaient auparavant avec des rafraîchissements excessifs. &lt;a href=&quot;#fnref1&quot; class=&quot;footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;fn2&quot;&gt;
&lt;p&gt;Si un tel traitement des données est fait, il devrait –en tout cas dans l’Union Européenne– être encadré par un consentement. &lt;a href=&quot;#fnref2&quot; class=&quot;footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;

          &lt;hr&gt;
          &lt;div style=&quot;font-style:italic&quot;&gt;
              &lt;p&gt;
                  Vous êtes abonné·e au flux des articles&amp;nbsp;:
              &lt;/p&gt;
              &lt;ul&gt;
                  &lt;li&gt;de la catégorie&amp;nbsp;: Web&lt;/li&gt;
                  &lt;li&gt;rédigés en français.&lt;/li&gt;
              &lt;/ul&gt;
              
          &lt;/div&gt;
          
      </description>
      <pubDate>Mon, 03 Jun 2024 00:00:00 +0200</pubDate><link>https://boris.schapira.dev/notes/2024-06-speculative-rules-fr/</link>
      <guid isPermaLink="true">https://boris.schapira.dev/notes/2024-06-speculative-rules-fr/</guid>
      
      <category>web</category>
      
    </item>
    
    <item>
      <title>Entendre le réseau</title>
      
      <description>
          &lt;p&gt;Voici bon outil de sensibilisation qui passe par l’audio : &lt;a href=&quot;https://chromewebstore.google.com/detail/netbeep/hcgpboeddcgldkgimfmcnfloonkccfmi&quot;&gt;Netbeep&lt;/a&gt; est une extension Chrome qui joue des sons à chaque requête sur le réseau en fonction du type de contenu et du domaine appelé. Le pitch du son est plus élevée pour les fichiers plus volumineux.&lt;/p&gt;
&lt;p&gt;Une bonne manière d’activer la synesthésie. En s’appuyant sur le son plutôt que sur le regard pour porter une information autrement invisible à l’écran l’extension de permet de comprendre comment se charge une page.&lt;/p&gt;
&lt;p&gt;Sur une page isolée, difficile d’en tirer quelque chose. Mais quand on commence à l’utiliser sur plusieurs sites, on entend très vite des différences.&lt;/p&gt;
&lt;p&gt;Si quelqu’un a un équivalent Firefox, je serais ravi de l’ajouter à ce post.&lt;/p&gt;

          &lt;hr&gt;
          &lt;div style=&quot;font-style:italic&quot;&gt;
              &lt;p&gt;
                  Vous êtes abonné·e au flux des articles&amp;nbsp;:
              &lt;/p&gt;
              &lt;ul&gt;
                  &lt;li&gt;de la catégorie&amp;nbsp;: Web&lt;/li&gt;
                  &lt;li&gt;rédigés en français.&lt;/li&gt;
              &lt;/ul&gt;
              
          &lt;/div&gt;
          
      </description>
      <pubDate>Thu, 23 May 2024 00:00:00 +0200</pubDate><link>https://boris.schapira.dev/notes/2024-05-entendre-le-reseau/</link>
      <guid isPermaLink="true">https://boris.schapira.dev/notes/2024-05-entendre-le-reseau/</guid>
      
      <category>web</category>
      
    </item>
    
    <item>
      <title>L&apos;UX n&apos;est pas une checklist</title>
      
      <description>
          &lt;p&gt;Je discutais hier avec un client qui souhaite trouver un équivalent à Largest Contentful Paint sur Safari.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Du point de vue SEO&lt;/em&gt;, même si vous avez un tout petit peu de trafic sur Chrome, &lt;em&gt;c’est ce trafic qui détermine la façon dont Google perçoit la performance web de la page&lt;/em&gt;. Mais si vous souhaitez mesurer et améliorer l’expérience de vos utilisateurs, alors je dirais : &lt;strong&gt;pourquoi se limiter au LCP ?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Le LCP a été créé en tant que mesure de substitution pour répondre à une question beaucoup plus intéressante : “Quand les utilisateurs voient-ils &lt;em&gt;suffisamment&lt;/em&gt; d’éléments pour commencer à interagir avec la page ? Et ce “&lt;em&gt;suffisamment&lt;/em&gt;” dépend de la nature et du contenu de la page, ainsi que des intentions de l’utilisateur.&lt;/p&gt;
&lt;p&gt;Les LCP est rarement la meilleure mesure pour répondre à cette question. C’est juste la plus générique, calculable pour la plupart des pages, par Chromium et les navigateurs basés sur Chromium, donc parfaite pour une évaluation générique et très large dans l’optique du référencement de milliards de pages web.&lt;/p&gt;
&lt;p&gt;[…]&lt;/p&gt;
&lt;p&gt;Si j’essaie d’évaluer une page web en particulier, que je connais très bien, je ne mesurerais pas le LCP mais j’utiliserais plutôt des indicateurs personnalisés, qui répondront mieux aux défis de la page et qui m’aideront à comprendre son fonctionnement :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Le moment où l’autocomplétion de recherche est fonctionnelle et affichée (dans cet ordre, espérons-le)&lt;/li&gt;
&lt;li&gt;Sur une liste de produits, le moment où les utilisateurs peuvent voir la première ligne de produits et commencer à interagir avec les filtres.&lt;/li&gt;
&lt;li&gt;Le moment où le spinner de chargement apparaît et le moment où il disparaît pour afficher le contenu final (utile pour les “splash” d’accueil et les interstitiels du tunnel de conversion).&lt;/li&gt;
&lt;li&gt;Dans une page composée de modules récupérant leur contenu à partir d’une API, les temps d’affichage spécifiques de chaque composant&lt;/li&gt;
&lt;li&gt;etc.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p&gt;C’est l’une des raisons pour lesquelles je pense que l’acquisition de Dareboost par Contentsquare a donné un nouveau souffle à ma carrière dans le domaine de la qualité Web. Plus encore qu’auparavant, je me suis impliqué dans les questions d’utilisabilité, dont la performance web n’est qu’une partie. Cela m’aide à garder à l’esprit que les indicateurs que nous mesurons en web performance ne sont souvent que les projections les plus génériques et les plus imparfaites de l’expérience technique d’une page web, et qu’ils ne sont pas nécessairement alignés sur les objectifs des clients et des organisations.&lt;/p&gt;
&lt;p&gt;Hier soir, je suis tombé sur un article de Tim qui résume très élégamment la situation (traduction maison) :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Les organisations ont parfois tendance à considérer les performances comme une sorte de checklist, d’autant plus que les Core Web Vitals attirent plus que jamais l’attention sur les performances. On essaie de cocher les cases de ces indicateurs pour qu’ils passent au vert, puis on s’arrête là.&lt;/p&gt;
&lt;p&gt;[…]&lt;/p&gt;
&lt;p&gt;Mais tout cela est sans importance si ces mesures ne donnent pas une image exhaustive de la manière dont les utilisateurs interagissent avec nos sites.&lt;/p&gt;
&lt;p&gt;La performance, comme l’accessibilité, n’est pas une question de conformité.&lt;/p&gt;
&lt;p&gt;[…]&lt;/p&gt;
&lt;p&gt;Il s’agit d’offrir une meilleure expérience aux personnes qui utilisent nos sites et nos applications afin qu’elles puissent atteindre leurs objectifs de manière efficace. Pour ce faire, nous devons être très attentifs à la nature de ces objectifs et à la manière dont ils sont atteints, et nous assurer que la manière dont nous mesurons les performances correspond à ces objectifs. &lt;cite&gt;”&lt;a href=&quot;https://timkadlec.com/remembers/2023-06-01-performance-is-not-a-checklist/&quot; hreflang=&quot;en&quot;&gt;Performance Is Not a Checklist&lt;/a&gt;”, Tim Kadlec&lt;/cite&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;En tant que personne impliquée depuis des années dans &lt;a href=&quot;https://checklists.opquast.com/fr/assurance-qualite-web/&quot;&gt;Opquast, la checklist de référence de la Qualité Web&lt;/a&gt;, la critique du concept de checklist me touche. Mais elle est très juste. Les checklist ne sont que le début d’une approche de la qualité web, une ligne directrice. C’est un moyen de faire les choses correctement dès la première itération et d’ainsi réduire immédiatement l’exposition au risque de non-qualité. Mais ce n’est pas une réponse parfaite à l’UX, ça ne l’a jamais été et ça ne le sera jamais.&lt;/p&gt;

          &lt;hr&gt;
          &lt;div style=&quot;font-style:italic&quot;&gt;
              &lt;p&gt;
                  Vous êtes abonné·e au flux des articles&amp;nbsp;:
              &lt;/p&gt;
              &lt;ul&gt;
                  &lt;li&gt;de la catégorie&amp;nbsp;: Web&lt;/li&gt;
                  &lt;li&gt;rédigés en français.&lt;/li&gt;
              &lt;/ul&gt;
              
          &lt;/div&gt;
          
      </description>
      <pubDate>Thu, 01 Jun 2023 00:00:00 +0200</pubDate><link>https://boris.schapira.dev/notes/2023-06-l-ux-n-est-pas-une-checklist/</link>
      <guid isPermaLink="true">https://boris.schapira.dev/notes/2023-06-l-ux-n-est-pas-une-checklist/</guid>
      
      <category>web</category>
      
    </item>
    
    <item>
      <title>Un nouveau besoin sur le Produit</title>
      
      <description>
          &lt;p&gt;Quand je remonte un besoin pouvant donner lieu à une amélioration du produit :&lt;/p&gt;
&lt;p&gt;Entre ce que je pense,&lt;br /&gt;
Ce que je veux dire,&lt;br /&gt;
Ce que je crois dire,&lt;br /&gt;
Ce que je dis,&lt;br /&gt;
Ce que le département Produit a envie d’entendre,&lt;br /&gt;
Ce qu’il entend,&lt;br /&gt;
Ce qu’il comprend,&lt;br /&gt;
Comment il mène l’étape de découverte du besoin,&lt;br /&gt;
Ce que d’autres utilisateurs et utilisatrices veulent entendre,&lt;br /&gt;
Ce qu’ils entendent,&lt;br /&gt;
Ce qu’ils comprennent,&lt;br /&gt;
Ce qu’ils expriment,&lt;br /&gt;
Ce que les designers veulent entendre,&lt;br /&gt;
Ce qu’ils entendent,&lt;br /&gt;
Ce qu’ils comprennent,&lt;br /&gt;
Ce qu’ils expérimentent avec ces personnes,&lt;br /&gt;
L’UX qui en ressort,&lt;br /&gt;
La manière dont elle est communiqué à l’équipe technique,&lt;br /&gt;
Ce que l’équipe technique a envie d’entendre,&lt;br /&gt;
Ce qu’elle entend,&lt;br /&gt;
Ce qu’elle est en mesure d’implémenter en respectant les contraintes,&lt;br /&gt;
Les délais qu’elle communique,&lt;br /&gt;
La manière dont ils sont reçus par les équipes opérationnelles,&lt;br /&gt;
Ce que les équipes opérationalles voulaient entendre,&lt;br /&gt;
Ce qu’elles comprennent,&lt;br /&gt;
Ce qu’il a fallu expliquer aux commerciaux,&lt;br /&gt;
Ce que l’équipe commerciale a envie d’entendre,&lt;br /&gt;
Ce qu’elle comprennent,&lt;br /&gt;
La manière dont elle projettent de le vendre,&lt;br /&gt;
Ce que le ou la cliente a envie d’entendre,&lt;br /&gt;
Ce qu’elle entend,&lt;br /&gt;
Ce qu’elle comprend,&lt;br /&gt;
Ce qu’elle achète,&lt;br /&gt;
Et les usages auxquels elle sera formé par l’équipe Customer Success…&lt;/p&gt;
&lt;p&gt;… il y a quand même une grand chance qu’on ait des difficultés à communiquer.&lt;/p&gt;
&lt;p&gt;Mais essayons quand même !&lt;/p&gt;

          &lt;hr&gt;
          &lt;div style=&quot;font-style:italic&quot;&gt;
              &lt;p&gt;
                  Vous êtes abonné·e au flux des articles&amp;nbsp;:
              &lt;/p&gt;
              &lt;ul&gt;
                  &lt;li&gt;de la catégorie&amp;nbsp;: Web&lt;/li&gt;
                  &lt;li&gt;rédigés en français.&lt;/li&gt;
              &lt;/ul&gt;
              
          &lt;/div&gt;
          
      </description>
      <pubDate>Mon, 22 Aug 2022 00:00:00 +0200</pubDate><link>https://boris.schapira.dev/notes/2022-08-un-nouveau-besoin-produit/</link>
      <guid isPermaLink="true">https://boris.schapira.dev/notes/2022-08-un-nouveau-besoin-produit/</guid>
      
      <category>web</category>
      
    </item>
    
    <item>
      <title>Un métier, pas qu&apos;une passion</title>
      
      <description>
          &lt;p&gt;Développeurs et développeuses juniors : vos formations, &lt;a href=&quot;/notes/2021-01-les-formations-courtes/&quot;&gt;courtes ou longues&lt;/a&gt;, ne vous rendent pas autonomes et prêt·es à accueillir n’importe quel défi. Et ça tombe bien, ce n’est pas le rôle de la formation initiale que de faire sortir des promotions entières de personnes immédiatement compétentes sur un projet exigeant.&lt;/p&gt;
&lt;p&gt;Vous êtes peut-être passionné·e de code, mais cela ne suffit à en faire un métier. Si vous vous arrêtez là, c’est un hobby.&lt;/p&gt;
&lt;p&gt;Pour que ça devienne un métier, il faut que cela s’inscrive dans un cadre :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;un ensemble de compétences techniques ;&lt;/li&gt;
&lt;li&gt;de la formation pour en acquérir de nouvelles ;&lt;/li&gt;
&lt;li&gt;un cadre métier avec un contexte (légal, structurel, conjoncturel, géographique, etc.) ;&lt;/li&gt;
&lt;li&gt;des engagements de cadre / coûts / délai à respecter ou, en tout cas, à définir ;&lt;/li&gt;
&lt;li&gt;une organisation régie par une gouvernance à adopter (définissant qui décide de quoi, en informe qui, comment, qui est responsable en cas d’échec…) ;&lt;/li&gt;
&lt;li&gt;souvent, un jargon mélangeant des composantes locales et plus consensuelles ;&lt;/li&gt;
&lt;li&gt;des pratiques organisationnelles, parfois historiques, ayant un rôle social dans l’organisation ;&lt;/li&gt;
&lt;li&gt;un portefeuille de projets orientés par une vision stratégique et des tactiques adaptées à chaque situation et inscrites dans des plans sur la durée (parfois pluriannuels).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Mais ce n’est pas tout.&lt;/p&gt;
&lt;p&gt;À votre arrivée, vous ne serez pas seul·e. Vous évoluerez dans des équipes composées de professionnel·les déjà organisé·es qui gèrent des conflits et des équilibres de pouvoir au quotidien, avec des intérêts parfois divergents et de la gestion de conflits. Et… &lt;strong&gt;c’est normal&lt;/strong&gt;. Parce que c’est comme ça dans toutes les organisations humaines.&lt;/p&gt;
&lt;p&gt;L’école ne forme souvent qu’aux compétences techniques (et encore, souvent on en sort &lt;a href=&quot;https://boris.schapira.dev/notes/2015-09-expert-ou-pas/&quot;&gt;débutant·e avancé·e&lt;/a&gt;), en s’assurant de donner un bagage intellectuel théorique pour le reste, mais sans expérience. Et c’est déjà beaucoup.&lt;/p&gt;
&lt;p&gt;Donc les compétences nécessaires pour naviguer avec aisance dans le reste s’acquièrent souvent avec le temps et la variété des expériences rencontrées. Elles s’acquièrent donc… lentement. Même deux ans d’alternance à mi-temps ne changent pas grand chose. Il s’agit souvent de deux ans pendant lesquels le ou la junior a travaillé temps partiel avec un jeu de responsabilité plus limité qu’un·e autre salarié·e. Ou alors l’étudiant·e a travaillé dans une petite start-up, a eu beaucoup de responsabilité mais aucun regard sur ce qu’il ou elle faisait. C’est la recette parfait pour un burn-out avant même son premier CDI…&lt;/p&gt;
&lt;p&gt;Moralité : &lt;strong&gt;vous allez être perdu·es&lt;/strong&gt;. Et c’est prévisible. Une organisation qui n’est pas prête à cela ne vous mérite pas. Mais vous dire ça, ça ne vous avance pas trop, hein ? Alors voici un vrai conseil : entourez-vous. Trouvez des mentor·es, dans ou à l’extérieur de l’entreprise, sur des sujets techniques ou non : si vous voulez vous épanouir, vous allez avoir besoin d’une cellule pour vous soutenir et vous faire grandir dans votre vie professionnelle.&lt;/p&gt;
&lt;p class=&quot;emphasis&quot;&gt;&lt;strong&gt;Employeurs·euses&lt;/strong&gt; : si vous souhaitez travailler avec des devs près·tes à l&apos;emploi, qui ont déjà un savoir-faire, du savoir-être et savent le faire savoir, n&apos;embauchez pas de juniors. Et quand vous écrivez sur LinkedIn qu&apos;un ou une junior devrait absolument faire ceci ou cela, pensez aux juniors qui vous lisent, et qui dépriment parce qu&apos;ils ont &lt;strong&gt;déjà&lt;/strong&gt; l&apos;impression que le marché les méprise. Prenez-en quelques-un·es en mentorat, vous comprendrez la violence de votre propos.&lt;/p&gt;
&lt;p&gt;Bien. Ceci étant dit, pourquoi les employeurs et employeuses cherchent-ils souvent ce type de profils “prêt·e-à-l’emploi”, quitte à leur demander des compétences parfois très spécifiques (que même les seniors n’ont pas) ?&lt;/p&gt;
&lt;p&gt;Parce que notre domaine a un problème structurel avec l’idée de supporter le coût de la formation continue, qui est pourtant énorme (nos besoins techniques évoluant fortement et très régulièrement). Dans le tissu légal (droit à la formation, OPCO), rien n’est adapté, du financement de la formation à l’offre proposée par les canaux d’État. Les catalogues ne contiennent que des formations désuètes et &lt;a href=&quot;https://www.opquast.com/france-competences-et-cpf-suite-et-fin/&quot;&gt;les quelques formations pérennes y sont supprimées&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;On se retrouve donc à devoir former en interne, ce qui est long, et cher. Comme le marché est très tendu chez les développeurs et développeuses expérimenté·es, ce sont des juniors qui sont finalement recherchés, dans l’espoir que leurs écoles leurs aient donné les quelques compétences techniques très spécifique recherchées par l’entreprise. Comme ces profils n’existent pas, sont finalement embauché·es des juniors qui possèdent 30 à 50 % du périmètre de l’offre publiée.&lt;/p&gt;
&lt;p class=&quot;emphasis&quot;&gt;&lt;strong&gt;Juniors&lt;/strong&gt; : maintenant que vous savez ça, vous savez que si un poste vous plait, vous pouvez postuler. Peu importe que vous ayez toutes les compétences. Passez des entretiens, beaucoup. Soyez prêt·es à être rejeté·e : ça arrivera, et ça ne voudra rien dire sur vous. À la fin, vous aurez engendré de l&apos;expérience, c&apos;est tout ce qui compte.&lt;/p&gt;
&lt;p&gt;Cela créé énormément de problèmes :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;un sentiment d’imposture chez les salarié·es qui se traduit pas un manque de confiance dans la structure employeuse (et l’absence d’envie d’y faire carrière) ;&lt;/li&gt;
&lt;li&gt;des inégalités de genre, parce que par construction sociale, les hommes sont plus enclins à postuler à des postes pour lesquels ils n’ont pas toutes les compétences, là où les femmes vont plus facilement se remettre en question et douter d’elles-mêmes ;&lt;/li&gt;
&lt;li&gt;des juniors formé·es dans des entreprises qui ne voulaient pas d’elleux, qui finissent par partir dès que leur séniorité leur permet, ce qui ne fait que confirmer au marché qu’intégrer et former un·e junior n’est pas rentable ;&lt;/li&gt;
&lt;li&gt;et qui va remplacer ce ou cette développeuse senior, à votre avis ? La boucle est bouclée.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Les solutions pour s’en sortir : assumer des fiches de postes adaptées. Proposer par exemple des postes alternatifs permettant d’entrer dans le dev et d’y gagner de l’expertise sans en faire à temps plein (exemple avec cette fiche pour un &lt;a href=&quot;https://jobs.lever.co/contentsquare/8e891be2-f21c-44dc-9514-a9551c08d010?lever-via=Jk4USoE9Eg&quot;&gt;Junior Data Consultant&lt;/a&gt;, ce qui n’est pas très éloigné de ce par quoi j’ai commencé chez Microsoft).&lt;/p&gt;
&lt;p&gt;Mais également, &lt;a href=&quot;https://www.letudiant.fr/etudes/qu-est-ce-qu-un-graduate-program.html&quot;&gt;imaginer et proposer des &lt;span lang=&quot;en&quot;&gt;Graduate Programs&lt;/span&gt;&lt;/a&gt;, qui sont des formations proposées par les entreprises (et financées en dehors de budgets de financement classiques) qui permettent aux recrues d’arriver au niveau de compétence désiré par l’entreprise.&lt;/p&gt;
&lt;p&gt;Oui, pour une entreprise, ça coûte cher. Mais combien ça coûte, aujourd’hui, de recruter une personne dont le niveau de productivité n’est pas celui attendu et de devoir, à l’arrache, produire les éléments nécessaire à le ou la voir grandir tout en regardant cette personne partir à la fin ?&lt;/p&gt;
&lt;p&gt;Il n’y a pas de secret, dans le recrutement comme ailleurs : si vous voulez un retour sur investissement, commencez par investir.&lt;/p&gt;

          &lt;hr&gt;
          &lt;div style=&quot;font-style:italic&quot;&gt;
              &lt;p&gt;
                  Vous êtes abonné·e au flux des articles&amp;nbsp;:
              &lt;/p&gt;
              &lt;ul&gt;
                  &lt;li&gt;de la catégorie&amp;nbsp;: Web&lt;/li&gt;
                  &lt;li&gt;rédigés en français.&lt;/li&gt;
              &lt;/ul&gt;
              
          &lt;/div&gt;
          
      </description>
      <pubDate>Mon, 14 Mar 2022 00:00:00 +0100</pubDate><link>https://boris.schapira.dev/notes/2022-03-un-metier-pas-que-une-passion/</link>
      <guid isPermaLink="true">https://boris.schapira.dev/notes/2022-03-un-metier-pas-que-une-passion/</guid>
      
      <category>Premières emb(a)uches</category>
      
      <category>web</category>
      
    </item>
    
    <item>
      <title>Pourquoi mon script asynchrone bloque-t-il le rendu de ma page ?</title>
      
      <description>
          &lt;p&gt;Une très bonne manière de mesurer l’impact d’une ressource tierce, comme un script, est de mesurer la performance de la page avec et sans ce script. Nombreux sont mes clients qui découvrent alors que leurs scripts, qu’ils ont pourtant chargé avec les attributs &lt;code&gt;async&lt;/code&gt; et &lt;code&gt;defer&lt;/code&gt;, sont bloquants pour le rendu.&lt;/p&gt;
&lt;p&gt;Et c’est normal. D’après la spécification HTML (&lt;a href=&quot;https://html.spec.whatwg.org/multipage/scripting.html#attr-script-async&quot;&gt;source&lt;/a&gt;), un script &lt;code&gt;async defer&lt;/code&gt; est, en fait, un script &lt;code&gt;async&lt;/code&gt; partout où &lt;code&gt;async&lt;/code&gt; est supporté, &lt;a href=&quot;https://caniuse.com/script-async&quot;&gt;c’est-à-dire partout&lt;/a&gt;. Un script &lt;code&gt;async&lt;/code&gt; est téléchargé avec une priorité basse, voire la plus basse. En revanche, une fois qu’il est disponible, il est exécuté immédiatement, interrompant les tâches en cours (y compris les tâches de rendu).&lt;/p&gt;
&lt;p&gt;Si vous cherchez d’autres manières de télécharger des scripts, &lt;a href=&quot;/notes/2020-06-priorites-js/&quot;&gt;en voici au moins sept&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Et pour tout comprendre des attributs permettant de différer ou rendre asynchrone un script, &lt;a href=&quot;/notes/2017-12-comment-differer-l-execution-d-un-script/&quot;&gt;c’est par ici&lt;/a&gt;.&lt;/p&gt;

          &lt;hr&gt;
          &lt;div style=&quot;font-style:italic&quot;&gt;
              &lt;p&gt;
                  Vous êtes abonné·e au flux des articles&amp;nbsp;:
              &lt;/p&gt;
              &lt;ul&gt;
                  &lt;li&gt;de la catégorie&amp;nbsp;: Web&lt;/li&gt;
                  &lt;li&gt;rédigés en français.&lt;/li&gt;
              &lt;/ul&gt;
              
          &lt;/div&gt;
          
      </description>
      <pubDate>Tue, 10 Aug 2021 00:00:00 +0200</pubDate><link>https://boris.schapira.dev/notes/2021-08-async-defer-render-blocking-fr/</link>
      <guid isPermaLink="true">https://boris.schapira.dev/notes/2021-08-async-defer-render-blocking-fr/</guid>
      
      <category>Performance Web</category>
      
      <category>web</category>
      
    </item>
    
    <item>
      <title>Les Core Web Vitals partout</title>
      
      <description>
          &lt;p&gt;&lt;a href=&quot;/notes/2020-05-core-web-vitals-qu-en-penser/&quot;&gt;Comme prévu&lt;/a&gt;, de plus en plus de structures basent leurs efforts de Web Performance sur les Signaux Web Essentiels, ou &lt;span lang=&quot;en&quot;&gt;Core Web Vitals&lt;/span&gt;. En France, par exemple, &lt;a href=&quot;https://journaldunet.com/solutions/dsi/1497377-methodologie-du-classement-webperf-fasterize-jdn/&quot;&gt;la méthodologie du classement JDN / Fasterize&lt;/a&gt; évolue pour adopter les CWV à la place d’analyses et d’indicateurs synthétiques.&lt;/p&gt;
&lt;p&gt;Ce changement de paradigme va être un séisme pour beaucoup d’acteurs, mais je suis content de voir que mes client·es ont tendance à bien tirer leur épingle du jeu.&lt;/p&gt;
&lt;p&gt;Pour les autres, prenez le recul nécessaire. Un mauvais classement n’implique pas nécessairement une mauvaise expérience pour vos utilisateur·ices. Je sais que ce n’est pas évident à comprendre, donc voici quelques éléments d’explications.&lt;/p&gt;
&lt;p&gt;D’une part, &lt;strong&gt;les CWV ne sont pas l’alpha et l’omega de l’UX&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Prenez le &lt;span lang=&quot;en&quot;&gt;First Input Delay&lt;/span&gt; (FID), par exemple. D’après &lt;a href=&quot;https://almanac.httparchive.org/fr/2020/performance#core-web-vitals-le-first-input-delay&quot;&gt;les données HTTP Archive sur plusieurs millions de pages d’accueil&lt;/a&gt;, il est globalement bon partout. Bien sûr, si vous proposez une web application qui repose sur beaucoup sur JavaScript, alors il est possible qu’il le soit moins. Mais pour la plupart des sites de ce classement, ce n’est pas le cas.&lt;/p&gt;
&lt;p&gt;Je ne m’attarderai pas sur le &lt;span lang=&quot;en&quot;&gt;Cumulative Layout Shift&lt;/span&gt; (CLS), car &lt;a href=&quot;/notes/2020-09-cumulative-layout-shift-stabilite-page/&quot;&gt;j’ai déjà dédié un article à cet indicateur&lt;/a&gt; et &lt;a href=&quot;https://www.youtube.com/watch?v=J_UO2ax2MQw&quot;&gt;d’autres, comme Myriam, en parlent aussi très bien&lt;/a&gt;. Le CLS est biaisé par tellement de choses que &lt;a href=&quot;https://web.dev/better-layout-shift-metric/&quot; hreflang=&quot;en&quot;&gt;Google imagine déjà son remplaçant&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Enfin, le &lt;span lang=&quot;en&quot;&gt;Largest Contentful Paint&lt;/span&gt; (LCP) s’intéresse au contenu le plus important visuellement, sauf que ce contenu peut parfaitement être décoratif. On se retrouve donc avec un indicateur qui dévalorise des expériences d’utilisation qui ne sont pas dégradées.&lt;/p&gt;
&lt;p&gt;D’autre part, le &lt;span lang=&quot;en&quot;&gt;Chrome UX Report&lt;/span&gt;, d’où sont tirées les valeurs remontées la &lt;span lang=&quot;en&quot;&gt;Search Console&lt;/span&gt; ou le classement JDN, ne délivre &lt;strong&gt;qu’une vision partielle des usages du Web&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Sa base de collecte est limitée aux utilisateurs et utilisatrices authentifiées de Chrome, sans &lt;span lang=&quot;en&quot;&gt;passphrase&lt;/span&gt;, qui ont optée pour la synchronisation d’historique et l’envoi de rapports d’usages statistiques. Nous n’avons à ce jour pas d’information sur les &lt;strong&gt;biais de sélection&lt;/strong&gt; que cela représente, mais on peut déjà souligner qu’aucun usage sur un autre navigateur n’est pris en compte (ce qui exclut d’emblée toustes les utilisateur·ices d’iPhone, par exemple).&lt;/p&gt;
&lt;p&gt;On se retrouve donc régulièrement avec des origines (domaines) absentes de la base de données Chrome UX Report parce qu’elles n’emmagasinent pas assez de visites. C’est le cas de plusieurs de mes client·es qui ont disparu du classement JDN parce que leur audience utilise plutôt des produits Apple.&lt;/p&gt;
&lt;p&gt;Sachez donc garder du recul par rapport à ce référentiel qui n’est qu’une projection imparfaite et partielle de la performance. Elle n’est pas mauvaise en soi, toutes les projections sont imparfaites. Il faut juste le garder en tête.&lt;/p&gt;
&lt;p&gt;Si vous souhaitez vraiment améliorer votre vision de la performance réelle, vous aurez besoin d’investir dans une solution de &lt;span lang=&quot;en&quot;&gt;Real User Monitoring&lt;/span&gt; ou, à minima, dans &lt;a href=&quot;https://www.youtube.com/watch?v=G-XJgn7A3iQ&quot;&gt;un mécanisme de témoignages issus de vos utilisateurs et utilisatrices&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Sachez prendre du recul sur les impacts, également. J’aimerais pouvoir dire autre chose et “vendre” de la performance web à tours de bras, mais en réalité, je suis convaincu que l’impact de la Page Experience dans la mise à jour du ranking en mai sera réduit. Cela ne veut pas dire que la mise-à-jour de mai ne changera rien, mais peut-être qu’elle correspond tout simplement à un réajustement nécessaire, finalement assez éloigné de la web performance.&lt;/p&gt;
&lt;p&gt;Google fait d’ailleurs évoluer sa communication avec le temps, puisqu’on est passé d’une réthorique de la prise en compte, interprété librement et &lt;em&gt;sans contradiction&lt;/em&gt; par le monde du SEO technique comme un risque de pénalité, à une réthorique du boost de classement, mais uniquement quand les trois indicateurs sont bons, et uniquement dans le classement mobile…&lt;/p&gt;
&lt;p&gt;En réalité, c’est une prophétie auto-réalisatrice qui se joue dans le monde du SEO technique. Les équipes qui sont en train de faire des optimisations interpréteront une absence de pénalité ou un meilleur classement comme étant un gain lié à leur travail alors qu’en réalité, ces équipes travaillent tout simplement à l’amélioration de l’expérience d’utilisation, ce qui va mécaniquement entrainer de meilleurs conversions.&lt;/p&gt;
&lt;p&gt;Réciproquement, celles qui ne verront pas de gain remetteront en cause leur travail, principalement sur les &lt;span lang=&quot;en&quot;&gt;Landing Pages&lt;/span&gt;, alors qu’il est peut-être très bon et que le problème se situe plus loin, dans le tunnel, ce qui est très difficile à savoir sans une approche plus précise de la donnée.&lt;/p&gt;
&lt;p&gt;Parce qu’il est peut-être utile de le rappeler mais &lt;strong&gt;la performance web, ce n’est que de l’UX&lt;/strong&gt;. C’est travailler techniquement à assurer une navigation de qualité, qui permet aux utilisateurs et utilisatrices d’atteindre leurs objectifs sur le site.&lt;/p&gt;
&lt;p&gt;Si vous commencez à faire de la web performance parce que qu’un tiers vous “menace” (ici, Google), vous risquez de vous y mettre vite, et mal. Profitez plutôt du &lt;i lang=&quot;latin&quot;&gt;momentum&lt;/i&gt; actuel pour investir dans une équipe qualité transverse (pas que webperf, donc), qui se chargera de porter le sujet au long cours, sur toutes les fonctionnalités et de manière pérenne.&lt;/p&gt;

          &lt;hr&gt;
          &lt;div style=&quot;font-style:italic&quot;&gt;
              &lt;p&gt;
                  Vous êtes abonné·e au flux des articles&amp;nbsp;:
              &lt;/p&gt;
              &lt;ul&gt;
                  &lt;li&gt;de la catégorie&amp;nbsp;: Web&lt;/li&gt;
                  &lt;li&gt;rédigés en français.&lt;/li&gt;
              &lt;/ul&gt;
              
          &lt;/div&gt;
          
      </description>
      <pubDate>Mon, 08 Feb 2021 00:00:00 +0100</pubDate><link>https://boris.schapira.dev/notes/2021-02-les-core-web-vitals-partout/</link>
      <guid isPermaLink="true">https://boris.schapira.dev/notes/2021-02-les-core-web-vitals-partout/</guid>
      
      <category>Performance Web</category>
      
      <category>web</category>
      
    </item>
    
    <item>
      <title>Les formations &quot;courtes&quot;</title>
      
      <description>
          &lt;p&gt;Je vois régulièrement des critiques à l’emporte-pièce visant les personnes qui suivent des formations courtes en informatique&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;#fn1&quot; id=&quot;fnref1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;, et cela m’énerve. Je suis Ingénieur ESIEE Paris, filière informatique, promotion 2007. Si je mets bout-à-bout l’ensemble du temps passé à coder durant ma formation, j’arrive à quelques mois, tout-au-plus.&lt;/p&gt;
&lt;p&gt;La formation d’ingénieur m’a appris énormément de choses et j’ai eu souvent conscience de la force que cette diversité procure sur le marché du travail. Mais jamais je ne me permettrais de prendre de haut les personnes en formation initiale ou, encore plus souvent, en reconversion, qui elles aussi savent plein d’autres choses que le code et ont fait une formation de 3, 6 ou 9 mois.&lt;/p&gt;
&lt;p&gt;Bien sûr, ces formations sont incomplètes. Mais n’étais-je pas moi-même sacrément incompétent à mes débuts ? Bien sûr que si. Et puis j’ai gagné du savoir-faire, du savoir être, une capacité à communiquer ancrée dans mon expérience et mes compétences. &lt;a href=&quot;/notes/2015-09-expert-ou-pas/&quot;&gt;Et c’est normal&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;La qualité de ma formation initiale m’a permis de m’en sortir rapidement, sans trop de douleur, et à un moment de ma vie où je n’avais pas trop de soucis. Ce n’est pas une raison pour me sentir supérieur : c’est plutôt un immense &lt;strong&gt;privilège&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;J’admire les gens qui savent faire un bilan sur leur carrière, pivoter vers une nouvelle, s’y lancer alors qu’ils ont sur le dos un prêt, des enfants, qu’ils doivent faire attention à leur couple, qu’ils ont des investissements associatifs ou s’occupent de proches plus âgés, le tout avec bien moins de naïveté que moi quand j’ai commencé. Ce sont de vrais héros et héroïnes.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Est-ce qu’on peut s’interroger sur la manière dont la filière forme (en reconversion ou non) ?&lt;/strong&gt; Oui, complètement. J’ai moi-même formé et je sais comment sont fait les programmes dans beaucoup d’écoles : pour nourrir les biais des parents des étudiants.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Est-ce que les formations courtes font mieux ?&lt;/strong&gt; Non. Elles aussi vendent un &lt;span lang=&quot;en&quot;&gt;time-to-market&lt;/span&gt; qui n’est pas réaliste et des salaires de sortie qui sont souvent de belles promesses. Mais ça ne veut pas dire que les gens ne sortent pas aussi compétents que d’autres juniors.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Est-ce que c’est un problème que des gens soient juniors ?&lt;/strong&gt; Je ne crois pas. Je pense que beaucoup de gens peuvent venir au code tardivement, ou superficiellement, et que ce n’est pas grave. Ils ne volent le job de personne. Ils décrochent un job avec &lt;strong&gt;leurs&lt;/strong&gt; compétences.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Est-ce que c’est ce dont les entreprises veulent ?&lt;/strong&gt; Peut-être pas. Et c’est du coup très dur pour ces nouvelles personnes sur le marché. Beaucoup sont paupérisés dans des status qui leur font porter le risque de leur emploi, à des taux journaliers dérisoires.&lt;/p&gt;
&lt;div class=&quot;bloc&quot;&gt;
&lt;strong&gt;Parenthèse&lt;/strong&gt; : vous connaissez ma femme ? &lt;a href=&quot;https://libelilou.github.io/2017/05/29/sudweb.html&quot;&gt;Allez lire son blog ou voir sa conférence sur le sujet&lt;/a&gt;.
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Est-ce que les entreprises n’ont pas un rôle à jouer&lt;/strong&gt; dans la situation ? Certainement. Peu sont enclines à l’embauche de ses profils, parce qu’elles ne veulent pas porter la formation de ces salarié·es ?&lt;/p&gt;
&lt;p&gt;Elles en viennent à réclamer de la formation sur le temps libre du personnel, alors même qu’elles ont l’obligation légale de maintenir leurs salarié·es au niveau pour leurs postes. Mais bon, à ce niveau, c’est une culture de toute l’industrie du développement où la perception de la montée en compétence est à revoir. Nous sommes souvent traités comme des client·es de nos propres entreprises, responsables de notre formation avec le levier d’aller voir ailleurs si on n’est pas content·e.&lt;/p&gt;
&lt;p&gt;Cette dynamique de turn-over fait que les entreprises embauchent des juniors en continu pour leur demande d’exécuter des tâches que des personnes désormais seniors faisaient, mais qu’elles ne font plus puisqu’elles sont parties chercher de la reconnaissance ailleurs.&lt;/p&gt;
&lt;p&gt;Et comme ces entreprises sont en besoin de remplacement à profil identique, elles vont naturellement embaucher des gens qui ressemblent à ceux qu’elles avaient avant en laissant peu de place à des personnes en reconversion (ou à des femmes s’il y a déjà peu de femmes en place).&lt;/p&gt;
&lt;p&gt;Rien de tout ça n’est de la faute des formations, il faudrait en prendre conscience. Les formations ont leur tort (sérieux, quand je vois des formations web qui &lt;strong&gt;ne forment pas aux bases de HTML&lt;/strong&gt;, je pleure) mais cette problématique d’adéquation des profils formés aux besoins des entreprises est une dynamique systémique &lt;strong&gt;de marché&lt;/strong&gt;.&lt;/p&gt;
&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol&gt;
&lt;li id=&quot;fn1&quot;&gt;
&lt;p&gt;Je vous renvoie vers &lt;a href=&quot;https://www.jesuisundev.com/comment-devenir-developpeur-web/#formation&quot;&gt;l’excellent article de Medhi sur la formation au développement&lt;/a&gt;. &lt;a href=&quot;#fnref1&quot; class=&quot;footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;

          &lt;hr&gt;
          &lt;div style=&quot;font-style:italic&quot;&gt;
              &lt;p&gt;
                  Vous êtes abonné·e au flux des articles&amp;nbsp;:
              &lt;/p&gt;
              &lt;ul&gt;
                  &lt;li&gt;de la catégorie&amp;nbsp;: Web&lt;/li&gt;
                  &lt;li&gt;rédigés en français.&lt;/li&gt;
              &lt;/ul&gt;
              
          &lt;/div&gt;
          
      </description>
      <pubDate>Tue, 12 Jan 2021 00:00:00 +0100</pubDate><link>https://boris.schapira.dev/notes/2021-01-les-formations-courtes/</link>
      <guid isPermaLink="true">https://boris.schapira.dev/notes/2021-01-les-formations-courtes/</guid>
      
      <category>web</category>
      
    </item>
    
    <item>
      <title>Tu devrais faire de la WebPerf</title>
      
      <description>
          &lt;p&gt;Cher confrère, chère consœur, tu devrais t’intéresser à la Performance Web. C’est un sujet qui se trouve au cœur du web, qui a besoin de spécialistes, et est en plein essor. Je sais que tu ne me crois pas, ou que tu penses que ce n’est pas simple et tu as bien raison. Alors laisse-moi t’expliquer où on en est et pourquoi on a besoin de toi.&lt;/p&gt;
&lt;!-- more --&gt;
&lt;div class=&quot;emphasis&quot;&gt;
&lt;strong&gt;Note :&lt;/strong&gt; cet article a d&apos;abord été publié sur &lt;a href=&quot;https://www.24joursdeweb.fr/2020/tu-devrais-faire-de-la-webperf/&quot;&gt;24 Jours de Web&lt;/a&gt;.
&lt;/div&gt;
&lt;p&gt;De la Performance Web, ou webperf, j’en fais depuis plus de dix ans. J’en ai parlé publiquement la première fois en 2012 &lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;#fn1&quot; id=&quot;fnref1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;. Je disais qu’il fallait aborder le sujet en quatre temps : prendre conscience de l’enjeu, puis apprendre à optimiser, faire un suivi des performances et enfin, en parler en interne pour éviter de futures dégradations.&lt;/p&gt;
&lt;p&gt;Huit ans plus tard, je pense toujours que c’est la meilleure manière d’aborder le sujet. Mais autour de moi, ça ne parle pas forcément beaucoup de performance web. Pour toutes celles et ceux qui n’ont pas forcément suivi où nous en sommes, faisons un tour d’horizon du sujet.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_320/https://boris.schapira.dev/assets/images/web/2020-12-02/undraw_Loving_it_re_jfh4.png&quot; srcset=&quot;https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_320/https://boris.schapira.dev/assets/images/web/2020-12-02/undraw_Loving_it_re_jfh4.png 320w,
https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_640/https://boris.schapira.dev/assets/images/web/2020-12-02/undraw_Loving_it_re_jfh4.png 640w,
https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_757/https://boris.schapira.dev/assets/images/web/2020-12-02/undraw_Loving_it_re_jfh4.png 757w&quot; sizes=&quot;80vw&quot; alt=&quot;&quot;  loading=&quot;lazy&quot; width=&quot;757&quot; height=&quot;706&quot; crossorigin=&quot;anonymous&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Le sujet est dense, mais mon but n’est pas de t’étouffer sous les informations. Si tu veux aller plus loin, tu trouveras plein de notes de bas de page menant à des lectures additionnelles.&lt;/p&gt;
&lt;h2&gt;Un point sur la situation&lt;/h2&gt;
&lt;p&gt;On va commencer par un peu de &lt;strong&gt;définitions&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;La webperf, c’est tout ce que tu vas pouvoir faire pour que ton site soit &lt;strong&gt;ressenti&lt;/strong&gt; comme plus performant par une personne l’utilisant. Ça part de &lt;span lang=&quot;en&quot;&gt;l’expérience d’utilisation&lt;/span&gt; de ton site ou de ta &lt;span lang=&quot;en&quot;&gt;web app&lt;/span&gt; (y compris les animations), puis on redescend dans les couches, avec du code HTML, CSS et JS, de la configuration de serveurs et enfin une analyse des infrastructures et services tiers que tu t’autorises à utiliser, et de leur configuration.&lt;/p&gt;
&lt;p&gt;Attention, dans la mesure où un site performant &lt;strong&gt;consomme moins de ressources&lt;/strong&gt;, la performance web partage 90 % de son ADN avec l’éco-conception. Mais certaines bonnes pratiques de performance web, comme l’utilisation de &lt;abbr title=&quot;Content Delivery Network&quot;&gt;CDN&lt;/abbr&gt;, ne collent pas aux attentes écologiques &lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;#fn2&quot; id=&quot;fnref2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_320/https://boris.schapira.dev/assets/images/web/2020-12-02/undraw_Eco_conscious_re_r2bs.png&quot; srcset=&quot;https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_320/https://boris.schapira.dev/assets/images/web/2020-12-02/undraw_Eco_conscious_re_r2bs.png 320w,
https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_640/https://boris.schapira.dev/assets/images/web/2020-12-02/undraw_Eco_conscious_re_r2bs.png 640w,
https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_960/https://boris.schapira.dev/assets/images/web/2020-12-02/undraw_Eco_conscious_re_r2bs.png 960w,
https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_1121/https://boris.schapira.dev/assets/images/web/2020-12-02/undraw_Eco_conscious_re_r2bs.png 1121w&quot; sizes=&quot;80vw&quot; alt=&quot;&quot;  loading=&quot;lazy&quot; width=&quot;1121&quot; height=&quot;784&quot; crossorigin=&quot;anonymous&quot; /&gt;&lt;/p&gt;
&lt;p&gt;On a généralement l’intuition qu’une application plus rapide est plus agréable. Avec la webperf, &lt;strong&gt;on a des chiffres qui le confirment&lt;/strong&gt;. Beaucoup de marques ont commandité des missions d’optimisation et témoignent des gains obtenus, notamment sur la conversion &lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;#fn3&quot; id=&quot;fnref3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt;. C’est un point important parce que ça veut dire que la webperf est un domaine de la Qualité Web dont le retour sur investissement est démontrable. Cela facilite les investissements.&lt;/p&gt;
&lt;p&gt;Quand il y a des rémunérations à la clé, il est plus facile d’attirer &lt;strong&gt;des compétences&lt;/strong&gt;. Il y a une bonne dynamique dans la communauté, qui s’alimente d’articles sur différentes expertises au sein de la web performance. Ça permet à l’ensemble de la communauté de progresser.&lt;/p&gt;
&lt;p&gt;La « &lt;span lang=&quot;en&quot;&gt;Front-End Performance Checklist&lt;/span&gt; » de Vitaly Friedman est une des ressources les plus complètes. C’est un généreux dossier remis à jour chaque année sur le Smashing Magazine. Le problème, c’est qu’on ne peut pas envoyer n’importe qui vers ce type de dossier : 53 pages se traduisant par une &lt;span lang=&quot;en&quot;&gt;checklist&lt;/span&gt; opérationnelle de 13 pages &lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;#fn4&quot; id=&quot;fnref4&quot;&gt;4&lt;/a&gt;&lt;/sup&gt;, c’est pas à la portée de tout le monde : ça fait quand même une sacrée marche à monter.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_320/https://boris.schapira.dev/assets/images/web/2020-12-02/undraw_track_and_field_33qn.png&quot; srcset=&quot;https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_320/https://boris.schapira.dev/assets/images/web/2020-12-02/undraw_track_and_field_33qn.png 320w,
https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_640/https://boris.schapira.dev/assets/images/web/2020-12-02/undraw_track_and_field_33qn.png 640w,
https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_960/https://boris.schapira.dev/assets/images/web/2020-12-02/undraw_track_and_field_33qn.png 960w,
https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_1237/https://boris.schapira.dev/assets/images/web/2020-12-02/undraw_track_and_field_33qn.png 1237w&quot; sizes=&quot;80vw&quot; alt=&quot;&quot;  loading=&quot;lazy&quot; width=&quot;1237&quot; height=&quot;968&quot; crossorigin=&quot;anonymous&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Pour aller plus vite au cœur du sujet, on peut utiliser à la place un des nombreux &lt;strong&gt;outils et services d’analyse&lt;/strong&gt; disponibles dans les navigateurs ou en ligne. Ces outils, qu’on appelle « synthétiques », sont super pratiques : ils analysent le chargement d’une page et produisent instantanément un rapport d’audit contextualisé permettant d’attaquer les points essentiels &lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;#fn5&quot; id=&quot;fnref5&quot;&gt;5&lt;/a&gt;&lt;/sup&gt;. On peut souvent leur demander de faire des tests avec des contraintes sur-mesure. Ça permet de faire des hypothèses comme « je crois que c’est ce fichier JS qui ralentit l’affichage », puis de tester en bloquant ce fichier et voir si l’affichage se produit vraiment plus vite. Ça permet aussi de mesurer la performance d’un site face à ses concurrents.&lt;/p&gt;
&lt;p&gt;Mais la force de ces services est aussi leur faiblesse : ils ne mesurent que ce qu’on leur demande de mesurer. Ils ne peuvent pas dire si les sites sont rapides &lt;strong&gt;chez les gens&lt;/strong&gt;. Si tu as besoin d’obtenir ces infos, il faudra te tourner vers des outils de télémétrie (des &lt;span lang=&quot;en&quot;&gt;analytics&lt;/span&gt;). La télémétrie que tu utilises d’habitude peut suffire &lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;#fn6&quot; id=&quot;fnref6&quot;&gt;6&lt;/a&gt;&lt;/sup&gt;, mais pour aller plus loin dans l’évaluation de la frustration des utilisatrices, il faudra te tourner vers des solutions plus élaborées &lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;#fn7&quot; id=&quot;fnref7&quot;&gt;7&lt;/a&gt;&lt;/sup&gt;. En revanche, un peu d’implémentation sera nécessaire.&lt;/p&gt;
&lt;p&gt;À l’inverse, si ton site web est public et reçoit beaucoup de visites, tu peux utiliser &lt;strong&gt;des données de terrain collectées par d’autres&lt;/strong&gt;. Ces jeux de données sont pratiques, parce qu’ils sont accessibles sans rien installer sur les sites (et du coup, comme avec les outils synthétiques, tu peux faire des comparaisons entre sites). Les données ne sont pas forcément difficiles à récupérer, mais peuvent être incomplètes (par exemple, ne concerner que Chrome &lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;#fn8&quot; id=&quot;fnref8&quot;&gt;8&lt;/a&gt;&lt;/sup&gt;).&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_320/https://boris.schapira.dev/assets/images/web/2020-12-02/undraw_Data_re_80ws.png&quot; srcset=&quot;https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_320/https://boris.schapira.dev/assets/images/web/2020-12-02/undraw_Data_re_80ws.png 320w,
https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_640/https://boris.schapira.dev/assets/images/web/2020-12-02/undraw_Data_re_80ws.png 640w,
https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_960/https://boris.schapira.dev/assets/images/web/2020-12-02/undraw_Data_re_80ws.png 960w,
https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_1235/https://boris.schapira.dev/assets/images/web/2020-12-02/undraw_Data_re_80ws.png 1235w&quot; sizes=&quot;80vw&quot; alt=&quot;&quot;  loading=&quot;lazy&quot; width=&quot;1235&quot; height=&quot;858&quot; crossorigin=&quot;anonymous&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Dans l’absolu, dès que tu utilises des données de terrain, prends du recul. L’interprétation des résultats est très compliquée parce que beaucoup de facteurs peuvent affecter la performance mesurée &lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;#fn9&quot; id=&quot;fnref9&quot;&gt;9&lt;/a&gt;&lt;/sup&gt;. Si tu as l’intuition de quelque chose, n’hésite pas à valider cette hypothèse en recoupant avec d’autres données, ou via des tests synthétiques.&lt;/p&gt;
&lt;h3&gt;Pour résumer&lt;/h3&gt;
&lt;p&gt;Aujourd’hui, les connaissances techniques sur la performance web sont largement consensuelles et testables via des outils d’analyse automatisés. Des données de terrains génériques sont facilement accessibles et permettent d’avoir un retour sur les optimisations apportées, dont le coût n’a pas de mal à être financé et le gain à être mesuré.&lt;/p&gt;
&lt;p&gt;Et pourtant… si on regarde les données de terrain, on peut voir que la performance des sites ne s’améliore pas franchement.&lt;/p&gt;
&lt;figure &gt;
&lt;img src=&quot;https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_320/https://boris.schapira.dev/assets/images/web/2020-12-02/timeseries_fcp.png&quot; srcset=&quot;https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_320/https://boris.schapira.dev/assets/images/web/2020-12-02/timeseries_fcp.png 320w,
https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_640/https://boris.schapira.dev/assets/images/web/2020-12-02/timeseries_fcp.png 640w,
https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_960/https://boris.schapira.dev/assets/images/web/2020-12-02/timeseries_fcp.png 960w,
https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_1200/https://boris.schapira.dev/assets/images/web/2020-12-02/timeseries_fcp.png 1200w&quot; sizes=&quot;80vw&quot;  alt=&quot;Évolution de l&amp;#39;indicateur First Contentful Paint de janvier 2017 à août 2020, mesuré en contextes Mobile et Bureau. Dans un cas comme dans l&amp;#39;autre, des fluctuations sont présentes et souvent corrélées entre les deux contextes, mais dans l&amp;#39;ensemble, la valeur moyenne varie peu voire se dégrade.&quot; loading=&quot;lazy&quot; width=&quot;1200&quot; height=&quot;800&quot; /&gt;
&lt;figcaption&gt;&lt;p&gt;Évolution de l’indicateur First Contentful Paint de 2017 à 2020. Source : HttpArchive&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Du coup, le paysage ne doit pas être si rose que ça. Faisons un petit tour des choses qui sont encore difficiles.&lt;/p&gt;
&lt;h2&gt;Le chemin qu’il nous reste à parcourir&lt;/h2&gt;
&lt;p&gt;Comme beaucoup de sujets de la Qualité Web, la performance web est l’affaire de toutes et tous. Pour améliorer les performances d’un site, il faut non seulement comprendre d’où viennent les problèmes mais également être capable de déterminer qui sont les personnes à contacter pour les résoudre. Comme la webperf concerne tous les corps de métier du Web, tu vas vite te retrouver à devoir parler à des gens très différents. Même sur des problèmes qui ont l’air simple.&lt;/p&gt;
&lt;p&gt;Prenons l’exemple de l’optimisation des images. Dis comme ça, ça a l’air simple et beaucoup de gens auront l’impression de comprendre. Mais pour aborder le sujet dans sa globalité, il faut :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;former les personnes à choisir le meilleur format en fonction de l’image ;&lt;/li&gt;
&lt;li&gt;encadrer la contribution (pour éviter les images trop grosses) et déclencher l’optimisation et la génération de plusieurs variantes d’images en fonction du contexte et de la direction artistique ;&lt;/li&gt;
&lt;li&gt;modifier le code HTML permettant d’insérer les images et éventuellement mettre en place un proxy d’images avec une négociation de contenu (interne ou externe), afin que chaque personne reçoive une image adaptée à son contexte&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Et je n’ai même pas encore parlé de &lt;a href=&quot;https://www.smashingmagazine.com/2019/05/hybrid-lazy-loading-progressive-migration-native/&quot; lang=&quot;en&quot; hreflang=&quot;en&quot;&gt;lazy loading&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_320/https://boris.schapira.dev/assets/images/web/2020-12-02/undraw_image_viewer_wxce.png&quot; srcset=&quot;https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_320/https://boris.schapira.dev/assets/images/web/2020-12-02/undraw_image_viewer_wxce.png 320w,
https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_640/https://boris.schapira.dev/assets/images/web/2020-12-02/undraw_image_viewer_wxce.png 640w,
https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_960/https://boris.schapira.dev/assets/images/web/2020-12-02/undraw_image_viewer_wxce.png 960w,
https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_1096/https://boris.schapira.dev/assets/images/web/2020-12-02/undraw_image_viewer_wxce.png 1096w&quot; sizes=&quot;80vw&quot; alt=&quot;&quot;  loading=&quot;lazy&quot; width=&quot;1096&quot; height=&quot;655&quot; crossorigin=&quot;anonymous&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Tu l’auras compris, quand tu commences à parler de performance web en entreprise, &lt;strong&gt;le plus dur n’est pas forcément la technique&lt;/strong&gt;. C’est aussi de faire parler ensemble différents métiers afin d’avoir une vue d’ensemble de la situation et des actions à mener.&lt;/p&gt;
&lt;p&gt;D’autant que c’est parfois difficile de parler de la même chose. Il y a vraiment &lt;strong&gt;beaucoup d’indicateurs différents&lt;/strong&gt; et comme si ça ne suffisait pas, de nouveaux indicateurs apparaissent régulièrement. Il y a certains indicateurs qui sont vraiment pérennes, comme le &lt;span lang=&quot;en&quot;&gt;Speed Index&lt;/span&gt; &lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;#fn10&quot; id=&quot;fnref10&quot;&gt;10&lt;/a&gt;&lt;/sup&gt;, un indicateur de référence depuis près de 10 ans. D’autres sont mal nommés, ou ne permettent pas de prendre des décisions, ou informent sur quelque chose qui n’est pas forcément primordial. Il faut donc sans cesse s’interroger sur les mesures, mais aussi sur la manière dont on mesure.&lt;/p&gt;
&lt;p&gt;Mais le top du top, c’est quand on utilise ses propres indicateurs, &lt;strong&gt;des jalons temporels sur-mesure&lt;/strong&gt;. Côté serveur, on appelle ça des &lt;span lang=&quot;en&quot;&gt;Server Timings&lt;/span&gt; &lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;#fn11&quot; id=&quot;fnref11&quot;&gt;11&lt;/a&gt;&lt;/sup&gt;. Côté navigateur, on parle de &lt;span lang=&quot;en&quot;&gt;User Timings&lt;/span&gt; &lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;#fn12&quot; id=&quot;fnref12&quot;&gt;12&lt;/a&gt;&lt;/sup&gt;. Contrairement aux autres indicateurs, ils correspondent à ce que ton équipe choisit elle-même de surveiller. On peut les retrouver quand on analyse la page dans les outils de développement de son navigateur et ils sont collectables par tous les outils d’analyse. Pourquoi s’en priver ?&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_320/https://boris.schapira.dev/assets/images/web/2020-12-02/undraw_speed_test_wxl0.png&quot; srcset=&quot;https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_320/https://boris.schapira.dev/assets/images/web/2020-12-02/undraw_speed_test_wxl0.png 320w,
https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_640/https://boris.schapira.dev/assets/images/web/2020-12-02/undraw_speed_test_wxl0.png 640w,
https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_960/https://boris.schapira.dev/assets/images/web/2020-12-02/undraw_speed_test_wxl0.png 960w,
https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_1252/https://boris.schapira.dev/assets/images/web/2020-12-02/undraw_speed_test_wxl0.png 1252w&quot; sizes=&quot;80vw&quot; alt=&quot;&quot;  loading=&quot;lazy&quot; width=&quot;1252&quot; height=&quot;954&quot; crossorigin=&quot;anonymous&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Quand tu vas vouloir optimiser la performance d’un site, tu vas parfois te heurter aux librairies utilisées par d’autres pour répondre à des besoins métiers. Ces librairies répondent souvent à une liste d’objectifs mais n’ont pas en vue la webperf. Du coup les gens qui les utilisent n’ont parfois jamais entendu parler de performance. Et rien n’est prévu, dans ces solutions, pour les optimiser.&lt;/p&gt;
&lt;p&gt;Concrètement, ça veut souvent dire qu’optimiser va être difficile, techniquement ou parce que les gens avec qui tu vas parler ne comprennent pas ce besoin. Quand l’optimisation n’est vraiment pas possible, n’oublie pas de l’écrire dans &lt;strong&gt;un référentiel de la dette technique&lt;/strong&gt;, en espérant que celle-ci sera résolue à la prochaine refonte.&lt;/p&gt;
&lt;h2&gt;Pourquoi on a besoin de toi&lt;/h2&gt;
&lt;p&gt;Tu l’auras compris, le sujet de la Performance Web, comme tous les sujets de la Qualité Web, est un sujet technique. Mais cette technique, en fait, elle s’apprend assez bien.&lt;/p&gt;
&lt;p&gt;Je ne vais pas te mentir : monter en compétence, c’est long. Mais les compétences acquises ne dépendent d’aucun framework, d’aucune solution du marché, d’aucune tendance. Il s’agit de comprendre comment fonctionnent les standards du web : HTTP, HTML, JS et CSS. On peut difficilement faire plus réutilisable et crois-moi : ça vaut le coup.&lt;/p&gt;
&lt;p&gt;Tu verras que quel que soit ton rôle dans la chaîne de production du web, tu peux acquérir ces compétences et les mettre au service d’une meilleure performance des sites web.&lt;/p&gt;
&lt;p&gt;Bien sûr, il nous faut des gens prêts à &lt;strong&gt;optimiser des sites web&lt;/strong&gt;. Il y a une vraie demande à ce sujet. Mais c’est loin d’être la seule manière de participer. C’est même la fin de la chaîne.&lt;/p&gt;
&lt;p&gt;Pour déjà comprendre le problème, on a besoin de &lt;span lang=&quot;en&quot;&gt;Data Analysts&lt;/span&gt; capables d’analyser les données d’utilisation et d’affiner les mesures, pour &lt;strong&gt;mieux mettre en balance les investissements et les gains&lt;/strong&gt;. Savoir qu’un sujet est pertinent parce que d’autres le disent, ce n’est pas pareil que de pouvoir ajuster son investissement au fil de ses besoins et de &lt;strong&gt;ses gains à soi&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_320/https://boris.schapira.dev/assets/images/web/2020-12-02/undraw_Business_plan_re_0v81.png&quot; srcset=&quot;https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_320/https://boris.schapira.dev/assets/images/web/2020-12-02/undraw_Business_plan_re_0v81.png 320w,
https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_640/https://boris.schapira.dev/assets/images/web/2020-12-02/undraw_Business_plan_re_0v81.png 640w,
https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_960/https://boris.schapira.dev/assets/images/web/2020-12-02/undraw_Business_plan_re_0v81.png 960w,
https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_1068/https://boris.schapira.dev/assets/images/web/2020-12-02/undraw_Business_plan_re_0v81.png 1068w&quot; sizes=&quot;80vw&quot; alt=&quot;&quot;  loading=&quot;lazy&quot; width=&quot;1068&quot; height=&quot;644&quot; crossorigin=&quot;anonymous&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Il faut que le sujet de la Performance infuse dans le développement des librairies de tous types. Qu’il s’agisse de &lt;span lang=&quot;en&quot;&gt;Back-End&lt;/span&gt; ou de &lt;span lang=&quot;en&quot;&gt;Front-End&lt;/span&gt;, il faut que ces projets intègrent &lt;strong&gt;la performance comme un besoin fondamental&lt;/strong&gt;, de la même manière que la sécurité ou l’accessibilité.&lt;/p&gt;
&lt;p&gt;On a besoin de &lt;span lang=&quot;en&quot;&gt;designers&lt;/span&gt; qui pensent à la manière dont leurs interfaces sont progressivement affichées et priorisent les éléments les plus attendus par les utilisateurs et utilisatrices afin &lt;strong&gt;d’améliorer leur ressenti&lt;/strong&gt; &lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;#fn13&quot; id=&quot;fnref13&quot;&gt;13&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;
&lt;p&gt;Tes compétences sont plutôt liées au &lt;span lang=&quot;en&quot;&gt;Back-End&lt;/span&gt; ? Parfait. Nous avons aussi besoin de gens comme toi pour optimiser l’exécution du code, configurer des systèmes de cache serveur, ou aider au développement de serveurs intermédiaires de performance qui peuvent aider à optimiser un site rapidement en attendant que des corrections de fond soient réalisées &lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;#fn14&quot; id=&quot;fnref14&quot;&gt;14&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;
&lt;p&gt;Enfin, il nous faut aussi des personnes pour &lt;strong&gt;assurer la médiation&lt;/strong&gt; de tous ces métiers, nourrir et encadrer le dialogue, permettre les conditions du succès et notamment la formation à un &lt;strong&gt;socle commun de compétence&lt;/strong&gt; (en commençant par Opquast &lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;#fn15&quot; id=&quot;fnref15&quot;&gt;15&lt;/a&gt;&lt;/sup&gt;, par exemple).&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_320/https://boris.schapira.dev/assets/images/web/2020-12-02/undraw_building_websites_i78t.png&quot; srcset=&quot;https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_320/https://boris.schapira.dev/assets/images/web/2020-12-02/undraw_building_websites_i78t.png 320w,
https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_640/https://boris.schapira.dev/assets/images/web/2020-12-02/undraw_building_websites_i78t.png 640w,
https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_960/https://boris.schapira.dev/assets/images/web/2020-12-02/undraw_building_websites_i78t.png 960w,
https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_1116/https://boris.schapira.dev/assets/images/web/2020-12-02/undraw_building_websites_i78t.png 1116w&quot; sizes=&quot;80vw&quot; alt=&quot;&quot;  loading=&quot;lazy&quot; width=&quot;1116&quot; height=&quot;821&quot; crossorigin=&quot;anonymous&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Pour toutes ces raisons, tu devrais faire de la Performance Web.&lt;/p&gt;
&lt;p&gt;Et, si ça se trouve, tu en fais déjà.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Les illustrations présentes dans cet article sont issues du &lt;a href=&quot;https://undraw.co/illustrations&quot;&gt;projet Undraw&lt;/a&gt;, créé par &lt;a href=&quot;https://twitter.com/ninaLimpi&quot;&gt;Katerina Limpitsoun&lt;/a&gt;. Vous pouvez les utiliser dans n’importe quel projet, qu’il soit commercial ou personnel, sans attribution ni frais.&lt;/p&gt;
&lt;p&gt;Merci à &lt;a href=&quot;https://twitter.com/CarineSobisiak&quot;&gt;Carine Sobisiak&lt;/a&gt;, Olivier Rundstadler et &lt;a href=&quot;https://twitter.com/Phacks&quot;&gt;Nicolas Goutay&lt;/a&gt; pour leurs relectures et leurs suggestions.&lt;/p&gt;
&lt;section class=&quot;footnotes&quot;&gt;
&lt;ol&gt;
&lt;li id=&quot;fn1&quot;&gt;
&lt;p&gt;« &lt;a href=&quot;https://boris.schapira.dev/community/performance-web/&quot;&gt;Mettre en place une stratégie de performance web&lt;/a&gt; » lors de Sud Web 2012. &lt;a href=&quot;#fnref1&quot; class=&quot;footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;fn2&quot;&gt;
&lt;p&gt;Romuald Priol en parle très bien dans l’article « &lt;a href=&quot;https://news.infomaniak.com/web-ecologique/&quot;&gt;Les impacts du numérique : bonnes pratiques pour un Web plus écologique&lt;/a&gt; ». &lt;a href=&quot;#fnref2&quot; class=&quot;footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;fn3&quot;&gt;
&lt;p&gt;&lt;a href=&quot;https://wpostats.com/&quot;&gt;WPOStats.com&lt;/a&gt; recense des études de cas et expériences démontrant l’impact de l’optimisation des performances web sur l’expérience d’utilisation et le succès commercial. &lt;a href=&quot;#fnref3&quot; class=&quot;footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;fn4&quot;&gt;
&lt;p&gt;« &lt;a href=&quot;https://www.dropbox.com/s/k1oxe5vyrli83zf/performance-checklist-1.3.pdf?dl=0&quot;&gt;Front-End Performance Checklist 2020: the PDF&lt;/a&gt; », 166 Ko. &lt;a href=&quot;#fnref4&quot; class=&quot;footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;fn5&quot;&gt;
&lt;p&gt;&lt;a href=&quot;https://www.dareboost.com&quot;&gt;Dareboost&lt;/a&gt;, sur lequel je travaille, est un de ces outils et j’en suis très fier, mais c’est loin d’être le seul. &lt;a href=&quot;https://calibreapp.com/&quot; lang=&quot;en&quot; hreflang=&quot;en&quot;&gt;Calibre&lt;/a&gt;, &lt;a href=&quot;https://speedcurve.com/&quot; lang=&quot;en&quot; hreflang=&quot;en&quot;&gt;Speedcurve&lt;/a&gt;, &lt;a href=&quot;https://gtmetrix.com/&quot; lang=&quot;en&quot; hreflang=&quot;en&quot;&gt;GTMetrix&lt;/a&gt;, &lt;a href=&quot;https://www.pingdom.com/&quot; lang=&quot;en&quot; hreflang=&quot;en&quot;&gt;Pingdom&lt;/a&gt;, entre autres, proposent également des rapports instantanés et du suivi. Les équipes de développement peuvent également utiliser &lt;a href=&quot;https://developers.google.com/web/tools/lighthouse/&quot; lang=&quot;en&quot; hreflang=&quot;en&quot;&gt;Lighthouse&lt;/a&gt; ou &lt;a href=&quot;https://webhint.io/&quot; lang=&quot;en&quot; hreflang=&quot;en&quot;&gt;WebHint&lt;/a&gt; sur leurs postes. &lt;a href=&quot;#fnref5&quot; class=&quot;footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;fn6&quot;&gt;
&lt;p&gt;Exemple avec « &lt;a href=&quot;https://www.fasterize.com/fr/blog/analyser-la-performance-dun-site-web-via-google-analytics/&quot;&gt;Analyser la vitesse de chargement d’un site web via Google Analytics&lt;/a&gt; » par Anthony Barré mais personnellement, je collecte avec Matomo. &lt;a href=&quot;#fnref6&quot; class=&quot;footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;fn7&quot;&gt;
&lt;p&gt;Voir à ce sujet « &lt;a href=&quot;https://www.youtube.com/watch?v=nEHsHioWY1U&amp;amp;feature=youtu.be&quot;&gt;User Experience &amp;amp; Performance: Metrics that Matter&lt;/a&gt; », par Philip Tellis. &lt;a href=&quot;#fnref7&quot; class=&quot;footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;fn8&quot;&gt;
&lt;p&gt;Il s’agit ici du &lt;a href=&quot;https://developers.google.com/web/tools/chrome-user-experience-report&quot;&gt;Chrome User Experience Report&lt;/a&gt;, ou CrUX pour les intimes. &lt;a href=&quot;#fnref8&quot; class=&quot;footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;fn9&quot;&gt;
&lt;p&gt;« &lt;a href=&quot;https://www.youtube.com/watch?reload=9&amp;amp;v=9PBeqHXk7zw&amp;amp;feature=youtu.be&quot;&gt;Comment interpréter les mesures de performance réelles (RUM metrics)&lt;/a&gt; », par Gilles Dubuc. &lt;a href=&quot;#fnref9&quot; class=&quot;footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;fn10&quot;&gt;
&lt;p&gt;« &lt;a href=&quot;https://blog.dareboost.com/fr/2018/02/speed-index-performance-web/&quot;&gt;Speed Index : tout savoir sur cet indicateur majeur de la performance web&lt;/a&gt; », par Damien Jubeau. &lt;a href=&quot;#fnref10&quot; class=&quot;footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;fn11&quot;&gt;
&lt;p&gt;« &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Server-Timing&quot;&gt;MDN Server-Timing Documentation&lt;/a&gt; ». &lt;a href=&quot;#fnref11&quot; class=&quot;footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;fn12&quot;&gt;
&lt;p&gt;« &lt;a href=&quot;https://boris.schapira.dev/notes/2019-09-custom-timing-prochaine-frame/&quot;&gt;Custom Timing : attendez la prochaine frame quand vous utilisez la User Timing API&lt;/a&gt; ». &lt;a href=&quot;#fnref12&quot; class=&quot;footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;fn13&quot;&gt;
&lt;p&gt;« &lt;a href=&quot;https://stephaniewalter.design/blog/mind-over-matter-optimize-performance-without-code-csscamp-2019/&quot;&gt;Mind over Matter: Optimize Performance Without Code&lt;/a&gt; », par Stéphanie Walter. &lt;a href=&quot;#fnref13&quot; class=&quot;footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;fn14&quot;&gt;
&lt;p&gt;La solution française de référence, c’est &lt;a href=&quot;https://www.fasterize.com/fr/comment-ca-marche/&quot;&gt;Fasterize&lt;/a&gt;. &lt;a href=&quot;#fnref14&quot; class=&quot;footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&quot;fn15&quot;&gt;
&lt;p&gt;&lt;a href=&quot;https://www.opquast.com/&quot;&gt;Opquast&lt;/a&gt;, la certification des &lt;abbr title=&quot;professionels&quot; aria-hidden=&quot;true&quot;&gt;professionnel·les&lt;/abbr&gt; du Web. &lt;a href=&quot;#fnref15&quot; class=&quot;footnote-backref&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;

          &lt;hr&gt;
          &lt;div style=&quot;font-style:italic&quot;&gt;
              &lt;p&gt;
                  Vous êtes abonné·e au flux des articles&amp;nbsp;:
              &lt;/p&gt;
              &lt;ul&gt;
                  &lt;li&gt;de la catégorie&amp;nbsp;: Web&lt;/li&gt;
                  &lt;li&gt;rédigés en français.&lt;/li&gt;
              &lt;/ul&gt;
              
          &lt;/div&gt;
          
      </description>
      <pubDate>Fri, 25 Dec 2020 00:00:00 +0100</pubDate><link>https://www.24joursdeweb.fr/2020/tu-devrais-faire-de-la-webperf/</link>
      <guid isPermaLink="true">https://www.24joursdeweb.fr/2020/tu-devrais-faire-de-la-webperf/</guid>
      
      <category>Performance Web</category>
      
      <category>web</category>
      
    </item>
    
    <item>
      <title>Cumulative Layout Shift, l’indicateur de stabilité de la mise en page</title>
      
      <description>
          &lt;p&gt;&lt;em&gt;Avez-vous déjà commencé à lire un article d’actualité passionnant, puis perdu votre ligne parce que tout le texte s’est déplacé vers le bas ? Cela m’arrive souvent, surtout à cause des publicités qui se chargent au-dessus du contenu.&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;Ce type d’expérience utilisateur peut être frustrant, mais jusqu’à présent, nous avons eu du mal à la mesurer quantitativement. Le &lt;span lang=&quot;en&quot;&gt;Cumulative Layout Shift&lt;/span&gt; relève ce défi.&lt;/em&gt;&lt;/p&gt;
&lt;!-- more --&gt;
&lt;div class=&quot;emphasis&quot;&gt;
&lt;strong&gt;Note :&lt;/strong&gt; cet article a d&apos;abord été publié sur &lt;a href=&quot;https://blog.dareboost.com/fr/2020/09/cumulative-layout-shift-stabilite-page/&quot;&gt;le blog de Dareboost&lt;/a&gt; (abandonné).
&lt;/div&gt;
&lt;p&gt;Lorsque vous voyez une page web, votre cerveau décompose l’information visuelle en éléments. L’agencement de la page vous donne des informations sur leurs relations les uns par rapport aux autres. C’est comme ça que vous détectez le contenu pertinent. Si ce contenu se déplace tout seul, ou si un autre élément est injecté dans la page et déplace les autres, alors vous risquez de le perdre de vue.&lt;/p&gt;
&lt;div class=&quot;videoWrapper&quot;&gt;
    &lt;iframe loading=&quot;lazy&quot; width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube-nocookie.com/embed/videoseries?list=PL_fzqgZbdAUljJWSghDD9JiAGwhNGmLRN&amp;loop=1&quot; title=&quot;Vidéo du chargement de la page d’accueil de LeMonde.fr. Des zones bleu clair sont affichées en superposition du contenu, couvrant jusqu’à 2/3 de l’écran.&quot; frameborder=&quot;0&quot; allow=&quot;encrypted-media&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;
&lt;p&gt;&lt;em&gt;Chargement de la page d’accueil de LeMonde.fr. Les contenus insérés et en mouvement sont identifiés par des zones bleu clair. Le contenu d’environ 2/3 de l’écran se déplace pendant le chargement de la page.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Pire encore, vous pouvez penser que la mise en page est stable et essayer d’interagir avec la page. Par exemple en cliquant sur un bouton (image de gauche). Si un autre contenu apparaît juste avant le clic et pousse l’autre contenu vers le bas (image de droite), vous risquez d’interagir avec le mauvais élément.&lt;/p&gt;
&lt;figure &gt;
&lt;img src=&quot;https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_320/https://boris.schapira.dev/assets/images/web/2020-09-15/1.png&quot; srcset=&quot;https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_320/https://boris.schapira.dev/assets/images/web/2020-09-15/1.png 320w,
https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_640/https://boris.schapira.dev/assets/images/web/2020-09-15/1.png 640w,
https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_960/https://boris.schapira.dev/assets/images/web/2020-09-15/1.png 960w,
https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_960/https://boris.schapira.dev/assets/images/web/2020-09-15/1.png 960w&quot; sizes=&quot;80vw&quot;  alt=&quot;Deux images d’un utilisateur tenant un téléphone dans sa main. Dans la seconde image, un tapotement est matérialisé.&quot; loading=&quot;lazy&quot; width=&quot;960&quot; height=&quot;720&quot; /&gt;
&lt;figcaption&gt;&lt;p&gt;L’utilisateur est sur le point de tapoter sur l’image d’un fauteuil, dans une liste de produits. Soudainement, un texte avec un bouton est inséré en haut de page, déplaçant tout le contenu vers le bas. L’utilisateur clique involontairement sur l’image d’un sac à dos.&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
 &lt;div class=&quot;inline-note&quot;&gt;&lt;p&gt;&lt;strong&gt;Plan&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Dans cet article, nous introduirons &lt;a href=&quot;#layout-instability-api&quot;&gt;l’API &lt;span lang=&quot;en&quot;&gt;Layout Instability&lt;/span&gt;&lt;/a&gt; et verrons comment elle est utilisée pour &lt;a href=&quot;#cls-compute&quot;&gt;calculer le &lt;span lang=&quot;en&quot;&gt;Cumulative Layout Shift&lt;/span&gt; (CLS)&lt;/a&gt;. Nous verrons comment &lt;a href=&quot;#cls-in-chrome&quot;&gt;visualiser le CLS dans Chrome&lt;/a&gt; et comment &lt;a href=&quot;#optimize-cls&quot;&gt;optimiser son site pour avoir un bon CLS&lt;/a&gt;. Enfin, nous aborderons &lt;a href=&quot;#wtf&quot;&gt;les étranges caractéristiques du CLS&lt;/a&gt; et nous &lt;a href=&quot;#conclusion&quot;&gt;conclurons&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;h2&gt;&lt;span id=&quot;layout-instability-api&quot;&gt;Une API dédiée dans le navigateur…&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;Depuis plusieurs années, les équipes Front tentent d’identifier les éléments qui se déplacent pendant le chargement et l’utilisation d’une page. Il y a dix ans, il fallait un moteur de rendu sur-mesure pour afficher tous les &lt;span lang=&quot;en&quot;&gt;repaints&lt;/span&gt; (dans l’exemple ci-dessous, Gecko, le moteur de rendu de Firefox).&lt;/p&gt;
 &lt;div class=&quot;inline-note&quot;&gt;&lt;p&gt;&lt;strong&gt;ATTENTION&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Cette vidéo contient beaucoup de clignotements. Ne la regardez pas si vous êtes photosensible ou si vous souffrez de troubles vestibulaires.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;videoWrapper&quot;&gt;
    &lt;iframe loading=&quot;lazy&quot; width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube-nocookie.com/embed/dndeRnzkJDU&quot; title=&quot;Gecko Reflow Visualization: the Wikipedia example&quot; frameborder=&quot;0&quot; allow=&quot;encrypted-media&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;
&lt;p&gt;Pour déterminer le moment où une page est chargée/stable, &lt;a href=&quot;https://bugs.chromium.org/p/chromium/issues/detail?id=581518&quot; hreflang=&quot;en&quot;&gt;vous pouviez utiliser l’événement &lt;code&gt;onload&lt;/code&gt;, mais c’est loin d’être parfait&lt;/a&gt;. L’API &lt;a href=&quot;https://wicg.github.io/layout-instability/&quot; hreflang=&quot;en&quot; lang=&quot;en&quot;&gt;Layout Instability&lt;/a&gt; de Chrome répond à cette limite. L’idée ici est de s’intéresser à d’autres signaux. Plus particulièrement, à la stabilité de la mise en page, ou “l’absence de sursauts d’interface”. Comme indiqué dans le résumé de l’API, elle “offre aux auteurs de pages web un aperçu de la stabilité de leurs pages, à partir des mouvements des éléments de la page”. Pour ce faire, l’API surveille les nœuds du DOM qui sont visibles dans le viewport. Si la représentation visuelle d’un nœud se décale, entre deux frames, de 3 pixels ou plus dans le sens horizontal ou vertical, l’API enregistre un &lt;em lang=&quot;en&quot;&gt;layout-shif&lt;/em&gt; (un décalage) et &lt;strong&gt;lui attribue un score&lt;/strong&gt;.&lt;/p&gt;
&lt;h2&gt;&lt;span id=&quot;cls-compute&quot;&gt;… utilisé pour pénaliser les saccades&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;Revenons à notre exemple :&lt;/p&gt;
&lt;figure &gt;
&lt;img src=&quot;https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_320/https://boris.schapira.dev/assets/images/web/2020-09-15/1.png&quot; srcset=&quot;https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_320/https://boris.schapira.dev/assets/images/web/2020-09-15/1.png 320w,
https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_640/https://boris.schapira.dev/assets/images/web/2020-09-15/1.png 640w,
https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_960/https://boris.schapira.dev/assets/images/web/2020-09-15/1.png 960w,
https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_960/https://boris.schapira.dev/assets/images/web/2020-09-15/1.png 960w&quot; sizes=&quot;80vw&quot;  alt=&quot;Deux images d’un utilisateur tenant un téléphone dans sa main. Dans la seconde image, un tapotement est matérialisé.&quot; loading=&quot;lazy&quot; width=&quot;960&quot; height=&quot;720&quot; /&gt;
&lt;figcaption&gt;&lt;p&gt;L’utilisateur est sur le point de tapoter sur l’image d’un fauteuil, dans une liste de produits. Soudainement, un texte avec un bouton est inséré en haut de page, déplaçant tout le contenu vers le bas. L’utilisateur clique involontairement sur l’image d’un sac à dos.&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Comment l’API &lt;span lang=&quot;en&quot;&gt;Layout Instability&lt;/span&gt; attribue-t-elle un score à ce décalage ? Pour calculer le score de décalage (&lt;em lang=&quot;en&quot;&gt;layout shift score&lt;/em&gt;), l’algorithme évalue d’abord la zone affectée par le décalage (&lt;em lang=&quot;en&quot;&gt;impact fraction&lt;/em&gt;), et la multiplie par la longueur du décalage (&lt;em lang=&quot;en&quot;&gt;distance fraction&lt;/em&gt;).&lt;/p&gt;
&lt;div class=&quot;videoWrapper&quot;&gt;
    &lt;iframe loading=&quot;lazy&quot; width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube-nocookie.com/embed/videoseries?list=PL_fzqgZbdAUlI1BEcOBva5OP4jaSQioQR&amp;loop=1&quot; title=&quot;CLS : visualiser l’impact fraction et la distance fraction&quot; frameborder=&quot;0&quot; allow=&quot;encrypted-media&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;
&lt;p&gt;La zone affectée par le &lt;span lang=&quot;en&quot;&gt;layout shift&lt;/span&gt;, ou &lt;strong lang=&quot;en&quot;&gt;impact fraction&lt;/strong&gt; (fraction d’impact), est la zone totale occupée par le nœud qui se déplace, de sa première position à sa position finale. Ici, 78 % + 32 % = 110 %. Comme vous pouvez le voir, la fraction d’impact peut être supérieure à 100 % (la taille du &lt;span lang=&quot;en&quot;&gt;viewport&lt;/span&gt;).&lt;/p&gt;
&lt;p&gt;La longueur du décalage, ou &lt;strong lang=&quot;en&quot;&gt;distance fraction&lt;/strong&gt;, est mesurée en pourcentage du plus grand côté du &lt;span lang=&quot;en&quot;&gt;viewport&lt;/span&gt;. Dans cet exemple, nous allons donc considérer la hauteur. L’élément existant se déplace d’une hauteur équivalente à 34 % de la hauteur du &lt;span lang=&quot;en&quot;&gt;viewport&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;Pour ce &lt;span lang=&quot;en&quot;&gt;Layout Shift&lt;/span&gt; en particulier, le &lt;strong&gt;score de &lt;span lang=&quot;en&quot;&gt;Layout Shift&lt;/span&gt;&lt;/strong&gt; est donc :&lt;/p&gt;
&lt;p&gt;&lt;em&gt;score de &lt;span lang=&quot;en&quot;&gt;Layout Shift&lt;/span&gt; = 110 % (&lt;span lang=&quot;en&quot;&gt;impact fraction&lt;/span&gt;) × 34 % (&lt;span lang=&quot;en&quot;&gt;distance fraction&lt;/span&gt;) = &lt;strong&gt;0,374&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Le &lt;a href=&quot;https://www.dareboost.com/fr/doc/test-performance-web/indicateurs/cumulative-layout-shift-cls&quot; lang=&quot;en&quot;&gt;Cumulative Layout Shift&lt;/a&gt; (CLS) est la somme des scores de (presque) tous les &lt;span lang=&quot;en&quot;&gt;Layout Shifts&lt;/span&gt;.&lt;/p&gt;
 &lt;div class=&quot;inline-note&quot;&gt;&lt;p&gt;&lt;strong&gt;La fenêtre de 500 millisecondes&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Pour éviter que les sites web ne soient pénalisés pour les transitions ou les animations qui résultent de l’interaction de l’utilisateur avec l’interface, l’algorithme du CLS ignore les &lt;span lang=&quot;en&quot;&gt;Layout Shifts&lt;/span&gt; pendant 500 ms après chaque interaction active de l’utilisateur avec le document (par exemple, un clic, une frappe de touche ou un tapotement), ou après tout événement qui modifie directement la taille du &lt;span lang=&quot;en&quot;&gt;viewport&lt;/span&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;D’après Google, pour offrir une bonne expérience, les sites devraient s’efforcer d’avoir &lt;strong&gt;un CLS inférieur à 0,1&lt;/strong&gt; pour la plupart (75 %) des utilisateurs. C’est une mauvaise nouvelle pour les développeurs de l’exemple ci-dessus !&lt;/p&gt;
&lt;p&gt;N’oubliez pas que la fraction d’impact et la fraction de distance sont dépendantes des caractéristiques du &lt;span lang=&quot;en&quot;&gt;viewport&lt;/span&gt;. Une modification des dimensions ou de l’orientation du &lt;span lang=&quot;en&quot;&gt;viewport&lt;/span&gt; peuvent modifier la mise en page (en provoquant une réadaptation du contenu à l’espace disponible). Si cela se produit, pour un même &lt;span lang=&quot;en&quot;&gt;Layout Shift&lt;/span&gt;, la fraction d’impact et la fraction de distance, et donc le &lt;span lang=&quot;en&quot;&gt;Cumulative Layout Shift&lt;/span&gt;, n’auront plus les mêmes valeurs.&lt;/p&gt;
&lt;h2&gt;&lt;span id=&quot;cls-in-chrome&quot;&gt;Comment visualiser les &lt;span lang=&quot;en&quot;&gt;Layout Shifts&lt;/span&gt; dans Chrome&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;Les &lt;span lang=&quot;en&quot;&gt;Layout Shifts&lt;/span&gt; peuvent être affichés dans Chrome :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Dans les &lt;span lang=&quot;en&quot;&gt;DevTools&lt;/span&gt; (les outils de développement de Chrome), ouvrez le menu de commande en appuyant sur &lt;kbd&gt;Control&lt;/kbd&gt; + &lt;kbd&gt;Shift&lt;/kbd&gt; + &lt;kbd&gt;P&lt;/kbd&gt; ou &lt;kbd&gt;Command&lt;/kbd&gt; + &lt;kbd&gt;Shift&lt;/kbd&gt; + &lt;kbd&gt;P&lt;/kbd&gt; (macOS)&lt;/li&gt;
&lt;li&gt;Commencez à taper “&lt;span lang=&quot;en&quot;&gt;Rendering&lt;/span&gt;”&lt;/li&gt;
&lt;li&gt;Exécutez la commande “&lt;span lang=&quot;en&quot;&gt;Show Rendering&lt;/span&gt;” qui vous est proposée&lt;/li&gt;
&lt;li&gt;Activez la case &lt;strong lang=&quot;en&quot;&gt;Layout Shift Regions&lt;/strong&gt;. Quand vous interagissez avec la page, les &lt;span lang=&quot;en&quot;&gt;Layout Shifts&lt;/span&gt; apparaissent désormais en bleu.&lt;/li&gt;
&lt;/ol&gt;
 &lt;div class=&quot;inline-note&quot;&gt;&lt;p&gt;&lt;strong&gt;Attention&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Cette fonctionnalité peut provoquer des clignotements. Si vous êtes photosensible ou si vous souffrez de troubles vestibulaires, faites attention.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Depuis Chrome 84, vous pouvez également visualiser les &lt;span lang=&quot;en&quot;&gt;Layout Shifts&lt;/span&gt; et obtenir des informations sur leur attribution (allant même jusqu’à la liste des éléments qui ont été décalés) dans l’onglet Performance, sur la ligne “Experience”.&lt;/p&gt;
&lt;figure &gt;
&lt;img src=&quot;https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_320/https://boris.schapira.dev/assets/images/web/2020-09-15/performance.png&quot; srcset=&quot;https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_320/https://boris.schapira.dev/assets/images/web/2020-09-15/performance.png 320w,
https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_640/https://boris.schapira.dev/assets/images/web/2020-09-15/performance.png 640w,
https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_677/https://boris.schapira.dev/assets/images/web/2020-09-15/performance.png 677w&quot; sizes=&quot;80vw&quot;  alt=&quot;Une capture de l’onglet Performance des DevTools, quand on zoome et qu’on sélectionne un Layout Shift en particulier.&quot; loading=&quot;lazy&quot; width=&quot;677&quot; height=&quot;756&quot; /&gt;
&lt;figcaption&gt;&lt;p&gt;Sur une ligne de temps, une succession d’écrans aide à comprendre la chronologie visuelle. En dessous, plusieurs lignes exposent ce qui s’est passé au même moment, y compris la ligne &amp;quot;Experience&amp;quot;, qui contient des repères rouges, un pour chaque &lt;span lang=&amp;quot;en&amp;quot;&gt;Layout Shift&lt;/span&gt;. Tout en bas, une description donne des informations plus précises sur le &lt;span lang=&amp;quot;en&amp;quot;&gt;Layout Shift&lt;/span&gt; sélectionné.&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2&gt;&lt;span id=&quot;optimize-cls&quot;&gt;Comment optimiser votre Cumulative Layout Shift&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;Une page accumule des &lt;span lang=&quot;en&quot;&gt;Layout Shifts&lt;/span&gt; tout au long de son utilisation. À chaque fois que de nouveaux éléments sont insérés visuellement sans que l’espace nécessaire à leur affichage n’ait été réservé en amont par le navigateur. Le plus souvent, il s’agira d’images, mais vous devez également faire attention aux publicités, aux polices de caractères web, aux contenus intégrés et aux contenus injectés suite à une interaction qui génèrent des temps d’attente de plus de 500 ms.&lt;/p&gt;
&lt;h3&gt;Images&lt;/h3&gt;
&lt;p&gt;Quand il reçoit le code HTML de votre page, le navigateur ne sait pas grand choses sur les images qui y sont utilisées. S’il ne dispose que de l’URL de l’image, le navigateur ne peut pas connaître sa taille. Il ne peut donc pas allouer l’espace nécessaire à l’affichage de cette image. Cette situation est devenue encore plus complexe depuis l’avènement du &lt;span lang=&quot;en&quot;&gt;Responsive Web Design&lt;/span&gt; puisque désormais, la taille d’affichage d’une image dépend souvent du contexte.&lt;/p&gt;
&lt;p&gt;Pour donner le plus d’informations possible au navigateur (afin qu’il puisse faire son travail au mieux) définissez toujours les valeurs des attributs &lt;code&gt;width&lt;/code&gt; et &lt;code&gt;height&lt;/code&gt; sur vos éléments &lt;code&gt;&amp;lt;img&amp;gt;&lt;/code&gt; (exprimées en pixels). Même si ce ne sont pas les dimensions réelles de l’affichage (qui peuvent dépendre des règles de style), le navigateur les utilisera pour déduire le rapport largeur / hauteur (appelé &lt;code&gt;aspect-ratio&lt;/code&gt;) de l’image, et ainsi calculer la hauteur à réserver en fonction de la largeur d’affichage définie par le CSS.&lt;/p&gt;
 &lt;div class=&quot;inline-note&quot;&gt;&lt;p&gt;&lt;strong&gt;Le saviez-vous ?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Edge, Firefox et Chrome ont une représentation interne du &lt;code&gt;aspect-ratio&lt;/code&gt; des images sur lesquelles les attributs &lt;code&gt;width&lt;/code&gt; et &lt;code&gt;height&lt;/code&gt; sont définis. Une expérience est en cours sur Chrome pour ouvrir la fonctionnalité aux équipes de développement web.&lt;/p&gt;
&lt;div class=&quot;language-css highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code data-lang=&quot;css&quot;&gt;&lt;span class=&quot;nc&quot;&gt;.el&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;nl&quot;&gt;aspect-ratio&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;16&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;/&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;9&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;c&quot;&gt;/* internal rule for img, using the --webkit prefix (in Chrome)
img[width][height] {
  --webkit-aspect-ratio: attr(width) / attr(height);
}*/&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Pour en savoir plus sur &lt;code&gt;aspect-ratio&lt;/code&gt; lisez &lt;a href=&quot;https://css-tricks.com/a-first-look-at-aspect-ratio/&quot; hreflang=&quot;en&quot;&gt;cet article de Chris Coyier sur &lt;span lang=&quot;en&quot;&gt;CSS Tricks&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Et bien sûr, n’oubliez pas de &lt;a href=&quot;https://blog.dareboost.com/fr/2017/10/optimiser-les-images-et-reduire-leur-poids-formats-outils-et-rwd/#servir-la-bonne-taille-de-fichier-en-fonction-du-contexte&quot;&gt;servir la bonne taille de fichier en fonction du contexte&lt;/a&gt;. Utilisez &lt;code&gt;srcset&lt;/code&gt; pour aider le navigateur à sélectionner la meilleure image de votre jeu d’images avec le même rapport hauteur/largeur (suivant la largeur du viewport). Utilisez &lt;code&gt;picture&lt;/code&gt; et &lt;code&gt;source&lt;/code&gt; pour gérer différents rapports hauteur/largeur ou différents formats d’image en fonction du contexte et des types supportés par le navigateur.&lt;/p&gt;
&lt;h3&gt;Publicités, intégrations, &lt;span lang=&quot;en&quot;&gt;iframes&lt;/span&gt; et contenus créés dynamiquement&lt;/h3&gt;
&lt;p&gt;Comme pour les images, le navigateur doit allouer l’espace nécessaire pour afficher le contenu final. Mais vous ne pouvez pas donner beaucoup d’informations au navigateur, car souvent, vous ne disposez vous-même que de peu d’informations sur le futur contenu. Dans ce qui suit, je ne parlerai que du cas des publicités, car elles constituent un problème récurrent. Mais l’approche est la même pour les autres types de contenus injectés.&lt;/p&gt;
 &lt;div class=&quot;inline-note&quot;&gt;&lt;p&gt;Dans la suite, nous examinerons l’impact des injections de contenu sur le contenu d’une page. Notez que le contenu des &lt;span lang=&quot;en&quot;&gt;iframes&lt;/span&gt; n’est pas concerné : si une &lt;span lang=&quot;en&quot;&gt;iframe&lt;/span&gt; produit de &lt;span lang=&quot;en&quot;&gt;Layout Shifts&lt;/span&gt;, ceux-ci n’auront pas d’impact sur la page principale.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Le plus souvent, l’espace publicitaire est attribué à un service d’enchères qui injecte un conteneur publicitaire dans un nœud dédié du DOM. Ensuite, cet espace est “loué” au plus offrant, attribué à une régie qui injecte enfin une publicité. L’espace peut être redimensionné plusieurs fois avant que la publicité finale ne soit affichée, et dans le cas de publicités temporisées, des injections supplémentaires peuvent se produire plusieurs fois pendant la session de l’utilisateur.&lt;/p&gt;
&lt;h4&gt;Comment éviter que la mise en page soit modifiée ?&lt;/h4&gt;
&lt;p&gt;Définissez explicitement l’espace que vous souhaitez allouer au conteneur publicitaire. Prévoyez un habillage pour prendre en compte le cas dans lequel l’annonce serait plus petite que l’espace pré-réservé. Si l’annonce est plus grande que l’espace réservé, il faudra accepter qu’une partie de l’annonce ne soit pas affichée.&lt;/p&gt;
&lt;p&gt;Il arrive que l’espace reste vide, si aucune publicité n’a été trouvée. Prévoyez des visuels correspondant à la taille de l’espace publicitaire afin de ne pas avoir à réduire l’espace publicitaire et à provoquer un changement de disposition. Si votre régie vous donne les moyens (par le biais d’un callback JS, par exemple) d’injecter du contenu utile en cas d’absence de publicité, bien sûr, n’hésitez pas.&lt;/p&gt;
&lt;p&gt;Une autre façon de résoudre ce problème consiste à positionner les publicités dans l’espace négatif laissé par le contenu du site, en dehors du flux de pages. Si votre publicité a une position figée dans le gabarit de page, et que cette position n’interfère pas avec l’agencement du reste du contenu, alors l’insertion de la publicité ne provoque aucun décalage.&lt;/p&gt;
&lt;figure &gt;
&lt;img src=&quot;https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_320/https://boris.schapira.dev/assets/images/web/2020-09-15/negative_fr.png&quot; srcset=&quot;https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_320/https://boris.schapira.dev/assets/images/web/2020-09-15/negative_fr.png 320w,
https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_640/https://boris.schapira.dev/assets/images/web/2020-09-15/negative_fr.png 640w,
https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_960/https://boris.schapira.dev/assets/images/web/2020-09-15/negative_fr.png 960w,
https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_960/https://boris.schapira.dev/assets/images/web/2020-09-15/negative_fr.png 960w&quot; sizes=&quot;80vw&quot;  alt=&quot;Une capture d’une page du Monde.fr où un espace est réservé pour une publicité dans la marge. Si la publicité est plus grande que prévue, elle occupe davantage de place dans la marge, mais ne décale pas le contenu.&quot; loading=&quot;lazy&quot; width=&quot;960&quot; height=&quot;540&quot; /&gt;
&lt;figcaption&gt;&lt;p&gt;Utilisation de l’espace négatif pour positionner les annonces.&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Enfin, vous pouvez décider de déplacer vos espaces publicitaires plus bas sur vos pages. Cela évitera que la fraction d’impact du Layout Shift ne soit trop importante, mais cela réduira probablement vos revenus.&lt;/p&gt;
&lt;h3&gt;Police d’écriture web&lt;/h3&gt;
&lt;p&gt;Lorsqu’un navigateur doit afficher du texte avec une police d’écriture web, il détermine si la police est nécessaire et disponible (via le système d’exploitation ou dans le cache navigateur). Si la police est nécessaire mais non disponible, le navigateur la récupère. Pendant la phase de récupération, le navigateur suit les instructions &lt;code&gt;font-display&lt;/code&gt; (ou leur absence) pour déterminer s’il doit afficher le texte avec une police de substitution disponible ou allouer l’espace avec du texte invisible. Une fois la police chargée, ou si le temps d’attente est trop long, le navigateur procède alors au rendu final.&lt;/p&gt;
&lt;p&gt;En d’autres termes, chaque fois que le navigateur doit récupérer une police web, il attribue à la zone un texte avec une police par défaut, visible ou non. Et lorsque la police devient disponible, le navigateur effectue le rendu final de la zone de texte.&lt;/p&gt;
&lt;p&gt;Problème : la police temporaire utilisée pour occuper l’espace n’a pas nécessairement pas nécessairement les mêmes caractéristiques que la police finale. Les lignes de base, la taille des points typographiques et les kernings peuvent être différents et le texte final peut apparaître plus court ou plus long que le texte temporaire, ce qui peut déplacer les contenus qui suivent dans le flux de page, et entraîner des &lt;span lang=&quot;en&quot;&gt;Layout Shifts&lt;/span&gt;.&lt;/p&gt;
 &lt;div class=&quot;inline-note&quot;&gt;&lt;p&gt;Chaque fois que j’ai besoin de me rappeler comment fonctionne la gestion de l’affichage des polices, je retourne voir le &lt;a href=&quot;https://font-display.glitch.me/&quot; hreflang=&quot;en&quot; lang=&quot;en&quot;&gt;the font-display playground&lt;/a&gt;, de &lt;a href=&quot;https://twitter.com/notwaldorf&quot;&gt;Monica Dinculescu&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Pour éviter ces &lt;span lang=&quot;en&quot;&gt;Layout Shifts&lt;/span&gt;, vous pouvez &lt;a href=&quot;https://blog.dareboost.com/fr/2020/05/optimiser-performance-parties-tierces/&quot;&gt;accélérer le chargement des polices&lt;/a&gt;. ou choisir des polices web ayant des caractéristiques très proches des polices système. Vous pouvez également considérer la police web comme optionnelle lors du premier chargement de la page. Elle ne sera alors pas utilisée sur cette page, même si elle est téléchargée et mise en cache. En revanche, elle sera disponible pour la page suivante. À ce sujet, vous pouvez lire “&lt;a href=&quot;https://tech.ebayinc.com/engineering/ebays-font-loading-strategy/&quot; hreflang=&quot;en&quot; lang=&quot;en&quot;&gt;eBay’s Font Loading Strategy&lt;/a&gt;” de &lt;a href=&quot;https://twitter.com/senthil_hi&quot;&gt;Senthil Padmanabhan&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Contenu injecté plus de 500 ms après une interaction&lt;/h3&gt;
&lt;p&gt;L’algorithme du CLS ignore les &lt;span lang=&quot;en&quot;&gt;Layout Shifts&lt;/span&gt; pendant 500 ms après chaque interaction active de l’utilisateur avec le document ou modification de la taille du &lt;span lang=&quot;en&quot;&gt;viewport&lt;/span&gt;. Grâce à ce mécanisme, la plupart des interactions utilisateur ne provoquent pas de &lt;span lang=&quot;en&quot;&gt;Layout Shifts&lt;/span&gt; comptabilisés dans le &lt;span lang=&quot;en&quot;&gt;Cumulative Layout Shift&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;Assurez-vous donc que votre interface réagira à l’interaction utilisateur dans la fenêtre de 500 ms. Si votre interface utilisateur repose sur des requêtes réseau ou un traitement javascript lourd, des décalages peuvent se produire après 500 ms et seront donc pris en compte dans la valeur du &lt;span lang=&quot;en&quot;&gt;Cumulative Layout Shift&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;Pour optimiser votre CLS :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Assurez-vous que vos transitions et animations qui suivent une interaction utilisateur durent moins de 500 ms.&lt;/li&gt;
&lt;li&gt;Mesurez et optimisez les temps de réponse des vos API.&lt;/li&gt;
&lt;li&gt;Anticipez le résultat de l’appel (ou des appels) ou du long traitement en réservant l’espace associé au(x) résultat(s) durant les 500 ms qui suivent l’interaction, quitte à ce que cet espace soit rempli ultérieurement, à la manière de &lt;a href=&quot;https://uxdesign.cc/the-optimistic-ui-with-react-f1420e317d54&quot; hreflang=&quot;en&quot;&gt;l’&lt;span lang=&quot;en&quot;&gt;optimistic UI&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Implémentez un paradigme d’interface utilisateur spécifique aux longs traitements et un appel réseau (mise en file d’attente et notification d’achèvement, affichage des résultats dans des pop-ins, etc.)&lt;/li&gt;
&lt;li&gt;N’animez que des &lt;a href=&quot;https://csstriggers.com/&quot; hreflang=&quot;en&quot;&gt;propriétés CSS qui ne déclenchent pas de changements de mise en page dans Blink&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Bien sûr, &lt;strong&gt;testez toujours&lt;/strong&gt; vos optimisations. En menant quelques expériences pour écrire cet article, j’ai découvert que &lt;a href=&quot;https://bugs.chromium.org/p/chromium/issues/detail?id=1099895&quot; hreflang=&quot;en&quot;&gt;lorsque la durée d’une transition &lt;code&gt;translate&lt;/code&gt; est de 0, des &lt;span lang=&quot;en&quot;&gt;Layout Shifts&lt;/span&gt; apparaissent&lt;/a&gt; (un problème désormais résolu). Des cas-limites comme celui-ci existeront toujours. N’hésitez pas à &lt;a href=&quot;https://bugs.chromium.org/p/chromium/issues/list&quot; hreflang=&quot;en&quot;&gt;les signaler à l’équipe Chromium&lt;/a&gt;.&lt;/p&gt;
 &lt;div class=&quot;inline-note&quot;&gt;&lt;p&gt;&lt;strong&gt;Astuce: un traitement en deux étapes&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Prenez l’exemple d’un bouton “Charger 20 articles supplémentaires” en fin de page. Si le traitement (appel réseau + rendu) prend moins de 500 ms, c’est parfait. Mais s’il prend plus de 500 ms, le rendu peut provoquer un décalage du pied de page et augmenter votre &lt;span lang=&quot;en&quot;&gt;Cumulative Layout Shift&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;Pour éviter ça, surveillez le temps écoulé et divisez la tâche en deux parties si nécessaire. Au lieu de faire un rendu systématique après l’appel réseau, vous pourrez plutôt changer le libellé du bouton en “Afficher les 20 éléments récupérés”. Cela obligera les utilisateurs à interagir à nouveau avec la page et vous accordera 500 millisecondes supplémentaires pour le rendu du contenu.&lt;/p&gt;
&lt;p&gt;Bien sûr, n’hésitez pas à tester le ressensi des utilisateurs pour vérifier que l’utilisation de la fonctionnalité correspond mieux à leurs attentes. Optimiser le CLS ne doit pas se faire au détriment de l’UX.&lt;/p&gt;
&lt;/div&gt;
&lt;h2&gt;&lt;span id=&quot;wtf&quot;&gt;Comportements contre-intuitifs&lt;/span&gt;&lt;/h2&gt;
&lt;h3&gt;Augmentation continue dans le cas des &lt;span lang=&quot;en&quot;&gt;Single-Page Applications&lt;/span&gt; (SPAs)&lt;/h3&gt;
&lt;p&gt;La plupart des algorithmes de calcul des indicateurs de performance web s’arrêtent à la fin du chargement de la page. L’évaluation du &lt;span lang=&quot;en&quot;&gt;Cumulative Layout Shift&lt;/span&gt;, elle, se poursuit tout au long de l’utilisation de la page.&lt;/p&gt;
&lt;p&gt;Beaucoup de sites web sont construits sur un paradigme de navigation de page à page, d’URL à URL. Pour eux, le CLS est réinitialisé à chaque changement de page. Certains sites, en revanche, sont construits autour d’une page unique dont le contenu évolue au fil des interactions. C’est ce qu’on appelle des &lt;span lang=&quot;en&quot;&gt;Single-Page Applications&lt;/span&gt; (SPA).&lt;/p&gt;
&lt;p&gt;Sur les SPA (y compris les applications qui utilisent des bibliothèques d’amélioration progressives comme &lt;a href=&quot;https://github.com/turbolinks/turbolinks&quot; hreflang=&quot;en&quot; lang=&quot;en&quot;&gt;turbolinks&lt;/a&gt;), le &lt;span lang=&quot;en&quot;&gt;Cumulative Layout Shift&lt;/span&gt; &lt;strong&gt;augmente en continu&lt;/strong&gt; pendant la session d’un utilisateur, puisque la navigation entre les contenus ne se fait pas en naviguant entre des pages. Le &lt;span lang=&quot;en&quot;&gt;Cumulative Layout Shift&lt;/span&gt; n’est donc collecté que lorsque l’utilisateur quitte la page. Si la valeur du &lt;span lang=&quot;en&quot;&gt;Cumulative Layout Shift&lt;/span&gt; que vous observez &lt;a href=&quot;https://blog.dareboost.com/fr/2020/06/signaux-web-essentiels-core-web-vitals/&quot;&gt;dans la &lt;span lang=&quot;en&quot;&gt;Search Console&lt;/span&gt; (rubrique “Signaux Web essentiels”)&lt;/a&gt; vous semble élevée, c’est peut-être une explication.  &lt;div class=&quot;inline-note&quot;&gt;&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;Ce comportement spécifique du &lt;span lang=&quot;en&quot;&gt;Cumulative Layout Shift&lt;/span&gt; est particulièrement important. Pour les équipes développant des SPAs, l’objectif ne doit pas être de réduire le nombre de &lt;span lang=&quot;en&quot;&gt;Layout Shifts&lt;/span&gt;, mais de concevoir des interfaces qui ne produisent aucun &lt;span lang=&quot;en&quot;&gt;Layout Shifts&lt;/span&gt;. Dans le cas contraire, plus leurs interfaces sont populaires, plus les durées des session de leurs utilisateurs et utilisatrices seront longues, plus le CLS mesuré sera élevé.&lt;/p&gt;
&lt;/div&gt;
&lt;h3&gt;Le problème des barres de défilement&lt;/h3&gt;
&lt;p&gt;Bien que cela puisse paraître contre-intuitif, les barres de défilement horizontales et verticales font partie du &lt;span lang=&quot;en&quot;&gt;viewport&lt;/span&gt;. Elles sont notamment incluses dans &lt;a href=&quot;https://drafts.csswg.org/css-values-3/#viewport-relative-lengths&quot; hreflang=&quot;en&quot;&gt;les dimensions de pourcentage du viewport &lt;code&gt;vw&lt;/code&gt; et &lt;code&gt;vh&lt;/code&gt;&lt;/a&gt;. L’apparition ou la disparition des barres de défilement ne modifie donc pas le viewport, et ne sont donc pas éligibles aux “500 ms sans accumulation de CLS”. Pourtant, l’apparition et la disparition des barres de défilement modifient la zone disponible pour les contenus, qui peuvent donc se déplacer pour mieux l’occuper, provoquant un &lt;span lang=&quot;en&quot;&gt;Layout Shift&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;Sur certains systèmes d’exploitation, comme Windows, les barres de défilement sont cachées jusqu’à ce qu’elles soient nécessaires. Si le chargement de votre site est très progressif (avec par exemple une page vide au début puis des requêtes JavaScript qui, petit-à-petit, créent le contenu), alors les barres de défilement peuvent être absentes lors du &lt;span lang=&quot;en&quot;&gt;First Paint&lt;/span&gt;, puis apparaître au cours du chargement de la page et provoquer des &lt;span lang=&quot;en&quot;&gt;Layout Shifts&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;Pour éviter ce comportement, vous pouvez ajouter &lt;code&gt;html { overflow-y: scroll }&lt;/code&gt; afin de forcer l’apparition d’une barre de défilement au &lt;span lang=&quot;en&quot;&gt;First Paint&lt;/span&gt;, ou attendre l’implémentation du module CSS Overflow de niveau 4 et &lt;a href=&quot;https://www.w3.org/TR/css-overflow-4/#scollbar-gutter-property&quot; hreflang=&quot;en&quot;&gt;la nouvelle propriété &lt;code&gt;scrollbar-gutter&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;blockquote class=&quot;twitter-tweet&quot;&gt;&lt;p lang=&quot;en&quot; dir=&quot;ltr&quot;&gt;Cumulative Layout Shift &lt;a href=&quot;https://twitter.com/hashtag/CLS?src=hash&amp;amp;ref_src=twsrc%5Etfw&quot;&gt;#CLS&lt;/a&gt; tuning tip&lt;br&gt;&lt;br&gt;Add html{overflow-y:scroll} to enforce a scrollbar at first paint.&lt;br&gt;&lt;br&gt;Pages with a layout shift drastically reduced as soon as the above CSS rule was added. &lt;a href=&quot;https://twitter.com/hashtag/WebPerf?src=hash&amp;amp;ref_src=twsrc%5Etfw&quot;&gt;#WebPerf&lt;/a&gt; &lt;a href=&quot;https://twitter.com/hashtag/AimForZero?src=hash&amp;amp;ref_src=twsrc%5Etfw&quot;&gt;#AimForZero&lt;/a&gt; &lt;a href=&quot;https://t.co/k4KCUnmzPo&quot;&gt;pic.twitter.com/k4KCUnmzPo&lt;/a&gt;&lt;/p&gt;&amp;mdash; Tim Vereecke (@TimVereecke) &lt;a href=&quot;https://twitter.com/TimVereecke/status/1239454788116533248?ref_src=twsrc%5Etfw&quot;&gt;March 16, 2020&lt;/a&gt;&lt;/blockquote&gt;
&lt;h3&gt;Impact de la &lt;code&gt;timing-function&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;Dans l’exemple suivant, nous comparons deux mises en page réalisées avec &lt;code&gt;flexbox&lt;/code&gt;. Dans les deux cas, le survol de l’élément central double sa surface. Sur la première ligne, la &lt;code&gt;timing-function&lt;/code&gt; est &lt;code&gt;ease&lt;/code&gt;. Sur la seconde, c’est &lt;code&gt;linear&lt;/code&gt;.&lt;/p&gt;
&lt;div class=&quot;videoWrapper&quot;&gt;
    &lt;iframe loading=&quot;lazy&quot; width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube-nocookie.com/embed/videoseries?list=PL_fzqgZbdAUk6EgDkiqwvVUCGUHOyoUaU&amp;loop=1&quot; title=&quot;Cumulative Layout Shift: Ease vs. Linear, impact des animations (Chrome 84)&quot; frameborder=&quot;0&quot; allow=&quot;encrypted-media&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;
&lt;p&gt;Comme vous pouvez le voir, le deuxième exemple génère beaucoup moins de Cumulative Layout Shift. Pour l’expliquer, nous devons revenir à la spécification de l’API &lt;span lang=&quot;en&quot;&gt;Layout Shift&lt;/span&gt;, et plus précisément à ce que l’on appelle les “nœuds instables” (”&lt;a href=&quot;https://wicg.github.io/layout-instability/#sec-unstable-nodes&quot; hreflang=&quot;en&quot; lang=&quot;en&quot;&gt;Unstable nodes&lt;/a&gt;”).&lt;/p&gt;
&lt;blockquote lang=&quot;en&quot;&gt;A Node N has shifted in a coordinate space C if the 
starting point of N in C differs from the previous frame starting point of N 
in C by 3 or more pixel units in either the horizontal or vertical 
direction.&lt;/blockquote&gt;
&lt;p&gt;qu’on peut traduire par :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Un nœud N s’est déplacé dans un espace de coordonnées C si le point de départ de N en C diffère du point de départ de la trame précédente de N en C de 3 unités de pixels ou plus dans le sens horizontal ou vertical.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Cette règle des “trois pixels entre deux frames” introduit un critère de vitesse dans la mesure de l’instabilité. Tous les éléments se déplaçant en dessous de cette vitesse ne sont pas considérés comme instables, et ces animations ne produisent pas de &lt;span lang=&quot;en&quot;&gt;Layout Shifts&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;Malheureusement, cela signifie que pour réduire le CLS, certains propriétaires de sites pourraient être tentés d’utiliser des animations linéaires, qui ont une vitesse constante, plutôt que des animations plus intuitives pour l’homme, telles que &lt;code&gt;ease&lt;/code&gt;, qui accélère au début de l’animation et ralentit à la fin.&lt;/p&gt;
&lt;figure &gt;
&lt;img src=&quot;https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_320/https://boris.schapira.dev/assets/images/web/2020-09-15/timings.png&quot; srcset=&quot;https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_320/https://boris.schapira.dev/assets/images/web/2020-09-15/timings.png 320w,
https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_558/https://boris.schapira.dev/assets/images/web/2020-09-15/timings.png 558w&quot; sizes=&quot;80vw&quot;  alt=&quot;Les timing-function `ease`et `linear`, représentées par des courbes de bézier.&quot; loading=&quot;lazy&quot; width=&quot;558&quot; height=&quot;351&quot; /&gt;
&lt;figcaption&gt;&lt;p&gt;La timing-function &lt;code&gt;linear&lt;/code&gt; a une croissance constante. &lt;code&gt;ease&lt;/code&gt; accélère fortement jusqu’au milieu du temps, puis ralentit.&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h3&gt;Autres comportements étranges de l’indicateur&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Les éléments animés qui créent des &lt;span lang=&quot;en&quot;&gt;Layout Shifts&lt;/span&gt; peuvent continuer à le faire, même s’ils ne sont pas visibles pour l’utilisateur (par exemple, s’ils ont une couleur qui se fond avec l’arrière-plan). Mais si vous utilisez &lt;code&gt;visibility: hidden&lt;/code&gt;, ce ne sera pas le cas.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://web.dev/cls/&quot; hreflang=&quot;en&quot;&gt;La page web.dev du CLS&lt;/a&gt; (&lt;a href=&quot;https://www.fasterize.com/fr/blog/core-web-vitals-google-quest-ce-que-le-cumulative-layout-shift-cls/&quot;&gt;traduite en français&lt;/a&gt; par Sarah Salis pour Fasterize) recommande d’utiliser &lt;code&gt;transform&lt;/code&gt; et &lt;code&gt;translate&lt;/code&gt; pour créer des animations qui ne produisent pas de &lt;span lang=&quot;en&quot;&gt;Layout Shifts&lt;/span&gt;. Chrome créer des &lt;span lang=&quot;en&quot;&gt;Layout Shifts&lt;/span&gt; lorsque le temps de transition est de 0, jusqu’à Chrome 86.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&lt;span id=&quot;conclusion&quot;&gt;Conclusion&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;Le &lt;span lang=&quot;en&quot;&gt;Cumulative Layout Shift&lt;/span&gt; est un indicateur qui mesure les instabilités de la mise en page d’une page web. Pour l’optimiser et &lt;strong&gt;améliorer l’expérience utilisateur&lt;/strong&gt;, vous devez éviter d’injecter du contenu pour lequel le navigateur n’a pas alloué la bonne quantité d’espace. Il existe plusieurs techniques pour les images, mais cela rendra toutefois la gestion de la publicité beaucoup plus complexe.&lt;/p&gt;
&lt;p&gt;Le mode de calcul du CLS lui confère des caractéristiques inhabituelles. L’algorithme actuel du CLS n’est probablement pas adapté aux &lt;span lang=&quot;en&quot;&gt;Single Page Apps&lt;/span&gt;, car l’attribution des résultats au niveau de la page n’est pas correctement gérée. Par conséquent, &lt;a href=&quot;https://blog.dareboost.com/en/2020/06/core-web-vitals-page-experience/&quot;&gt;l’utilisation des &lt;span lang=&quot;en&quot;&gt;Core Web Vitals&lt;/span&gt; (Signaux Web Essentiels) comme critère de classement&lt;/a&gt; pourrait être particulièrement difficile dans de tels cas.&lt;/p&gt;
&lt;p&gt;N’oubliez pas que le CLS est une nouvelle mesure. Nous manquons encore de retours d’expérience à grande échelle. En cas de doute, concentrez-vous toujours sur l’amélioration de l’expérience de l’utilisateur plutôt que sur l’optimisation de l’indicateur lui-même. Certaines optimisations du CLS peuvent aller à l’encontre de l’UX et doivent être évitées.&lt;/p&gt;
&lt;hr /&gt;
&lt;h3&gt;Support Navigateurs&lt;/h3&gt;
&lt;p&gt;En octobre 2018, Steve Kobes a annoncé que Blink (le moteur de rendu Chrome) avait &lt;a href=&quot;https://groups.google.com/a/chromium.org/forum/#!msg/blink-dev/jF1-M8KWAMU/ubGV4Fx2BgAJ&quot;&gt;l’intention d’implémenter&lt;/a&gt; une API faisant émerger cette information. Le travail sur le projet d’API &lt;span lang=&quot;en&quot;&gt;Layout Instability&lt;/span&gt; a commencé en mai 2019, et l’API a été publiée &lt;a href=&quot;https://www.chromestatus.com/feature/5110682739539968&quot;&gt;dans Chrome 77&lt;/a&gt; en septembre 2019. Daniel Holbert a créé &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1651528&quot;&gt;un ticket pour Firefox&lt;/a&gt; en juillet 2020. Nous n’avons trouvé aucune mention de l’API &lt;span lang=&quot;en&quot;&gt;Layout Instability&lt;/span&gt; parmi les tickets publics de Safari.&lt;/p&gt;
&lt;h2&gt;Resources&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://tests.boris.schapira.dev/cls/&quot;&gt;Mes propres expérimentations sur le &lt;span lang=&quot;en&quot;&gt;Cumulative Layout Shift&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;“&lt;a href=&quot;https://wicg.github.io/layout-instability/&quot; hreflang=&quot;en&quot; lang=&quot;en&quot;&gt;Layout Instability API specification&lt;/a&gt;”, par Steve Kobes, Nicolás Peña Moreno et Emily Hanley&lt;/li&gt;
&lt;li&gt;“&lt;a href=&quot;https://web.dev/cls/&quot; hreflang=&quot;en&quot; lang=&quot;en&quot;&gt;Cumulative Layout Shift&lt;/a&gt;”, par &lt;a href=&quot;https://twitter.com/philwalton&quot;&gt;Philip Walton&lt;/a&gt; et &lt;a href=&quot;https://twitter.com/bibydigital&quot;&gt;Milica Mihajlija&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;“&lt;a href=&quot;https://web.dev/optimize-cls/&quot; hreflang=&quot;en&quot; lang=&quot;en&quot;&gt;Optimize Cumulative Layout Shift&lt;/a&gt;”&lt;br&gt; et “&lt;a href=&quot;https://addyosmani.com/blog/infinite-scroll-without-layout-shifts/&quot; hreflang=&quot;en&quot; lang=&quot;en&quot;&gt;Infinite Scroll without Layout Shifts&lt;/a&gt;”, par &lt;a href=&quot;https://twitter.com/addyosmani&quot;&gt;Addy Osmani&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;“&lt;a href=&quot;https://tamethebots.com/blog-n-bits/web-perf-iv-a-new-hope&quot; hreflang=&quot;en&quot; lang=&quot;en&quot;&gt;Web Vitals - A New Hope in Web Performance Measurement&lt;/a&gt;”, par &lt;a href=&quot;https://twitter.com/davewsmart&quot;&gt;Dave Smart&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;em&gt;Merci à &lt;a href=&quot;https://twitter.com/DamienJubeau&quot;&gt;Damien Jubeau&lt;/a&gt; et &lt;a href=&quot;https://twitter.com/TheRealNooshu&quot;&gt;Matt Hobbs&lt;/a&gt; pour leurs contributions.&lt;/em&gt;&lt;/p&gt;

          &lt;hr&gt;
          &lt;div style=&quot;font-style:italic&quot;&gt;
              &lt;p&gt;
                  Vous êtes abonné·e au flux des articles&amp;nbsp;:
              &lt;/p&gt;
              &lt;ul&gt;
                  &lt;li&gt;de la catégorie&amp;nbsp;: Web&lt;/li&gt;
                  &lt;li&gt;rédigés en français.&lt;/li&gt;
              &lt;/ul&gt;
              
          &lt;/div&gt;
          
      </description>
      <pubDate>Tue, 15 Sep 2020 00:00:00 +0200</pubDate><link>https://boris.schapira.dev/notes/2020-09-cumulative-layout-shift-stabilite-page/</link>
      <guid isPermaLink="true">https://boris.schapira.dev/notes/2020-09-cumulative-layout-shift-stabilite-page/</guid>
      
      <category>Performance Web</category>
      
      <category>Metrics</category>
      
      <category>CLS</category>
      
      <category>web</category>
      
    </item>
    
    <item>
      <title>Punir la loyauté</title>
      
      <description>
          &lt;p&gt;Imaginons que vous déployiez, sur votre site, un outil de collecte du consentement lié à vos conditions générales d’utilisation (CGU). Ce consentement se découpe le plus généralement autour de différents usages : consentement à la télémétrie, consentement à la publicité, consentement à la transmission d’information à des tiers…&lt;/p&gt;
&lt;p&gt;Si vous souhaitez mesurer avec finesse l’impact de ces différents “niveaux de consentement” sur la Performance Web, alors il faut faire le tour de tous les cas d’usage, en fonction de la relation qu’entretient la personne concernée avec votre site.&lt;/p&gt;
&lt;p&gt;Pour mesurer les performances de ces cas d’utilisation, vous aurez besoin soit de mesures réelles, soit de solutions de surveillance synthétique. La plupart des outils ignoreront la bannière de cookies et testeront donc sans charger ces dépendances supplémentaires. Vous devrez donc configurer vos tests de manière à ce qu’ils commencent par une configuration spécifique (souvent un cookie) pour reproduire tous les cas d’utilisation :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Cette personne bloque le script de demande du consentement (via un adblocker, par exemple).&lt;/li&gt;
&lt;li&gt;Cette persone a donné son consentement à cette version des CGU.&lt;/li&gt;
&lt;li&gt;Cette personne a donné son consentement à une version antérieure des CGU, il est donc nécessaire de lui redemander son consentement.&lt;/li&gt;
&lt;li&gt;Cette personne a refusé son consentement à cette version des CGU.&lt;/li&gt;
&lt;li&gt;Cette personne a refusé son consentement à une version antérieure des CGU ; il peut être opportun de lui demander son consentement à nouveau.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Le cas numéro 3 peut donner lieu à une quantité importante de tests car il faudrait idéalement procéder à tes tests pour l’ensemble des combinaisons de consentements : “télémétrie”, “télémétrie + publicités”, “publicités seule”…&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Pour simplifier&lt;/strong&gt;, vous pouvez vous concentrer sur les deux tests les plus extrêmes :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;que se passe-t-il si la personne refuse ou ne donne pas son consentement ?&lt;/li&gt;
&lt;li&gt;que se passe-t-il si la personne a accepté l’ensemble des usages courants ?&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Très souvent, le second cas est bien plus lent et inutilisable que le premier, sans pour autant que ces personnes ne se voient offrir de nouvelles fonctionnalités compensant cette dégradation.&lt;/p&gt;
&lt;p&gt;L’occasion pour les Responsables Produit de réfléchir à l’éthique de ce type d’implémentation. Est-il normal que nous offrions &lt;strong&gt;l’expérience la plus dégradée à nos utilisateurs et utilisatrices les plus fidèles&lt;/strong&gt; ?&lt;/p&gt;
&lt;p&gt;Cette réflexion peut aboutir à une transformation de l’offre, soit vers un modèle où les utilisateurs et utilisatrices fidèles sont récompensé·es pour leur sacrifice (en ayant accès à des fonctionnalités qui ne sont disponibles que pour celles et ceux qui acceptent la collecte de données par des tiers), soit vers un modèle payant, plus protecteur mais moins accessible à tous.&lt;/p&gt;
&lt;p&gt;Philosophiquement, nous entrons alors dans des considérations très actuelles sur la vie privée en tant que capital ou en tant que commun. Un sujet fascinant.&lt;/p&gt;

          &lt;hr&gt;
          &lt;div style=&quot;font-style:italic&quot;&gt;
              &lt;p&gt;
                  Vous êtes abonné·e au flux des articles&amp;nbsp;:
              &lt;/p&gt;
              &lt;ul&gt;
                  &lt;li&gt;de la catégorie&amp;nbsp;: Web&lt;/li&gt;
                  &lt;li&gt;rédigés en français.&lt;/li&gt;
              &lt;/ul&gt;
              
          &lt;/div&gt;
          
      </description>
      <pubDate>Wed, 10 Jun 2020 00:00:00 +0200</pubDate><link>https://boris.schapira.dev/notes/2020-06-consentement-tests/</link>
      <guid isPermaLink="true">https://boris.schapira.dev/notes/2020-06-consentement-tests/</guid>
      
      <category>Performance Web</category>
      
      <category>RGPD</category>
      
      <category>web</category>
      
    </item>
    
    <item>
      <title>Priorités des chargements JavaScript dans Chrome</title>
      
      <description>
          &lt;p&gt;&lt;em&gt;Je relis et conseille souvent cet article d’Addy Osmani de &lt;strong&gt;février 2019&lt;/strong&gt; mais mes interlocuteurs et interlocutrices ne sont pas forcément anglophones. J’ai donc décidé de le traduire.&lt;/em&gt;&lt;/p&gt;
&lt;div class=&quot;emphasis&quot;&gt;
&lt;strong&gt;Retrouvez l&apos;original sur le blog d&apos;Addy Osmani&amp;nbsp;:&lt;/strong&gt; &lt;a href=&quot;https://addyosmani.com/blog/script-priorities/&quot; hreflang=&quot;en&quot; lang=&quot;en&quot;&gt;JavaScript Loading Priorities in Chrome&lt;/a&gt;.
&lt;/div&gt;
&lt;p&gt;La façon dont les navigateurs ordonnancent et exécutent les scripts peut avoir un impact sur les performances des pages web. Si des techniques comme &lt;code&gt;&amp;lt;script defer&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;link rel=preload&amp;gt;&lt;/code&gt; (et d’autres) influencent le chargement des scripts, il peut également être utile de savoir comment les navigateurs les interprètent. Grâce à Kouhei Ueno, nous disposons maintenant d’un résumé actualisé de la manière dont les scripts sont ordonnancés dans Chrome.&lt;/p&gt;
&lt;table class=&quot;responsive&quot;&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;/td&gt;
      &lt;td&gt;
        &lt;strong
          &gt;Priorité de chargement (network/Blink)&lt;/strong
        &gt;
      &lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;Priorité d&apos;exécution&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;Comment l&apos;utiliser ?&lt;/strong&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td class=&quot;heading&quot;&gt;
        &lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt; dans &lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&gt;
      &lt;/td&gt;
      &lt;td data-label=&quot;Priorité de chargement (network/Blink)&quot; class=&quot;medium&quot;&gt;Moyenne/Haute&lt;/td&gt;
      &lt;td data-label=&quot;Priorité d&apos;exécution&quot; class=&quot;veryhigh&quot;&gt;
        Très Haute -&lt;br&gt;
        Interrompt l&apos;analyse
      &lt;/td&gt;
      &lt;td data-label=&quot;Comment l&apos;utiliser ?&quot;&gt;
        &lt;ul&gt;
          &lt;li&gt;
            Scripts ayant une incidence sur le rendu du
            &lt;a
              href=&quot;https://developers.google.com/web/fundamentals/performance/user-centric-performance-metrics#first_meaningful_paint_and_hero_element_timing&quot; hreflang=&quot;en&quot; lang=&quot;en&quot;
              &gt;First Meaningful Paint&lt;/a
            &gt;
            (FMP) /
            &lt;a
              href=&quot;https://developers.google.com/web/fundamentals/performance/user-centric-performance-metrics#first_paint_and_first_contentful_paint&quot; hreflang=&quot;en&quot; lang=&quot;en&quot;
              &gt;First Contentful Paint&lt;/a
            &gt;
            (FCP) content
          &lt;/li&gt;
          &lt;li&gt;
            Scripts devant être exécutés avant d&apos;autres scripts 
            &lt;br&gt;&lt;br&gt;
            &lt;strong&gt;Exemples&amp;nbsp;:&lt;/strong&gt;
            &lt;ul&gt;
              &lt;li&gt;
                Runtime de Framework (s&apos;il n&apos;y a pas de 
                &lt;a
                  href=&quot;https://developers.google.com/web/updates/2019/02/rendering-on-the-web&quot; hreflang=&quot;en&quot;
                  &gt;rendu statique&lt;/a
                &gt;)
              &lt;/li&gt;
              &lt;li&gt;Polyfills&lt;/li&gt;
              &lt;li&gt;Tests A/B qui modifient la structure du DOM de l&apos;ensemble de la page&lt;/li&gt;
            &lt;/ul&gt;
          &lt;/li&gt;
        &lt;/ul&gt;
      &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td class=&quot;heading&quot;&gt;
        astuce &lt;code&gt;&amp;lt;link rel=preload&amp;gt;&lt;/code&gt; +&lt;br&gt;
        &lt;code&gt;&amp;lt;script async&amp;gt;&lt;/code&gt;
        &lt;br&gt;
          &lt;em&gt;ou&lt;/em&gt;
        &lt;br&gt;
          &lt;code&gt;&amp;lt;script type=module async&amp;gt;&lt;/code&gt;
      &lt;/td&gt;
      &lt;td data-label=&quot;Priorité de chargement (network/Blink)&quot; class=&quot;medium&quot;&gt;Moyenne/Haute&lt;/td&gt;
      &lt;td data-label=&quot;Priorité d&apos;exécution&quot; class=&quot;high&quot;&gt;
        Haute -&lt;br&gt;
        Interrompt l&apos;analyse
      &lt;/td&gt;
      &lt;td data-label=&quot;Comment l&apos;utiliser ?&quot;&gt;
        &lt;ul&gt;
          &lt;li&gt;
            Scripts qui produisent un contenu critique (requis pour le FMP)
            &lt;ul&gt;
              &lt;li&gt;Mais ne devraient pas affecter la mise en page au-dessus de la ligne de flottaison&lt;/li&gt;
              &lt;li&gt;
                Scripts qui déclenchent des requêtes réseau pour injecter dynamiquement du contenu
              &lt;/li&gt;
              &lt;li&gt;
                Scripts devant être exécutés dès que leurs dépendances sont téléchargées, utilisez &lt;code&gt;&amp;lt;script async type=module&amp;gt;&lt;/code&gt;
                &lt;br&gt;&lt;br&gt;
                &lt;strong&gt;Exemples&amp;nbsp;:&lt;/strong&gt;
                &lt;ul&gt;
                  &lt;li&gt;Dessiner quelque chose dans un &lt;code&gt;&amp;lt;canvas&amp;gt;&lt;/code&gt;&lt;/li&gt;
                &lt;/ul&gt;
              &lt;/li&gt;
            &lt;/ul&gt;
          &lt;/li&gt;
        &lt;/ul&gt;
      &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td class=&quot;heading&quot;&gt;&lt;code&gt;&amp;lt;script async&amp;gt;&lt;/code&gt;&lt;/td&gt;
      &lt;td data-label=&quot;Priorité de chargement (network/Blink)&quot; class=&quot;low&quot;&gt;La plus basse/Basse&lt;/td&gt;
      &lt;td data-label=&quot;Priorité d&apos;exécution&quot; class=&quot;high&quot;&gt;
        Haute -&lt;br&gt;
        Interrompt l&apos;analyse
      &lt;/td&gt;
      &lt;td data-label=&quot;Comment l&apos;utiliser ?&quot;&gt;
        &lt;p&gt;Faites
        &lt;a href=&quot;https://calendar.perfplanet.com/2016/prefer-defer-over-async/&quot;
          &gt;attention&lt;/a
        &gt;
        lorsque vous utilisez &lt;code&gt;&amp;lt;script async&amp;gt;&lt;/code&gt;. De nos jours, il est souvent utilisé pour indiquer des scripts non-critiques mais ce n&apos;est pas cohérent car même si le script est chargé en basse priorité, il est exécuté en haute priorité.&lt;/p&gt;
        &lt;p&gt;&lt;em&gt;NdBoris : la attributes ne sont pas cumulatifs. Un script &lt;code&gt;&amp;lt;script async defer&amp;gt;&lt;/code&gt; sera perçu par le navigateur comme un &lt;code&gt;&amp;lt;script async&amp;gt;&lt;/code&gt; partout où &lt;code&gt;async&lt;/code&gt; est supporté (c&apos;est-à-dire… &lt;a href=&quot;https://caniuse.com/script-async&quot; title=&quot;Support de l&apos;attribut async pour les scripts externes sur CanIUse.com&quot;&gt;quasiment partout&lt;/a&gt;). La navigateur ne supportant pas &lt;code&gt;async&lt;/code&gt; le considéreront comme un &lt;code&gt;&amp;lt;script defer&amp;gt;&lt;/code&gt;.&lt;/em&gt;&lt;/p&gt;
      &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td class=&quot;heading&quot;&gt;&lt;code&gt;&amp;lt;script defer&amp;gt;&lt;/code&gt;&lt;/td&gt;
      &lt;td data-label=&quot;Priorité de chargement (network/Blink)&quot; class=&quot;low&quot;&gt;La plus basse/Basse&lt;/td&gt;
      &lt;td data-label=&quot;Priorité d&apos;exécution&quot; class=&quot;lowest&quot;&gt;
        Très basse -&lt;br&gt;
        S&apos;exécute après les &lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt;s en fin de
        &lt;code&gt;&amp;lt;body&amp;gt;&lt;/code&gt;
      &lt;/td&gt;
      &lt;td data-label=&quot;Comment l&apos;utiliser ?&quot;&gt;
        &lt;ul&gt;
          &lt;li&gt;Scripts qui génèrent du contenu non-critique&lt;/li&gt;
          &lt;li&gt;
            Scripts qui fournissent des fonctionnalités critiques que &amp;gt;50% de sessions de pages utiliseront
            &lt;br&gt;&lt;br&gt;
            &lt;strong&gt;Exemples&amp;nbsp;:&lt;/strong&gt;
            &lt;ul&gt;
              &lt;li&gt;Frameworks publicitaires&lt;/li&gt;
              &lt;li&gt;
                Runtime de Framework (rendu
                &lt;a
                  href=&quot;https://developers.google.com/web/updates/2019/02/rendering-on-the-web#csr&quot; hreflang=&quot;en&quot;
                  &gt;côté client&lt;/a
                &gt;
                comme
                &lt;a
                  href=&quot;https://developers.google.com/web/updates/2019/02/rendering-on-the-web#server-rendering&quot; hreflang=&quot;en&quot;
                  &gt;côté serveur&lt;/a
                &gt;)
              &lt;/li&gt;
            &lt;/ul&gt;
          &lt;/li&gt;
        &lt;/ul&gt;
      &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td class=&quot;heading&quot;&gt;
        &lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt; en fin de &lt;code&gt;&amp;lt;body&amp;gt;&lt;/code&gt;
      &lt;/td&gt;
      &lt;td data-label=&quot;Priorité de chargement (network/Blink)&quot; class=&quot;medium&quot;&gt;Moyenne/Haute&lt;/td&gt;
      &lt;td data-label=&quot;Priorité d&apos;exécution&quot; class=&quot;low&quot;&gt;
        Basse -&lt;br&gt;
        Attend la fin de l&apos;analyse
      &lt;/td&gt;
      &lt;td data-label=&quot;Comment l&apos;utiliser ?&quot;&gt;
        Attention, quand vous utilisez &lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt; à la fin de 
        &lt;code&gt;&amp;lt;body&amp;gt;&lt;/code&gt; et que vous pensez définir une priorité basse. Ces scripts sont ordonnancés avec une priorité Moyenne/Haute.
      &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td class=&quot;heading&quot;&gt;
        &lt;code&gt;&amp;lt;script defer&amp;gt;&lt;/code&gt; en fin de
        &lt;code&gt;&amp;lt;body&amp;gt;&lt;/code&gt;
      &lt;/td&gt;
      &lt;td data-label=&quot;Priorité de chargement (network/Blink)&quot; class=&quot;lowest&quot;&gt;
        La plus basse/Basse -&lt;br&gt;
        fin de queue
      &lt;/td&gt;
      &lt;td data-label=&quot;Priorité d&apos;exécution&quot; class=&quot;lowest&quot;&gt;
        Très basse -&lt;br&gt;
        S&apos;exécute après les &lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt;s en fin de
        &lt;code&gt;&amp;lt;body&amp;gt;&lt;/code&gt;
      &lt;/td&gt;
      &lt;td data-label=&quot;Comment l&apos;utiliser ?&quot;&gt;
        &lt;ul&gt;
          &lt;li&gt;
            Scripts offrant des fonctionnalités interactives utilisées occasionnellement
            &lt;br&gt;&lt;br&gt;
            &lt;strong&gt;Exemples&amp;nbsp;:&lt;/strong&gt;
            &lt;ul&gt;
              &lt;li&gt;Chargement des &quot;Articles connexes&quot;&lt;/li&gt;
              &lt;li&gt;Fonctionnalité &quot;Votre avis nous intéresse&quot;&lt;/li&gt;
            &lt;/ul&gt;
          &lt;/li&gt;
        &lt;/ul&gt;
      &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;
        &lt;code&gt;&amp;lt;link rel=prefetch&amp;gt;&lt;/code&gt; + &lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt; lors d&apos;une navigation vers la page suivante
      &lt;/td&gt;
      &lt;td data-label=&quot;Priorité de chargement (network/Blink)&quot; class=&quot;lowest&quot;&gt;Inactive / La plus basse&lt;/td&gt;
      &lt;td data-label=&quot;Priorité d&apos;exécution&quot; class=&quot;medium&quot;&gt;Dépend du moment et de la manière dont le script est consommé.&lt;/td&gt;
      &lt;td data-label=&quot;Comment l&apos;utiliser ?&quot;&gt;
        Des scripts très susceptibles d&apos;apporter des fonctionnalités importantes à une page visitée ultérieurement.
        &lt;br&gt;&lt;br&gt;
        &lt;strong&gt;Exemples&amp;nbsp;:&lt;/strong&gt;
        &lt;ul&gt;
          &lt;li&gt;Bundle JavaScript d&apos;une future route&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Note : Les priorités de chargement ne sont pas nécessairement cohérentes d’un navigateur à l’autre. Utilisez donc ces connaissances à bon escient et mesurez-les en cas de doute. Dans l’idéal, cherchez à offrir une expérience de qualité au plus grand nombre d’utilisateurs possible.&lt;/p&gt;
&lt;p&gt;Si vous êtes un développeur ou une développeuse web et que vous vous demandez où vous pouvez voir la “Priorité de chargement”, Chrome DevTools a une colonne “Priorité” optionnelle disponible dans le panneau Réseau. Cliquez avec le bouton droit de la souris sur les en-têtes de colonne et vous pourrez l’activer :&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_320/https://boris.schapira.dev/assets/images/2020-06-04/illustration.png&quot; srcset=&quot;https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_320/https://boris.schapira.dev/assets/images/2020-06-04/illustration.png 320w,
https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_640/https://boris.schapira.dev/assets/images/2020-06-04/illustration.png 640w,
https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_960/https://boris.schapira.dev/assets/images/2020-06-04/illustration.png 960w,
https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_1280/https://boris.schapira.dev/assets/images/2020-06-04/illustration.png 1280w,
https://res.cloudinary.com/borisschapira/image/fetch/c_limit,f_auto,q_auto,w_1600/https://boris.schapira.dev/assets/images/2020-06-04/illustration.png 1600w&quot; sizes=&quot;80vw&quot;   alt=&quot;Une capture des outils DevTools ouverts sur Walmart.com, onglet Réseau. On y voit un script de polyfill et un script de header en priorité haute, et un script de footer en priorité basse.&quot; loading=&quot;lazy&quot; width=&quot;2000&quot; height=&quot;1165&quot; crossorigin=&quot;anonymous&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Cette &lt;a href=&quot;/assets/images/2020-06-04/synthese.png&quot;&gt;synthèse&lt;/a&gt; des priorités ci-dessus est toujours valable en février 2019. Je souhaiterais personnellement avoir une meilleure compréhension des priorités de chargement dans d’autres navigateurs également. J’espère que cet aperçu sera utile à quelqu’un·e d’autre !&lt;/p&gt;
&lt;p&gt;Merci à Kouhei, Dom Faralino, Pat Meenan, Kenji Baheux et Yoav Weiss pour leurs contributions permettant de mieux expliquer la pile réseau de Chrome.&lt;/p&gt;
&lt;h2&gt;En savoir plus&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://bit.ly/script-scheduling&quot; hreflang=&quot;en&quot; lang=&quot;en&quot;&gt;Scheduling Scripts Intuitively and Performantly&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.google.com/document/d/1bCDuq9H1ih9iNjgzyAL0gpwNFiEP4TZS-YLRp_RuMlc/edit#&quot; hreflang=&quot;en&quot; lang=&quot;en&quot;&gt;Chrome Resource Priorities and Scheduling&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://medium.com/reloading/preload-prefetch-and-priorities-in-chrome-776165961bbf&quot; hreflang=&quot;en&quot; lang=&quot;en&quot;&gt;Preload, Prefetch And Priorities in Chrome&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://twitter.com/yoavweiss/status/1096075414697639936&quot; hreflang=&quot;en&quot; lang=&quot;en&quot;&gt;Priorities for rel=preload in Chrome and WebKit&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;em&gt;[Note de Boris] Et j’ajoute mes propres articles, en français&lt;/em&gt; :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;/notes/2020-05-preload-prefetch-et-preconnect-resource-hints/&quot;&gt;Preload, Prefetch et Preconnect : accélerez votre site avec les Resource Hints&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/notes/2020-05-optimiser-parties-tierces/&quot;&gt;Comment optimiser les performance de vos parties tierces&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/notes/2017-12-comment-differer-l-execution-d-un-script/&quot;&gt;Comment différer l’exécution d’un script ?&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

          &lt;hr&gt;
          &lt;div style=&quot;font-style:italic&quot;&gt;
              &lt;p&gt;
                  Vous êtes abonné·e au flux des articles&amp;nbsp;:
              &lt;/p&gt;
              &lt;ul&gt;
                  &lt;li&gt;de la catégorie&amp;nbsp;: Web&lt;/li&gt;
                  &lt;li&gt;rédigés en français.&lt;/li&gt;
              &lt;/ul&gt;
              
          &lt;/div&gt;
          
      </description>
      <pubDate>Thu, 04 Jun 2020 00:00:00 +0200</pubDate><link>https://boris.schapira.dev/notes/2020-06-priorites-js/</link>
      <guid isPermaLink="true">https://boris.schapira.dev/notes/2020-06-priorites-js/</guid>
      
      <category>Performance Web</category>
      
      <category>JavaScript</category>
      
      <category>web</category>
      
    </item>
    
    <item>
      <title>Maîtrise de soi</title>
      
      <description>
          &lt;p&gt;Parfois, j’écris un tweet ou un billet de blog et je le supprime.&lt;br /&gt;
Parce que le monde n’en a pas besoin.&lt;br /&gt;
Parce que ça peut faire du mal à certaines personnes.&lt;br /&gt;
Parce qu’il y a d’autres moyens.&lt;br /&gt;
Parce que je peux vivre sans le publier&lt;br /&gt;
et que mon public mérite que je ne le fasse pas.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;S’il vous plait, faites de même avec votre JavaScript.&lt;/strong&gt;&lt;/p&gt;

          &lt;hr&gt;
          &lt;div style=&quot;font-style:italic&quot;&gt;
              &lt;p&gt;
                  Vous êtes abonné·e au flux des articles&amp;nbsp;:
              &lt;/p&gt;
              &lt;ul&gt;
                  &lt;li&gt;de la catégorie&amp;nbsp;: Web&lt;/li&gt;
                  &lt;li&gt;rédigés en français.&lt;/li&gt;
              &lt;/ul&gt;
              
          &lt;/div&gt;
          
      </description>
      <pubDate>Tue, 02 Jun 2020 00:00:00 +0200</pubDate><link>https://boris.schapira.dev/notes/2020-06-maitrise-de-soi/</link>
      <guid isPermaLink="true">https://boris.schapira.dev/notes/2020-06-maitrise-de-soi/</guid>
      
      <category>Performance Web</category>
      
      <category>JavaScript</category>
      
      <category>web</category>
      
    </item>
    
  </channel>
</rss>
