{"id":31507,"date":"2025-11-30T13:13:34","date_gmt":"2025-11-30T13:13:34","guid":{"rendered":"https:\/\/www.dotcom-monitor.com\/blog\/browser-monitoring-for-modern-web-apps\/"},"modified":"2026-08-21T23:31:13","modified_gmt":"2026-08-21T23:31:13","slug":"browser-monitoring-for-modern-web-apps","status":"publish","type":"post","link":"https:\/\/www.dotcom-monitor.com\/blog\/fr\/browser-monitoring-for-modern-web-apps\/","title":{"rendered":"Surveillance du navigateur pour les applications web modernes : SPA et API"},"content":{"rendered":"<figure id=\"attachment_34416\" aria-describedby=\"caption-attachment-34416\" style=\"width: 1200px\" class=\"wp-caption alignnone\"><img fetchpriority=\"high\" decoding=\"async\" class=\"size-full wp-image-34416\" src=\"https:\/\/www.dotcom-monitor.com\/blog\/wp-content\/uploads\/sites\/3\/2025\/11\/hero-browser-monitoring-for-modern-web-apps.webp\" alt=\"Illustration d&apos;une application monopage dans une fen\u00eatre de navigateur connect\u00e9e \u00e0 des n\u0153uds de service API, avec une loupe repr\u00e9sentant la surveillance du navigateur\" width=\"1200\" height=\"800\" srcset=\"https:\/\/www.dotcom-monitor.com\/blog\/wp-content\/uploads\/sites\/3\/2025\/11\/hero-browser-monitoring-for-modern-web-apps.webp 1200w, https:\/\/www.dotcom-monitor.com\/blog\/wp-content\/uploads\/sites\/3\/2025\/11\/hero-browser-monitoring-for-modern-web-apps-300x200.webp 300w, https:\/\/www.dotcom-monitor.com\/blog\/wp-content\/uploads\/sites\/3\/2025\/11\/hero-browser-monitoring-for-modern-web-apps-1024x683.webp 1024w, https:\/\/www.dotcom-monitor.com\/blog\/wp-content\/uploads\/sites\/3\/2025\/11\/hero-browser-monitoring-for-modern-web-apps-768x512.webp 768w\" sizes=\"(max-width: 1200px) 100vw, 1200px\" \/><figcaption id=\"caption-attachment-34416\" class=\"wp-caption-text\">Dans une application web moderne, l&#8217;exp\u00e9rience est assembl\u00e9e dans le navigateur \u00e0 partir de composants et d&#8217;appels API, et c&#8217;est l\u00e0 que la surveillance doit avoir lieu.<\/figcaption><\/figure>\n<p>Votre v\u00e9rification de disponibilit\u00e9 indique que l&#8217;application fonctionne bien. Le serveur a r\u00e9pondu avec un 200 en moins d&#8217;une demi-seconde, le HTML est arriv\u00e9, la v\u00e9rification est pass\u00e9e au vert. Pendant ce temps, un utilisateur regarde un indicateur de chargement, car le bundle JavaScript a rendu la coque de l&#8217;application puis un API de commandes lent a laiss\u00e9 la vue principale vide. Rien dans votre surveillance ne l&#8217;a d\u00e9tect\u00e9, parce qu&#8217;aucune de vos surveillances n&#8217;ex\u00e9cute un navigateur.<\/p>\n<p>Ce foss\u00e9 est le probl\u00e8me cl\u00e9 de la surveillance des applications web modernes. Les applications monopages (SPA) construites avec React, Vue ou Angular ne livrent presque rien dans le HTML initial. L&#8217;exp\u00e9rience que les utilisateurs obtiennent r\u00e9ellement est assembl\u00e9e c\u00f4t\u00e9 client : le JavaScript initialise le framework, le routage c\u00f4t\u00e9 client \u00e9change les vues sans recharger la page, et une douzaine d&#8217;appels API remplissent le contenu. Chacune de ces \u00e9tapes peut \u00e9chouer ou ralentir tandis qu&#8217;une v\u00e9rification HTTP rapporte une sant\u00e9 parfaite.<\/p>\n<p>Ce guide couvre ce que signifie la surveillance navigateur pour les architectures SPA, pourquoi les contr\u00f4les traditionnels manquent les \u00e9checs importants, les m\u00e9triques \u00e0 suivre, et une configuration \u00e9tape par \u00e9tape pour une surveillance SPA qui d\u00e9tecte les probl\u00e8mes avant que les utilisateurs ne les signalent.<\/p>\n<h2 id='ce-que-signifie-la-surveillance-navigateur-pour-les-applications-web-modernes'  id=\"boomdevs_1\" id=\"what-browser-monitoring-means-for-modern-web-apps\">Ce que signifie la surveillance navigateur pour les applications web modernes<\/h2>\n<p>La surveillance navigateur consiste \u00e0 tester une application web en la chargeant et en la pilotant dans un vrai navigateur \u00e0 intervalles r\u00e9guliers, depuis des emplacements contr\u00f4l\u00e9s, et en mesurant ce qui est r\u00e9ellement rendu. Au lieu de demander \u00ab le serveur a-t-il r\u00e9pondu \u00bb, elle r\u00e9pond \u00e0 la seule question qui importe aux utilisateurs : la page est-elle devenue utilisable, et \u00e0 quelle vitesse ?<\/p>\n<p>Cette distinction est importante \u00e0 cause de la r\u00e9partition du travail dans une application moderne. Dans un site rendu c\u00f4t\u00e9 serveur, la r\u00e9ponse envoy\u00e9e par le serveur constitue en grande partie l&#8217;exp\u00e9rience, donc v\u00e9rifier la r\u00e9ponse \u00e9quivaut \u00e0 v\u00e9rifier l&#8217;exp\u00e9rience. Dans une SPA, le serveur livre surtout une structure : un document HTML quasiment vide plus des balises de script. L&#8217;analyse, l&#8217;initialisation du framework, la r\u00e9solution des routes, la r\u00e9cup\u00e9ration des donn\u00e9es et le rendu ont lieu dans le navigateur. Une v\u00e9rification HTTP valide la structure. Une v\u00e9rification en vrai navigateur valide l&#8217;application. C&#8217;est la principale raison pour laquelle <a href=\"https:\/\/www.dotcom-monitor.com\/blog\/fr\/pourquoi-la-surveillance-traditionnelle-ne-suffit-pas-pour-les-applications-web-modernes\/\">la surveillance traditionnelle n&#8217;est pas suffisante pour les applications web modernes<\/a>.<\/p>\n<p>Sous forme synth\u00e9tique, la surveillance navigateur pilote des sessions script\u00e9es \u00e0 travers l&#8217;application suivant un planning : charger le tableau de bord, se connecter, faire une recherche, ajouter au panier, passer la commande. Chaque ex\u00e9cution capture les temps de chaque \u00e9tape, une cascade de chaque requ\u00eate effectu\u00e9e par la page, un enregistrement des \u00e9checs et leur emplacement, ainsi que les erreurs du console du navigateur. Lorsqu&#8217;une ex\u00e9cution \u00e9choue, vous savez quelle \u00e9tape a cass\u00e9, quelle requ\u00eate est en cause, et ce que l&#8217;utilisateur aurait vu. L&#8217;affirmation utile n&#8217;est pas qu&#8217;un bouton \u00e9tait cliquable, mais que le num\u00e9ro de confirmation de commande s&#8217;est affich\u00e9, que le rapport sauvegard\u00e9 est apparu dans la liste, que la modification des permissions a pris effet. La surveillance navigateur m\u00e9rite son co\u00fbt lorsqu&#8217;elle valide l&#8217;\u00e9tat, pas seulement les \u00e9crans.<\/p>\n<h2 id='pourquoi-les-applications-monopages-cassent-la-surveillance-traditionnelle'  id=\"boomdevs_2\" id=\"why-single-page-apps-break-traditional-monitoring\">Pourquoi les applications monopages cassent la surveillance traditionnelle<\/h2>\n<p>Trois caract\u00e9ristiques architecturales des SPA causent la plupart des angles morts de la surveillance : une charge initiale qui ne contient pas de contenu, une navigation qui ne touche jamais le serveur, et une couche de rendu qui s\u00e9pare \u00ab la requ\u00eate termin\u00e9e \u00bb de \u00ab ce que l&#8217;utilisateur voit \u00bb. Chacune d&#8217;elles invalide une hypoth\u00e8se sur laquelle s&#8217;appuient les outils traditionnels.<\/p>\n<h3 id='le-premier-rendu-first-paint-est-une-illusion'  id=\"boomdevs_3\" id=\"the-first-paint-is-a-bluff\">Le premier rendu (First Paint) est une illusion<\/h3>\n<p>Chargez une application React ou Vue, et le navigateur d\u00e9clenche DOMContentLoaded presque imm\u00e9diatement, car le document est minuscule. \u00c0 ce moment, l&#8217;utilisateur ne voit presque rien. Le framework doit encore t\u00e9l\u00e9charger et ex\u00e9cuter le bundle, monter l&#8217;arborescence des composants, r\u00e9cup\u00e9rer les donn\u00e9es, et rendre. Toute m\u00e9trique li\u00e9e aux \u00e9v\u00e9nements de chargement du document proclame victoire bien avant que l&#8217;application puisse accepter un clic. L&#8217;\u00e9cart entre le \u00ab charg\u00e9 \u00bb tel que d\u00e9fini par le navigateur et \u00ab utilisable \u00bb tel que d\u00e9fini par un humain est exactement l\u00e0 o\u00f9 la surveillance SPA doit op\u00e9rer. Les loaders (chargeurs) en squelette aggravent l&#8217;illusion : les bo\u00eetes gris clair peuvent donner un excellent score de Largest Contentful Paint pendant que la r\u00e9cup\u00e9ration des donn\u00e9es qui rend la vue utilisable n&#8217;a m\u00eame pas commenc\u00e9, si bien que l&#8217;application semble rapide mais est fonctionnellement morte. La vraie question n&#8217;est pas quand le navigateur a peint, mais quand la route disposait de suffisamment de donn\u00e9es sp\u00e9cifiques \u00e0 l&#8217;utilisateur pour \u00eatre utile.<\/p>\n<h3 id='le-routage-c\u00f4t\u00e9-client-rend-la-navigation-invisible'  id=\"boomdevs_4\" id=\"client-side-routing-makes-navigation-invisible\">Le routage c\u00f4t\u00e9 client rend la navigation invisible<\/h3>\n<p>Quand un utilisateur clique d&#8217;une liste de produits vers une vue d\u00e9taill\u00e9e de produit, il n&#8217;y a pas de navigation au sens r\u00e9seau. Le routeur intercepte le clic, r\u00e9\u00e9crit l&#8217;URL via l&#8217;API History, et \u00e9change les composants sur place, un mod\u00e8le connu sous le nom de navigation douce (soft navigation). Le navigateur n&#8217;enregistre ni chargement de page ni mesure de navigation. La surveillance qui compte les chargements de page voit un utilisateur qui est arriv\u00e9 une fois et n&#8217;a rien fait, et ne remarquera jamais que la route de paiement met neuf secondes \u00e0 s&#8217;afficher. La m\u00eame c\u00e9cit\u00e9 corrompt les analyses : un utilisateur qui regarde dix produits dans une SPA peut enregistrer un rebond sur une seule page dans tout outil qui ne compte que les chargements complets de page. Les transitions de route doivent \u00eatre mesur\u00e9es d\u00e9lib\u00e9r\u00e9ment, du clic qui les a d\u00e9clench\u00e9es au moment o\u00f9 le nouveau contenu de la vue est affich\u00e9. La mani\u00e8re de proc\u00e9der varie selon <a href=\"https:\/\/www.dotcom-monitor.com\/blog\/fr\/monitoring-client-side-routing-frameworks-spa-csr-ssr-hybrid\/\">l&#8217;architecture de routage et de rendu<\/a> : le rendu purement c\u00f4t\u00e9 client, le rendu c\u00f4t\u00e9 serveur avec hydratation, et les configurations hybrides d\u00e9placent chacune \u00e0 leur fa\u00e7on le lieu o\u00f9 se cache le d\u00e9lai.<\/p>\n<h3 id='la-couche-de-rendu-s\u00e9pare-les-r\u00e9ponses-de-ce-que-voient-les-utilisateurs'  id=\"boomdevs_5\" id=\"the-render-layer-separates-responses-from-what-users-see\">La couche de rendu s\u00e9pare les r\u00e9ponses de ce que voient les utilisateurs<\/h3>\n<p>Les frameworks placent une couche de rendu entre une r\u00e9ponse r\u00e9ussie et l&#8217;interface visible : React et Vue r\u00e9concilient la sortie des composants avant de valider les mises \u00e0 jour du DOM, tandis que la d\u00e9tection de changement d&#8217;Angular d\u00e9cide quand les donn\u00e9es li\u00e9es atteignent le template. Le contenu peut appara\u00eetre un instant apr\u00e8s l&#8217;arriv\u00e9e de la r\u00e9ponse API, ou ne jamais appara\u00eetre, si une erreur de rendu est absorb\u00e9e par une boundary d&#8217;erreur. Pour la surveillance, cela signifie qu&#8217;une r\u00e9ponse API propre prouve tr\u00e8s peu : le point de terminaison peut retourner un JSON parfait alors que le composant qui l&#8217;affiche \u00e9choue silencieusement. Les contr\u00f4les doivent valider le rendu, pas les codes de r\u00e9ponse. La couche de rendu punit aussi les scripts fragiles : les biblioth\u00e8ques CSS-in-JS g\u00e9n\u00e8rent des noms de classe hach\u00e9s qui changent entre les builds, donc une v\u00e9rification qui les cible casse \u00e0 chaque d\u00e9ploiement. Des rep\u00e8res stables comme les attributs <code>data-testid<\/code> ou les r\u00f4les ARIA sont ce qui maintient la maintenabilit\u00e9 des contr\u00f4les navigateur.<\/p>\n<figure id=\"attachment_34423\" aria-describedby=\"caption-attachment-34423\" style=\"width: 1200px\" class=\"wp-caption alignnone\"><img decoding=\"async\" class=\"size-full wp-image-34423\" src=\"https:\/\/www.dotcom-monitor.com\/blog\/wp-content\/uploads\/sites\/3\/2025\/11\/page-load-vs-spa-soft-navigation.webp\" alt=\"Diagramme comparant un chargement complet de page traditionnel avec une navigation douce SPA o\u00f9 seuls des composants individuels sont mis \u00e0 jour via des appels API\" width=\"1200\" height=\"800\" srcset=\"https:\/\/www.dotcom-monitor.com\/blog\/wp-content\/uploads\/sites\/3\/2025\/11\/page-load-vs-spa-soft-navigation.webp 1200w, https:\/\/www.dotcom-monitor.com\/blog\/wp-content\/uploads\/sites\/3\/2025\/11\/page-load-vs-spa-soft-navigation-300x200.webp 300w, https:\/\/www.dotcom-monitor.com\/blog\/wp-content\/uploads\/sites\/3\/2025\/11\/page-load-vs-spa-soft-navigation-1024x683.webp 1024w, https:\/\/www.dotcom-monitor.com\/blog\/wp-content\/uploads\/sites\/3\/2025\/11\/page-load-vs-spa-soft-navigation-768x512.webp 768w\" sizes=\"(max-width: 1200px) 100vw, 1200px\" \/><figcaption id=\"caption-attachment-34423\" class=\"wp-caption-text\">Une navigation traditionnelle remplace toute la page ; une navigation douce SPA met \u00e0 jour les composants sur place, nourris par des appels API que le navigateur ne signale jamais comme un chargement de page.<\/figcaption><\/figure>\n<h2 id='modes-d-\u00e9chec-sp\u00e9cifiques-aux-frameworks-react-vue-et-angular'  id=\"boomdevs_6\" id=\"framework-specific-failure-modes-in-react-vue-and-angular\">Modes d&#8217;\u00e9chec sp\u00e9cifiques aux frameworks React, Vue et Angular<\/h2>\n<p>Les trois grands frameworks partagent ces angles morts mais \u00e9chouent dans leurs propres dialectes, et la surveillance est plus efficace quand elle sait \u00e0 quelle application elle s&#8217;adresse.<\/p>\n<ul>\n<li><strong>React.<\/strong> Les boundaries d&#8217;erreur sont con\u00e7ues pour remplacer un composant plant\u00e9 par une interface de secours, ce qui maintient l&#8217;application en vie mais cache aussi l&#8217;\u00e9chec : pas de requ\u00eate \u00e9chou\u00e9e, pas de page blanche, juste une vue qui a silencieusement perdu une fonctionnalit\u00e9. Les routes charg\u00e9es paresseusement ajoutent un second pi\u00e8ge, car un import dynamique rat\u00e9 peut bloquer une route sur son \u00e9tat de chargement. Les assertions de contenu capturent les deux ; les codes d&#8217;\u00e9tat n&#8217;en capturent aucun. Les <a href=\"https:\/\/www.dotcom-monitor.com\/blog\/fr\/defis-suivi-des-applications-reactjs\/\">d\u00e9fis de la surveillance des applications React<\/a> m\u00e9ritent leur propre liste de contr\u00f4le.<\/li>\n<li><strong>Vue.<\/strong> Le syst\u00e8me r\u00e9actif de Vue suit les d\u00e9pendances automatiquement, et des objets r\u00e9actifs profond\u00e9ment imbriqu\u00e9s ou de longues cha\u00eenes d&#8217;observateurs peuvent faire que un petit changement d&#8217;\u00e9tat se propage en cascade. Le sympt\u00f4me est une interaction lente, pas une erreur, c&#8217;est pourquoi <a href=\"https:\/\/www.dotcom-monitor.com\/blog\/fr\/suivi-des-applications-ecrites-a-vue-js\/\">la surveillance des applications Vue.js<\/a> s&#8217;appuie sur le timing des interactions plut\u00f4t que sur le nombre d&#8217;erreurs.<\/li>\n<li><strong>Angular.<\/strong> Zone.js d\u00e9clenche la d\u00e9tection de changements \u00e0 travers l&#8217;arborescence des composants apr\u00e8s les \u00e9v\u00e9nements, donc des templates lourds ou des liens non optimis\u00e9s ralentissent chaque interaction un peu, plut\u00f4t que de faire \u00e9chouer une requ\u00eate unique. Surveillez les tendances de latence des interactions, pas seulement les r\u00e9sultats pass\/fail.<\/li>\n<\/ul>\n<p>Le fil commun : les probl\u00e8mes de framework produisent rarement des requ\u00eates \u00e9chou\u00e9es. Ils produisent des retards et du contenu manquant, ce que les contr\u00f4les en vrai navigateur mesurent pr\u00e9cis\u00e9ment et que les v\u00e9rifications HTTP ne peuvent pas voir.<\/p>\n<h2 id='le-probl\u00e8me-de-d\u00e9pendance-aux-api'  id=\"boomdevs_7\" id=\"the-api-dependency-problem\">Le probl\u00e8me de d\u00e9pendance aux API<\/h2>\n<p>Dans une SPA, la performance de l&#8217;API \u00e9quivaut \u00e0 l&#8217;exp\u00e9rience utilisateur. Une seule vue de tableau de bord peut s&#8217;assembler \u00e0 partir de plusieurs points de terminaison : session, profil utilisateur, permissions, donn\u00e9es principales, notifications. L&#8217;appel bloquant le plus lent retarde toute la vue, et les utilisateurs ne per\u00e7oivent pas \u00ab un point de terminaison est d\u00e9grad\u00e9 \u00bb. Ils ressentent une application qui semble cass\u00e9e.<\/p>\n<blockquote><p>Un rafra\u00eechissement de token lent retarde chaque appel authentifi\u00e9 qui le suit. Les points de terminaison de recommandations et du panier expirent. La page s&#8217;affiche avec des sections vides, l&#8217;utilisateur recharge, et ce rechargement double la charge sur les services justement en difficult\u00e9. Chaque service semblait sain isol\u00e9ment. Seul le navigateur les a vus \u00e9chouer ensemble.<\/p><\/blockquote>\n<p>Les d\u00e9pendances tierces ajoutent un enjeu suppl\u00e9mentaire. Les processeurs de paiement, les fournisseurs d&#8217;authentification, les tags analytics et les widgets de chat se chargent tous dans la m\u00eame page, et n&#8217;importe lequel peut se d\u00e9grader suivant un planning que vous ne contr\u00f4lez pas. Vous ne pouvez pas r\u00e9parer l&#8217;infrastructure d&#8217;un fournisseur, mais vous pouvez le d\u00e9tecter avant vos utilisateurs.<\/p>\n<p>La solution pratique est de surveiller \u00e0 deux niveaux. Surveillez directement les points de terminaison critiques via <a href=\"https:\/\/www.dotcom-monitor.com\/fr\/produits-de-surveillance\/surveillance-api\/web-api-monitoring\/\">la surveillance des API web<\/a> pour obtenir des donn\u00e9es propres sur le temps de r\u00e9ponse, le taux d&#8217;erreur, et la validit\u00e9 du contenu par point de terminaison. Ensuite, surveillez ces m\u00eames points dans leur contexte avec des contr\u00f4les navigateur, car un point de terminaison de 300 ms qui bloque le rendu est plus nuisible qu&#8217;un autre de 800 ms qui ne bloque pas. Le <a href=\"https:\/\/www.dotcom-monitor.com\/blog\/fr\/optimiser-les-performances-web-comprendre-les-graphiques-des-chutes-deau\/\">diagramme en cascade<\/a> est l\u00e0 o\u00f9 ces deux perspectives se rencontrent : chaque requ\u00eate effectu\u00e9e par la page, dans l&#8217;ordre, avec timings, pour que vous voyiez quel appel a r\u00e9ellement tenu la vue en otage.<\/p>\n<p>Une r\u00e8gle d&#8217;incident fonctionnelle : si la v\u00e9rification directe API est lente et que l&#8217;\u00e9tape navigateur est lente, commencez par analyser le service. Si la v\u00e9rification API est propre mais que l&#8217;\u00e9tape navigateur est lente, cherchez un blocage c\u00f4t\u00e9 client : ex\u00e9cution du bundle, hydratation, script tiers, ou cascade de requ\u00eates qui serialise des appels qui devraient s&#8217;ex\u00e9cuter en parall\u00e8le. Si les deux sont au vert et que les utilisateurs se plaignent quand m\u00eame, comparez les r\u00e9gions et les r\u00f4les authentifi\u00e9s avant d&#8217;accuser la surveillance.<\/p>\n<h2 id='les-m\u00e9triques-de-surveillance-navigateur-qui-comptent'  id=\"boomdevs_8\" id=\"browser-monitoring-metrics-that-matter\">Les m\u00e9triques de surveillance navigateur qui comptent<\/h2>\n<p>Le tableau de bord d&#8217;une application web moderne comporte deux parties : les Core Web Vitals que Google utilise pour d\u00e9crire l&#8217;exp\u00e9rience de chargement, et les temps sp\u00e9cifiques aux SPA que ces vitals ne couvrent pas.<\/p>\n<div class=\"table-wrap\">\n<table>\n<thead>\n<tr>\n<th>M\u00e9trique<\/th>\n<th>Ce qu&#8217;elle indique<\/th>\n<th>Bon (percentile 75)<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Largest Contentful Paint (LCP)<\/td>\n<td>\u00c0 quelle vitesse le contenu principal devient visible<\/td>\n<td>\u2264 2,5 s<\/td>\n<\/tr>\n<tr>\n<td>Interaction to Next Paint (INP)<\/td>\n<td>La r\u00e9activit\u00e9 de la page aux clics, tapotements et frappes sur toute la visite<\/td>\n<td>\u2264 200 ms<\/td>\n<\/tr>\n<tr>\n<td>Cumulative Layout Shift (CLS)<\/td>\n<td>Combien le contenu saute pendant le chargement<\/td>\n<td>\u2264 0,1<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>Les seuils sont les <a href=\"https:\/\/web.dev\/articles\/vitals\" target=\"_blank\" rel=\"noopener\">objectifs publi\u00e9s par Google<\/a>, \u00e9valu\u00e9s au 75e percentile des chargements de pages. Un retrait \u00e0 signaler : First Input Delay (FID) a \u00e9t\u00e9 abandonn\u00e9 en mars 2024, remplac\u00e9 par INP comme vital de r\u00e9activit\u00e9. INP est un juge plus strict, car il mesure la latence des interactions tout au long de la visite au lieu de seulement le d\u00e9lai avant la premi\u00e8re. Si un tableau de bord rapporte encore FID, il d\u00e9crit une m\u00e9trique que Google n&#8217;utilise plus.<\/p>\n<p>Les Core Web Vitals ont \u00e9t\u00e9 con\u00e7us autour des chargements de page, donc ils d\u00e9crivent bien la premi\u00e8re impression mais peu les heures pass\u00e9es par un utilisateur dans l&#8217;application ensuite, o\u00f9 les navigations douces font le travail. Compl\u00e9tez avec des mesures sp\u00e9cifiques SPA :<\/p>\n<ul>\n<li><strong>Dur\u00e9e de changement de route.<\/strong> Temps du clic d\u00e9clencheur au rendu du contenu de la nouvelle vue, suivi par route, car une route admin lourde et une page param\u00e8tres l\u00e9g\u00e8re n&#8217;ont pas \u00e0 partager un seuil.<\/li>\n<li><strong>Timing par \u00e9tape de la transaction.<\/strong> Un parcours script\u00e9 (connexion, recherche, ajout au panier, paiement) avec une r\u00e9f\u00e9rence temporelle pour chaque \u00e9tape, pour que toute r\u00e9gression pointe l&#8217;\u00e9tape en cause.<\/li>\n<li><strong>Temps de r\u00e9ponse API et taux d&#8217;erreur par point de terminaison.<\/strong> D\u00e9taill\u00e9 par point de terminaison, pas moyenn\u00e9 sur toute l&#8217;application, car la moyenne masque l&#8217;appel lent qui bloque le rendu.<\/li>\n<li><strong>Erreurs du console JavaScript.<\/strong> Exceptions non captur\u00e9es et \u00e9checs de chargement de ressources pendant les v\u00e9rifications sont des signes pr\u00e9coces de d\u00e9gradation silencieuse des fonctionnalit\u00e9s.<\/li>\n<li><strong>Temps de blocage tiers.<\/strong> Combien du chemin de chargement et d&#8217;interaction est pass\u00e9 \u00e0 attendre des scripts et services que vous ne contr\u00f4lez pas.<\/li>\n<\/ul>\n<h2 id='comment-surveiller-une-application-monopage-\u00e9tape-par-\u00e9tape'  id=\"boomdevs_9\" id=\"how-to-monitor-a-single-page-app-step-by-step\">Comment surveiller une application monopage (\u00e9tape par \u00e9tape)<\/h2>\n<p>Voici une s\u00e9quence de configuration qui met en pratique les \u00e9l\u00e9ments ci-dessus.<\/p>\n<h3 id='\u00e9tape-1-commencez-avec-une-v\u00e9rification-de-disponibilit\u00e9-en-vrai-navigateur'  id=\"boomdevs_10\" id=\"step-1-start-with-a-real-browser-uptime-check\">\u00c9tape 1 : Commencez avec une v\u00e9rification de disponibilit\u00e9 en vrai navigateur<\/h3>\n<p>Pointez un contr\u00f4le en vrai navigateur vers l&#8217;URL d&#8217;entr\u00e9e de votre application \u00e0 une fr\u00e9quence r\u00e9guli\u00e8re. Contrairement \u00e0 un ping HTTP, il t\u00e9l\u00e9charge le bundle, ex\u00e9cute le JavaScript, et rend la page dans un vrai navigateur, donc il \u00e9choue quand l&#8217;application \u00e9choue, pas seulement quand le serveur. C&#8217;est la couche de base de la <a href=\"https:\/\/www.dotcom-monitor.com\/fr\/produits-de-surveillance\/surveillance-des-applications-web\/\">surveillance d&#8217;applications web<\/a> : \u00e9conomique, fr\u00e9quente, et honn\u00eate sur la mise en ligne effective de l&#8217;application.<\/p>\n<h3 id='\u00e9tape-2-script-les-parcours-qui-rapportent'  id=\"boomdevs_11\" id=\"step-2-script-the-journeys-that-pay-the-bills\">\u00c9tape 2 : Script les parcours qui rapportent<\/h3>\n<p>Choisissez les trois \u00e0 cinq flux qui g\u00e9n\u00e8rent du chiffre d\u2019affaires ou de la fid\u00e9lisation : connexion, recherche, paiement, le workflow central du produit. Enregistrez chacun comme une transaction script\u00e9e avec un outil comme <a href=\"https:\/\/www.dotcom-monitor.com\/fr\/fonctionnalites\/everystep\/\">EveryStep<\/a>, qui capture de vrais clics, frappes et attentes dans une session navigateur et les rejoue selon un planning. Les parcours script\u00e9s sont les seuls contr\u00f4les \u00e0 exercer le routage c\u00f4t\u00e9 client comme le font les utilisateurs.<\/p>\n<h3 id='\u00e9tape-3-faites-des-assertions-sur-le-contenu-rendu-avec-des-s\u00e9lecteurs-stables'  id=\"boomdevs_12\" id=\"step-3-assert-on-rendered-content-with-stable-selectors\">\u00c9tape 3 : Faites des assertions sur le contenu rendu avec des s\u00e9lecteurs stables<\/h3>\n<p>\u00c0 chaque \u00e9tape, v\u00e9rifiez qu&#8217;un \u00e9l\u00e9ment significatif s&#8217;est rendu : le total de la commande appara\u00eet, la recherche retourne une ligne de r\u00e9sultat, le graphique du tableau de bord s&#8217;affiche. Validez l\u2019\u00e9tat, pas juste la pr\u00e9sence : contr\u00f4lez que le bouton de soumission devient actif une fois le formulaire valide et que l&#8217;indicateur de chargement a disparu du DOM, pas simplement qu&#8217;un conteneur existe. Ciblez des attributs stables comme <code>data-testid<\/code> ou des r\u00f4les ARIA au lieu de noms de classes auto-g\u00e9n\u00e9r\u00e9s, ainsi vos scripts survivent aux d\u00e9ploiements au lieu de se d\u00e9clencher inutilement apr\u00e8s chacun d\u2019eux.<\/p>\n<h3 id='\u00e9tape-4-ajoutez-des-v\u00e9rifications-api-directes-pour-les-points-de-terminaison-sous-jacents'  id=\"boomdevs_13\" id=\"step-4-add-direct-api-checks-for-the-endpoints-behind-it\">\u00c9tape 4 : Ajoutez des v\u00e9rifications API directes pour les points de terminaison sous-jacents<\/h3>\n<p>Donnez \u00e0 chaque point de terminaison dont d\u00e9pendent vos vues critiques sa propre v\u00e9rification, avec des seuils de temps de r\u00e9ponse et une validation du contenu, incluant les services tiers. Lorsqu\u2019un contr\u00f4le navigateur \u00e9choue, les donn\u00e9es du point de terminaison vous disent en secondes si la faute vient du frontend, de votre API ou d\u2019un fournisseur.<\/p>\n<h3 id='\u00e9tape-5-ex\u00e9cutez-depuis-les-r\u00e9gions-o\u00f9-se-trouvent-vos-utilisateurs'  id=\"boomdevs_14\" id=\"step-5-run-from-the-regions-your-users-are-in\">\u00c9tape 5 : Ex\u00e9cutez depuis les r\u00e9gions o\u00f9 se trouvent vos utilisateurs<\/h3>\n<p>Un bundle qui se charge vite \u00e0 c\u00f4t\u00e9 de votre origine peut ralentir \u00e0 travers un oc\u00e9an, et les probl\u00e8mes CDN ou DNS sont souvent r\u00e9gionaux. Effectuez vos contr\u00f4les depuis les zones g\u00e9ographiques d&#8217;o\u00f9 vient r\u00e9ellement votre trafic, pour d\u00e9tecter le ralentissement que ressentent vos utilisateurs \u00e0 Singapour plut\u00f4t que celui que votre centre de donn\u00e9es ignore.<\/p>\n<h3 id='\u00e9tape-6-alertez-sur-les-\u00e9tapes-pas-seulement-sur-les-sessions'  id=\"boomdevs_15\" id=\"step-6-alert-on-steps-not-just-sessions\">\u00c9tape 6 : Alertez sur les \u00e9tapes, pas seulement sur les sessions<\/h3>\n<p>D\u00e9finissez des seuils par \u00e9tape de parcours, pas une seule timeout pour tout le script, et d\u00e9clenchez des alertes sur des d\u00e9gradations durables plut\u00f4t que sur une ex\u00e9cution lente isol\u00e9e. Un passage de paiement qui passe de deux secondes \u00e0 six est un probl\u00e8me qui m\u00e9rite qu\u2019on r\u00e9veille quelqu\u2019un, m\u00eame si le script passe techniquement encore. Des <a href=\"https:\/\/www.dotcom-monitor.com\/blog\/website-monitoring-alerts\/\">alertes de surveillance<\/a> bien calibr\u00e9es font la diff\u00e9rence entre un syst\u00e8me fiable et un syst\u00e8me silencieux.<\/p>\n<h2 id='surveillance-synth\u00e9tique-vs-surveillance-des-utilisateurs-r\u00e9els-pour-les-spa'  id=\"boomdevs_16\" id=\"synthetic-monitoring-vs-real-user-monitoring-for-spas\">Surveillance synth\u00e9tique vs surveillance des utilisateurs r\u00e9els pour les SPA<\/h2>\n<p><a href=\"https:\/\/www.dotcom-monitor.com\/fr\/apprenez-avec-dotcom-monitor\/glossaire\/quest-ce-que-le-real-user-monitoring-rum\/\">La surveillance des utilisateurs r\u00e9els<\/a> (RUM) \u00e9quipe l&#8217;application d\u2019un extrait JavaScript et rapporte ce que les visiteurs r\u00e9els ont exp\u00e9riment\u00e9. Sa force est l\u2019\u00e9tendue : appareils r\u00e9els, r\u00e9seaux r\u00e9els, et donn\u00e9es de terrain pour les Core Web Vitals. Sa limite structurelle est qu\u2019elle n\u00e9cessite du trafic. Elle ne peut pas voir une panne du paiement \u00e0 3h du matin avant que les utilisateurs n\u2019y soient confront\u00e9s, ne peut pas tester un flux derri\u00e8re une connexion que vous pr\u00e9f\u00e9rez ne pas instrumenter, et ne d\u00e9tecte une r\u00e9gression qu\u2019apr\u00e8s qu\u2019assez d\u2019utilisateurs en ont d\u00e9j\u00e0 souffert.<\/p>\n<p>La <a href=\"https:\/\/www.dotcom-monitor.com\/blog\/fr\/what-is-synthetic-monitoring\/\">surveillance synth\u00e9tique<\/a> inverse le mod\u00e8le : contr\u00f4les programm\u00e9s, contr\u00f4l\u00e9s, script\u00e9s qui d\u00e9tectent les pannes sans utilisateurs et produisent des r\u00e9f\u00e9rentiels propres que vous pouvez comparer semaine apr\u00e8s semaine. Pour les SPA sp\u00e9cifiquement, les contr\u00f4les navigateur synth\u00e9tiques sont la couche qui exerce le routage, le rendu et les d\u00e9pendances API selon votre planning plut\u00f4t que celui de vos utilisateurs. Pour les SPA, mettez les alertes de pagination en synth\u00e9tique et gardez le RUM pour l\u2019investigation : le RUM montre combien d\u2019utilisateurs r\u00e9els ont \u00e9t\u00e9 affect\u00e9s et sur quels appareils, tandis que le synth\u00e9tique r\u00e9pond \u00e0 la question \u00ab la connexion, la recherche ou le paiement est-il cass\u00e9 maintenant \u00bb, m\u00eame quand personne ne l\u2019utilise encore. Les donn\u00e9es de terrain issues de sources comme le Chrome UX Report de Google compl\u00e8tent alors ces contr\u00f4les avec la r\u00e9partition r\u00e9elle des appareils et r\u00e9seaux.<\/p>\n<h2 id='en-r\u00e9sum\u00e9'  id=\"boomdevs_17\" id=\"the-bottom-line\">En r\u00e9sum\u00e9<\/h2>\n<p>Les applications web modernes ont d\u00e9plac\u00e9 le travail, et les \u00e9checs, dans le navigateur. Le HTML initial ne prouve rien, la navigation se fait sans chargements de pages, et chaque vue d\u00e9pend d\u2019une cha\u00eene d\u2019appels API qui peuvent \u00e9chouer silencieusement. La surveillance doit les accompagner : contr\u00f4les en vrai navigateur qui valident le rendu, parcours script\u00e9s via les routes g\u00e9n\u00e9ratrices de revenu, contr\u00f4les directs sur les points de terminaison en dessous, et m\u00e9triques (LCP, INP, CLS, temps de changement de route et par \u00e9tape) qui d\u00e9crivent ce que ressentent les utilisateurs plut\u00f4t que ce que rapportent les serveurs. Si votre surveillance actuelle ne peut pas diff\u00e9rencier une page rendue d\u2019une coque vide accompagn\u00e9e d\u2019un 200, c\u2019est ce foss\u00e9 qu\u2019il faut combler en premier.<\/p>\n<section class=\"final-cta\">\n<h2 id='surveillez-votre-application-web-dans-un-vrai-navigateur'  id=\"boomdevs_18\">Surveillez votre application web dans un vrai navigateur<\/h2>\n<p>Lancez une <a href=\"https:\/\/www.dotcom-monitor.com\/fr\/solutions\/synthetic-monitoring\/\">surveillance synth\u00e9tique script\u00e9e en vrai navigateur<\/a> de votre application React, Vue ou Angular \u00e0 partir d\u2019un r\u00e9seau global et voyez chaque \u00e9tape, requ\u00eate et rendu comme vos utilisateurs. <a href=\"https:\/\/userauth.dotcom-monitor.com\/Account\/FreeTrialSignUp?SolutionType=Monitoring\">Commencez un essai gratuit<\/a>.<\/p>\n<\/section>\n","protected":false},"excerpt":{"rendered":"<p>Comment surveiller les applications monopages construites avec React, Vue et Angular : navigations douces, d\u00e9pendances API et les Core Web Vitals qui importent.<\/p>\n","protected":false},"author":39,"featured_media":34418,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-31507","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/www.dotcom-monitor.com\/blog\/fr\/wp-json\/wp\/v2\/posts\/31507","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dotcom-monitor.com\/blog\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dotcom-monitor.com\/blog\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dotcom-monitor.com\/blog\/fr\/wp-json\/wp\/v2\/users\/39"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dotcom-monitor.com\/blog\/fr\/wp-json\/wp\/v2\/comments?post=31507"}],"version-history":[{"count":0,"href":"https:\/\/www.dotcom-monitor.com\/blog\/fr\/wp-json\/wp\/v2\/posts\/31507\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.dotcom-monitor.com\/blog\/fr\/wp-json\/wp\/v2\/media\/34418"}],"wp:attachment":[{"href":"https:\/\/www.dotcom-monitor.com\/blog\/fr\/wp-json\/wp\/v2\/media?parent=31507"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dotcom-monitor.com\/blog\/fr\/wp-json\/wp\/v2\/categories?post=31507"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dotcom-monitor.com\/blog\/fr\/wp-json\/wp\/v2\/tags?post=31507"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}