{"id":12501,"date":"2025-09-15T15:37:36","date_gmt":"2025-09-15T13:37:36","guid":{"rendered":"https:\/\/webhosting.de\/pagespeed-ohne-plugins-tuning-experttipps\/"},"modified":"2025-09-15T15:37:36","modified_gmt":"2025-09-15T13:37:36","slug":"vitesse-de-page-sans-plugins-tuning-conseils-dexpert","status":"publish","type":"post","link":"https:\/\/webhosting.de\/fr\/pagespeed-ohne-plugins-tuning-experttipps\/","title":{"rendered":"Optimiser le Pagespeed sans plugins - Mesures manuelles pour les professionnels"},"content":{"rendered":"<p>J'optimise la vitesse de wordpress sans plugins avec des interventions manuelles qui r\u00e9duisent visiblement les temps de chargement et ciblent de mani\u00e8re fiable les Core Web Vitals. Je garde ainsi le contr\u00f4le sur <strong>Requ\u00eates<\/strong>Les ressources et les effets secondaires, et l'\u00e9limination des d\u00e9chets \u00e0 la source.<\/p>\n\n<h2>Points centraux<\/h2>\n\n<ul>\n  <li><strong>photos<\/strong> compresser syst\u00e9matiquement avant le t\u00e9l\u00e9chargement et convertir au format WebP<\/li>\n  <li><strong>Chargement paresseux<\/strong> nativement par attribut HTML au lieu d'extensions surcharg\u00e9es<\/li>\n  <li><strong>Mise en cache<\/strong> via .htaccess\/serveur et strat\u00e9gie d'en-t\u00eate propre<\/li>\n  <li><strong>Code<\/strong> minimiser, regrouper et \u00e9viter les bloqueurs de rendu<\/li>\n  <li><strong>Ballast<\/strong> dans WordPress, supprimer la base de donn\u00e9es et les th\u00e8mes<\/li>\n<\/ul>\n\n<h2>Pourquoi j'optimise sans plugins<\/h2>\n\n<p>Les plug-ins semblent pratiques, mais ils ajoutent des requ\u00eates, des scripts et des styles qui bloquent les chemins de rendu initiaux et qui ne permettent pas \u00e0 mon utilisateur d'acc\u00e9der au site. <strong>TTFB<\/strong> se d\u00e9t\u00e9riorent. Chaque d\u00e9pendance suppl\u00e9mentaire augmente la surface d'erreur et rend plus difficile l'analyse des causes en cas de chute des performances. Avec des mesures manuelles, je r\u00e9duis les cha\u00eenes de chargement et je maintiens le nombre de composants actifs au minimum. Je r\u00e9duis ainsi les frais g\u00e9n\u00e9raux, je reste flexible et je r\u00e9agis plus rapidement aux nouvelles exigences. Cette approche permet d'\u00e9viter les effets secondaires des cha\u00eenes de mise \u00e0 jour et de maintenir la maintenance. <strong>mince<\/strong>.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img fetchpriority=\"high\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2025\/09\/pagespeed-ohne-plugins-5173.webp\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Rendre les images plus l\u00e9g\u00e8res : Formats, tailles, compression<\/h2>\n\n<p>Les grandes images ne tuent pas le time-to-first-byte, mais elles dominent le temps de transfert et le LCP, c'est pourquoi je r\u00e9duis chaque asset <strong>\u00e0 l'avance<\/strong>. J'exporte les photos au format JPEG ou WebP et n'utilise le PNG que pour les vraies transparences. Je mets les dimensions \u00e0 l'\u00e9chelle exacte des largeurs de viewport n\u00e9cessaires, au lieu de charger 4000px quand 800px suffisent. Ensuite, je compresse syst\u00e9matiquement avec Squoosh, ImageOptim ou Photoshop et je v\u00e9rifie les artefacts visibles. Pour les variantes responsives, je mise sur srcset\/sizes et j'utilise volontiers cette courte description. <a href=\"https:\/\/webhosting.de\/fr\/responsive-images-best-practices-for-fast-websites\/\">Guide des images responsives<\/a>pour que le navigateur charge automatiquement la plus petite source utile et mon <strong>Transfert de donn\u00e9es<\/strong> diminue.<\/p>\n\n<h2>Utiliser le lazy loading de mani\u00e8re native<\/h2>\n\n<p>Je ne charge les images et les iFrames que lorsqu'elles arrivent dans le viewport, et ce nativement par HTML5, au lieu d'inclure des scripts suppl\u00e9mentaires qui ne respectent pas mon <strong>Fil de discussion principal<\/strong> ne doit pas \u00eatre charg\u00e9. L'attribut loading=\"lazy\" est largement suffisant dans les navigateurs modernes. Je r\u00e9duis ainsi le nombre d'octets initiaux et j'att\u00e9nue la phase critique de rendu. En m\u00eame temps, le contr\u00f4le reste transparent et je d\u00e9cide quels \u00e9l\u00e9ments above-the-fold je charge d\u00e9lib\u00e9r\u00e9ment avec pr\u00e9cipitation. Les images Hero critiques re\u00e7oivent loading=\"eager\", tout le reste se charge. <strong>d\u00e9cal\u00e9<\/strong>.<\/p>\n\n<pre><code>&lt;img src=&quot;beispiel.jpg&quot; alt=&quot;Exemple d&amp;#039;image&quot; loading=&quot;lazy&quot;&gt;\n&lt;iframe src=&quot;video.html&quot; title=&quot;Vid&eacute;o&quot; loading=&quot;lazy&quot;&gt;&lt;\/iframe&gt;<\/code><\/pre>\n\n<h2>Acc\u00e9l\u00e9rer le LCP de mani\u00e8re cibl\u00e9e : Priorit\u00e9s et caract\u00e8res g\u00e9n\u00e9riques<\/h2>\n\n<p>Pour am\u00e9liorer la stabilit\u00e9 de Largest Contentful Paint, je marque explicitement mon plus grand \u00e9l\u00e9ment Above-the-Fold. Les images re\u00e7oivent fetchpriority=\"high\" et des dimensions d\u00e9finies pour que le navigateur les pr\u00e9f\u00e8re et <strong>CLS<\/strong> \u00e9vite d'avoir \u00e0 le faire. J'ajoute un Preload si n\u00e9cessaire, si le chemin est clair.<\/p>\n\n<pre><code>&lt;!-- LCP-Image priorisieren --&gt;\n&lt;link rel=&quot;preload&quot; as=&quot;image&quot; href=&quot;\/assets\/hero.webp&quot; imagesrcset=&quot;\/assets\/hero-800.webp 800w, \/assets\/hero-1200.webp 1200w&quot; imagesizes=&quot;(min-width: 800px) 1200px, 100vw&quot;&gt;\n&lt;img src=&quot;\/assets\/hero-800.webp&quot;\n     srcset=&quot;\/assets\/hero-800.webp 800w, \/assets\/hero-1200.webp 1200w&quot;\n     sizes=&quot;(min-width: 800px) 1200px, 100vw&quot;\n     width=&quot;1200&quot; height=&quot;700&quot;\n     fetchpriority=&quot;high&quot;\n     loading=&quot;eager&quot;\n     decoding=&quot;async&quot;\n     alt=&quot;Hero&quot;&gt;<\/code><\/pre>\n\n<p>Pour les images et les conteneurs, je mets largeur\/hauteur ou <code>aspect-ratio<\/code>pour \u00e9viter les sauts de mise en page. Pour les zones non critiques, j'utilise <code>content-visibility : auto<\/code> et <code>contain-intrinsic-size<\/code>Pour que le navigateur rende ult\u00e9rieurement les zones situ\u00e9es en dehors du viewport sans d\u00e9placer la mise en page.<\/p>\n\n<pre><code>\/* R\u00e9server Above-the-Fold *\/\n.hero { aspect-ratio : 12 \/ 7 ; }\n\n\/* Mettre en page les sections non visibles plus tard *\/\n.section { content-visibility : auto ; contain-intrinsic-size : 1000px ; }<\/code><\/pre>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2025\/09\/pagespeedmeeting4658.webp\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Configurer la mise en cache du navigateur de mani\u00e8re cibl\u00e9e<\/h2>\n\n<p>Les visiteurs r\u00e9currents doivent charger des assets statiques \u00e0 partir du cache, c'est pourquoi je d\u00e9finis des temps d'expiration directement au niveau du serveur par <strong>.htaccess<\/strong> ou dans le vHost. Des TTL longs pour les images, mod\u00e9r\u00e9s pour CSS\/JS, et des param\u00e8tres par d\u00e9faut courts pour HTML me donnent l'\u00e9quilibre entre actualit\u00e9 et vitesse. Je veille \u00e0 la coh\u00e9rence du versionnement des fichiers afin que les mises \u00e0 jour prennent effet imm\u00e9diatement malgr\u00e9 les TTL longs. Combin\u00e9 avec des ETags ou des en-t\u00eates Last Modified, le trafic diminue drastiquement. J'\u00e9conomise ainsi de la bande passante et raccourcis le temps de t\u00e9l\u00e9chargement per\u00e7u. <strong>Temps de chargement<\/strong>.<\/p>\n\n<pre><code>ExpiresActive On\n  ExpiresByType image\/jpg \"access plus 1 year\"\n  ExpiresByType image\/jpeg \"acc\u00e8s plus 1 an\"\n  ExpiresByType image\/gif \"access plus 1 year\"\n  ExpiresByType image\/png \"acc\u00e8s plus 1 an\"\n  ExpiresByType text\/css \"acc\u00e8s plus 1 mois\"\n  ExpiresByType application\/pdf \"access plus 1 mois\"\n  ExpiresByType text\/javascript \"acc\u00e8s plus 1 mois\"\n  ExpiresByType application\/x-javascript \"access plus 1 mois\"\n  ExpiresDefault \"acc\u00e8s plus 2 jours\"<\/code><\/pre>\n\n<h2>Strat\u00e9gie de mise en cache, versionnement et revalidation<\/h2>\n\n<p>Je combine les longs TTL avec le hachage des noms de fichiers, afin que les clients puissent mettre en cache les donn\u00e9es pendant une dur\u00e9e inchang\u00e9e (<code>style.9c2a.css<\/code>) et les mises \u00e0 jour sont imm\u00e9diates. Pour les bundles fr\u00e9quemment modifi\u00e9s, je mets <code>Contr\u00f4le du cache : public, max-age=31536000, immutable<\/code>tandis que HTML court <code>no-cache<\/code>-des strat\u00e9gies de recherche. Pour les r\u00e9ponses dynamiques, je pr\u00e9f\u00e8re <strong>Demandes conditionnelles<\/strong> via <code>ETag<\/code> ou <code>Derni\u00e8re modification<\/code>pour que les clients effectuent des r\u00e9visions avec parcimonie :<\/p>\n\n<pre><code>Header set Cache-Control \"public, max-age=31536000, immutable\"\n  \n  \n    Header set Cache-Control \"no-cache, no-store, must-revalidate\".<\/code><\/pre>\n\n<p>Pour les contenus avec des variantes de format (par ex. WebP vs JPEG), je v\u00e9rifie que <code>Vary : Accept<\/code> est correctement d\u00e9fini sur l'Edge ; ainsi, les mauvaises versions ne se retrouvent pas dans le cache. Je maintiens la coh\u00e9rence des versions via des pipelines de construction, afin qu'aucun actif ne devienne obsol\u00e8te sans contr\u00f4le.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2025\/09\/pagespeed-ohne-plugins-optimieren-4137.webp\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>\u00c9purer CSS et JavaScript<\/h2>\n\n<p>Je minifie CSS\/JS localement dans mon processus de construction et je supprime les commentaires, les espaces et les caract\u00e8res inutilis\u00e9s. <strong>S\u00e9lecteurs<\/strong>. Je mets les styles critiques pour Above-the-Fold en ligne, je charge le reste de mani\u00e8re asynchrone ou en tant que fichier diff\u00e9r\u00e9. Je d\u00e9place les scripts bloquant le rendu \u00e0 la fin, je leur ajoute defer\/async et je limite le nombre de biblioth\u00e8ques externes. Pour les frameworks, je v\u00e9rifie le tree-shaking et les scopes d'importation afin de ne pas charger tout ce que j'utilise rarement. Lorsque c'est possible, je regroupe les fichiers afin de r\u00e9duire les requ\u00eates sans mettre en cache derri\u00e8re. <strong>se d\u00e9t\u00e9riorent<\/strong>.<\/p>\n\n<h2>Am\u00e9liorer l'INP : D\u00e9charger le fil de discussion principal<\/h2>\n\n<p>Pour une faible interaction avec la prochaine peinture, je d\u00e9coupe les longues t\u00e2ches en petits morceaux, j'\u00e9vite le thrashing de mise en page et je d\u00e9couple les gestionnaires complexes des interactions. J'utilise <code>defer<\/code> pour les modules, d\u00e9finir des \u00e9couteurs d'\u00e9v\u00e9nements passifs et planifier le travail non critique pendant les p\u00e9riodes d'inactivit\u00e9 :<\/p>\n\n<pre><code>document.addEventListener('touchstart', onTouch, { passive : true }) ;\n\nconst expensiveInit = () =&gt; { \/* ... *\/ } ;\nrequestIdleCallback(expensiveInit, { timeout : 1500 }) ;\n\n\/\/ Fractionner les longues t\u00e2ches\nfunction chunkedWork(items) {\n  const batch = items.splice(0, 50) ;\n  \/\/ traiter...\n  if (items.length) requestAnimationFrame(() =&gt; chunkedWork(items)) ;\n}<\/code><\/pre>\n\n<p>Je mesure les t\u00e2ches longues dans DevTools, je supprime les biblioth\u00e8ques en double et je remplace les utilitaires jQuery par des API natives. Je r\u00e9sume les mises \u00e0 jour du DOM, j'utilise des <code>transform<\/code> au lieu de <code>top\/left<\/code> et maintenir les reflux au minimum.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2025\/09\/pagespeed-techoffice-9482.webp\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Se d\u00e9barrasser du poids de WordPress<\/h2>\n\n<p>Je n'ai pas besoin de beaucoup de fonctionnalit\u00e9s WP sur les pages de production, donc je d\u00e9sactive les emojis, les oEmbeds et certaines parties de l'API REST et j'\u00e9conomise <strong>Requ\u00eates<\/strong>. Ainsi, le head se r\u00e9tr\u00e9cit et moins de scripts bloquent First Paint. Je v\u00e9rifie \u00e9galement les pingbacks, les liens RSD et le manifeste WLW et les d\u00e9sactive. Je d\u00e9sactive \u00e9galement les trackbacks et les XML-RPC lorsqu'ils ne jouent aucun r\u00f4le. Je r\u00e9duis ainsi la surface d'attaque et pr\u00e9serve la phase de d\u00e9marrage. <strong>facile<\/strong>.<\/p>\n\n<pre><code>\/\/ d\u00e9sactiver les emojis\nremove_action( 'wp_head', 'print_emoji_detection_script', 7 ) ;\nremove_action( 'wp_print_styles', 'print_emoji_styles' ) ;\n\n\/\/ r\u00e9duire les oEmbeds et l'API REST\nremove_action( 'wp_head', 'wp_oembed_add_host_js' ) ;\nadd_filter('rest_enabled', '_return_false') ;\nadd_filter('rest_jsonp_enabled', '_return_false') ;<\/code><\/pre>\n\n<h2>Dompter les scripts tiers<\/h2>\n\n<p>Le code tiers est souvent le plus gros frein. Je l'initialise avec un certain retard, je n'int\u00e8gre que le strict n\u00e9cessaire et je ne le charge qu'apr\u00e8s une interaction ou un consentement. Analytics\/Tracking arrive <code>async<\/code> apr\u00e8s le First Paint, je remplace les widgets sociaux par des liens statiques. Pour les iFrames, j'utilise <code>loading=\"lazy\" (chargement paresseux)<\/code> et <code>sandbox<\/code>pour limiter les effets secondaires. Les embeds YouTube re\u00e7oivent une image d'aper\u00e7u et ne chargent le lecteur qu'au moment du clic - cela permet d'\u00e9conomiser plusieurs requ\u00eates au moment du d\u00e9marrage.<\/p>\n\n<h2>Gestion de la base de donn\u00e9es sans aide<\/h2>\n\n<p>Je supprime les r\u00e9visions superflues, vide les transients et nettoie les commentaires de spam via phpMyAdmin, afin que les requ\u00eates soient plus rapides. <strong>r\u00e9pondre<\/strong>. Je v\u00e9rifie que les options autoloaded n'ont pas une taille excessive, car elles se retrouvent dans chaque requ\u00eate. Dans les petites installations, quelques instructions SQL cibl\u00e9es suffisent pour optimiser les tables. Je contr\u00f4le si des jobs Cron sont en suspens et je nettoie les post-meta laiss\u00e9s par d'anciens plugins. Un entretien r\u00e9gulier \u00e9vite que les requ\u00eates ne s'emballent et que mon backend <strong>inerte<\/strong> volont\u00e9.<\/p>\n\n<h2>System-Cron au lieu de WP-Cron<\/h2>\n\n<p>Pour que les t\u00e2ches Cron fonctionnent de mani\u00e8re fiable et performante, je les dissocie de l'appel de la page. Je d\u00e9sactive le WP-Cron et je planifie de v\u00e9ritables t\u00e2ches syst\u00e8me qui fonctionnent pendant les p\u00e9riodes creuses.<\/p>\n\n<pre><code>\/\/ dans wp-config.php\ndefine('DISABLE_WP_CRON', true) ;<\/code><\/pre>\n\n<pre><code># crontab -e (toutes les 5 minutes)\n*\/5 * * * \/usr\/bin\/php -q \/path\/to\/wp\/wp-cron.php &gt;\/dev\/null 2&gt;&amp;1<\/code><\/pre>\n\n<p>Ainsi, aucun cron ne bloque le temps de r\u00e9ponse d'une requ\u00eate r\u00e9guli\u00e8re et les t\u00e2ches r\u00e9currentes telles que le nettoyage de transients ou la g\u00e9n\u00e9ration de plan de site se d\u00e9roulent de mani\u00e8re planifiable.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2025\/09\/pagespeed-ohne-plugins-8372.webp\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Examiner de mani\u00e8re critique le th\u00e8me, les plugins et les polices de caract\u00e8res<\/h2>\n\n<p>Je supprime les th\u00e8mes inactifs et toutes les extensions qui font double emploi avec des fonctions ou qui sont rarement utiles, afin que le <strong>Autochargeur<\/strong> se charge moins. Pour les polices, je r\u00e9duis les variantes \u00e0 Regular\/Bold et deux styles de police, je les h\u00e9berge localement et j'active le Preload pour le fichier principal. Je pr\u00e9pare les ressources externes avec DNS Prefetch lorsque j'en ai vraiment besoin. Pour les embeds YouTube, j'utilise des images de pr\u00e9visualisation pour initialiser les iFrames plus tard. Ainsi, je garde le contr\u00f4le sur les chemins de rendu et maintiens la charge utile de d\u00e9part <strong>petit<\/strong>.<\/p>\n\n<pre><code><\/code><\/pre>\n\n<h2>Polices de caract\u00e8res : comportement de chargement, subsetting, fallbacks<\/h2>\n\n<p>Les polices web influencent fortement la vitesse per\u00e7ue. J'utilise <code>affichage des polices : swap<\/code> ou <code>en option<\/code>pour que le texte soit imm\u00e9diatement visible. Je contr\u00f4le les polices variables de mani\u00e8re critique et je subsecte les zones Unicode pour \u00e9conomiser des octets. Un pr\u00e9chargement cibl\u00e9 du fichier WOFF2 le plus important r\u00e9duit le FOIT.<\/p>\n\n<pre><code>@font-face {\n  font-family : 'Brand' ;\n  src : url('\/fonts\/brand-regular.woff2') format('woff2') ;\n  font-weight : 400 ;\n  font-style : normal ;\n  font-display : swap ;\n  unicode-range : U+000-5FF ; \/* ensemble de base latin *\/\n}<\/code><\/pre>\n\n<p>Je d\u00e9finis des retours syst\u00e8me propres (par ex. Segoe UI, Roboto, SF Pro, Arial) dans la pile de polices afin de minimiser les sauts de mise en page. \u00c0 propos de <code>size-adjust<\/code> j'adapte les diff\u00e9rences m\u00e9triques pour que le passage du fallback \u00e0 la police web soit \u00e0 peine visible.<\/p>\n\n<h2>Serveur, PHP et protocoles<\/h2>\n\n<p>Sans infrastructure adapt\u00e9e, toute optimisation est vou\u00e9e \u00e0 l'\u00e9chec, c'est pourquoi je veille \u00e0 utiliser des disques SSD rapides, des syst\u00e8mes d'exploitation actuels et des logiciels de gestion de contenu. <strong>PHP<\/strong>-et le support HTTP\/2. OPcache, Brotli\/Gzip et le multiplexage HTTP\/2 acc\u00e9l\u00e8rent la livraison et r\u00e9duisent les blocages. Dans la mesure du possible, j'envisage HTTP\/3\/QUIC et je v\u00e9rifie soigneusement la configuration et TLS ; ce petit article sur <a href=\"https:\/\/webhosting.de\/fr\/implementation-http3-optimisation-de-la-performance-du-site-web\/\">Mettre en \u0153uvre HTTP\/3<\/a>. Les tests de charge et de stress me montrent comment le site r\u00e9agit sous la charge. Je m'assure ainsi que ma pile supporte l'application <strong>porte<\/strong> et que mes mesures ont un impact.<\/p>\n\n<table>\n  <thead>\n    <tr>\n      <th>Fournisseur d'h\u00e9bergement<\/th>\n      <th>Caract\u00e9ristiques<\/th>\n      <th>Performance<\/th>\n      <th>Soutien<\/th>\n      <th>Rapport qualit\u00e9-prix<\/th>\n    <\/tr>\n  <\/thead>\n  <tbody>\n    <tr>\n      <td>webhoster.de<\/td>\n      <td>SSD, PHP 8.*, HTTP\/2<\/td>\n      <td>\u2605\u2605\u2605\u2605\u2605<\/td>\n      <td>\u2605\u2605\u2605\u2605\u2605<\/td>\n      <td>\u2605\u2605\u2605\u2605\u2605<\/td>\n    <\/tr>\n    <tr>\n      <td>Concurrent 1<\/td>\n      <td>SSD, PHP 7.*, HTTP\/2<\/td>\n      <td>\u2605\u2605\u2605\u2605\u2606<\/td>\n      <td>\u2605\u2605\u2605\u2605\u2606<\/td>\n      <td>\u2605\u2605\u2605\u2605\u2606<\/td>\n    <\/tr>\n    <tr>\n      <td>Concurrent 2<\/td>\n      <td>HDD, PHP 7.*, pas de HTTP\/2<\/td>\n      <td>\u2605\u2605\u2605\u2606\u2606<\/td>\n      <td>\u2605\u2605\u2605\u2606\u2606<\/td>\n      <td>\u2605\u2605\u2605\u2606\u2606<\/td>\n    <\/tr>\n  <\/tbody>\n<\/table>\n\n<h2>Optimiser PHP-FPM, OPcache et le transport<\/h2>\n\n<p>Je configure PHP-FPM de mani\u00e8re \u00e0 ce que les requ\u00eates n'atterrissent pas dans des files d'attente. <code>pm<\/code>, <code>pm.max_children<\/code> et <code>pm.max_requests<\/code> je dimensionne \u00e0 la charge. OPcache re\u00e7oit suffisamment de m\u00e9moire pour \u00e9viter les recompilations.<\/p>\n\n<pre><code>; php.ini \/ www.conf\nopcache.enable=1\nopcache.memory_consumption=256\nopcache.max_accelerated_files=20000\nopcache.validate_timestamps=0\n\n; PHP-FPM (exemples de valeurs)\npm = dynamic\npm.max_children = 20\npm.start_servers = 4\npm.min_spare_servers = 2\npm.max_spare_servers = 8\npm.max_requests = 500<\/code><\/pre>\n\n<p>Au niveau de la couche de transport, j'active Brotli avant Gzip, je garde Keep-Alive ouvert et je contr\u00f4le TLS-Resumption. En HTTP\/2, je contr\u00f4le la priorisation pour que CSS\/\u00e9criture et l'image LCP aient la priorit\u00e9. Sous HTTP\/3, je surveille les pertes de paquets et j'adapte le pacing.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2025\/09\/pagespeed-optimierung-0927.webp\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>CDN, en-t\u00eate de cache et g\u00e9ographie<\/h2>\n\n<p>Pour le trafic international, j'utilise un r\u00e9seau Edge afin de r\u00e9duire la latence et de rapprocher les ressources statiques de l'utilisateur. <strong>\u00e0 livrer<\/strong>. Je veille \u00e0 ce que les cl\u00e9s de cache soient propres, les en-t\u00eates variants (par exemple pour WebP) et le versionnement coh\u00e9rent. Je mets en cache les pages HTML critiques avec pr\u00e9caution, les r\u00e9ponses API de mani\u00e8re s\u00e9lective et les images de mani\u00e8re agressive. Un bref aper\u00e7u de la <a href=\"https:\/\/webhosting.de\/fr\/optimisation-cdn-livraison-de-contenu\/\">Optimisation du CDN<\/a> m'aide \u00e0 \u00e9viter les \u00e9cueils comme la double compression. Ainsi, je combine la mise en cache sur le serveur et la mise en cache en p\u00e9riph\u00e9rie et je maintiens les co\u00fbts \u00e0 un niveau raisonnable. <strong>Vue<\/strong>.<\/p>\n\n<h2>Formats, n\u00e9gociation et d\u00e9duplication sur le edge<\/h2>\n\n<p>Je diffuse des images dans des formats modernes (WebP, AVIF en option) et m'assure que le CDN respecte la n\u00e9gociation de contenu. Il est important que les <code>Accept<\/code>-et l'unicit\u00e9 des cl\u00e9s de cache. J'\u00e9vite le double Gzip en ne compressant qu'une seule fois (serveur <em>ou<\/em> Edge) et en d\u00e9sactivant le drapeau \u00e0 l'autre extr\u00e9mit\u00e9. Pour le HTML, je place des TTL conservateurs et des ETags forts, les assets restent mis en cache de mani\u00e8re agressive.<\/p>\n\n<h2>Mesure, indicateurs et priorisation<\/h2>\n\n<p>Je commence avec un budget de performance clair et je me concentre sur le LCP, le CLS et l'INP plut\u00f4t que sur chaque milliseconde. <strong>isol\u00e9<\/strong> \u00e0 consid\u00e9rer. Les donn\u00e9es de terrain sont sup\u00e9rieures aux valeurs de laboratoire, c'est pourquoi je compare les signaux r\u00e9els des utilisateurs aux tests. Les diagrammes en cascade r\u00e9v\u00e8lent les actifs bloquants, les cartes des requ\u00eates montrent les biblioth\u00e8ques en double et les fichiers de polices inutiles. Je mesure chaque changement individuellement afin d'identifier rapidement les r\u00e9gressions. Ce n'est que lorsque les chiffres s'am\u00e9liorent de mani\u00e8re coh\u00e9rente que je les d\u00e9ploie plus largement. <strong>de<\/strong>.<\/p>\n\n<h2>M\u00e9thode de travail : d\u00e9ployer proprement, d\u00e9rouler rapidement<\/h2>\n\n<p>J'int\u00e8gre des contr\u00f4les de performance dans mon processus de d\u00e9ploiement : Les builds g\u00e9n\u00e8rent des artefacts versionn\u00e9s, les tests Lighthouse\/DevTools sont ex\u00e9cut\u00e9s sur Staging, et seuls les bundles v\u00e9rifi\u00e9s sont mis en ligne. Les indicateurs de fonctionnalit\u00e9s me permettent de d\u00e9ployer les modifications risqu\u00e9es de mani\u00e8re contr\u00f4l\u00e9e et de les d\u00e9sactiver imm\u00e9diatement si n\u00e9cessaire. Cela me permet de maintenir des performances stables tout en d\u00e9veloppant de nouvelles fonctionnalit\u00e9s.<\/p>\n\n<h2>En bref, je r\u00e9sume : Voici comment je le mets en \u0153uvre<\/h2>\n\n<p>J'optimise d'abord le contenu avec le plus grand levier : r\u00e9duire les images, activer le lazy loading, les parties CSS critiques en ligne et les scripts bloquants. <strong>d\u00e9placer<\/strong>. Ensuite, je s\u00e9curise les strat\u00e9gies de mise en cache du c\u00f4t\u00e9 du navigateur et du serveur, je nettoie les fonctionnalit\u00e9s de WordPress et la base de donn\u00e9es et je supprime les plugins inutiles. Je v\u00e9rifie l'infrastructure, HTTP\/2\/3, Brotli et OPcache et veille \u00e0 des processus de d\u00e9ploiement propres avec versionnement. Si n\u00e9cessaire, je compl\u00e8te un CDN et r\u00e8gle les en-t\u00eates et les variantes. Enfin, je contr\u00f4le les indicateurs de mani\u00e8re it\u00e9rative jusqu'\u00e0 ce que LCP, CLS et INP soient stables et dans le vert. <strong>Domaines<\/strong> sont couch\u00e9s.<\/p>","protected":false},"excerpt":{"rendered":"<p>Techniques professionnelles pour wordpress speed sans plugins. \u00c9tapes d'optimisation manuelle pour des temps de chargement ultra-rapides et des classements au top.<\/p>","protected":false},"author":1,"featured_media":12494,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_crdt_document":"","inline_featured_image":false,"footnotes":""},"categories":[733],"tags":[],"class_list":["post-12501","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-wordpress"],"acf":[],"_wp_attached_file":null,"_wp_attachment_metadata":null,"litespeed-optimize-size":null,"litespeed-optimize-set":null,"_elementor_source_image_hash":null,"_wp_attachment_image_alt":null,"stockpack_author_name":null,"stockpack_author_url":null,"stockpack_provider":null,"stockpack_image_url":null,"stockpack_license":null,"stockpack_license_url":null,"stockpack_modification":null,"color":null,"original_id":null,"original_url":null,"original_link":null,"unsplash_location":null,"unsplash_sponsor":null,"unsplash_exif":null,"unsplash_attachment_metadata":null,"_elementor_is_screenshot":null,"surfer_file_name":null,"surfer_file_original_url":null,"envato_tk_source_kit":null,"envato_tk_source_index":null,"envato_tk_manifest":null,"envato_tk_folder_name":null,"envato_tk_builder":null,"envato_elements_download_event":null,"_menu_item_type":null,"_menu_item_menu_item_parent":null,"_menu_item_object_id":null,"_menu_item_object":null,"_menu_item_target":null,"_menu_item_classes":null,"_menu_item_xfn":null,"_menu_item_url":null,"_trp_menu_languages":null,"rank_math_primary_category":null,"rank_math_title":null,"inline_featured_image":null,"_yoast_wpseo_primary_category":null,"rank_math_schema_blogposting":null,"rank_math_schema_videoobject":null,"_oembed_049c719bc4a9f89deaead66a7da9fddc":null,"_oembed_time_049c719bc4a9f89deaead66a7da9fddc":null,"_yoast_wpseo_focuskw":null,"_yoast_wpseo_linkdex":null,"_oembed_27e3473bf8bec795fbeb3a9d38489348":null,"_oembed_c3b0f6959478faf92a1f343d8f96b19e":null,"_trp_translated_slug_en_us":null,"_wp_desired_post_slug":null,"_yoast_wpseo_title":null,"tldname":null,"tldpreis":null,"tldrubrik":null,"tldpolicylink":null,"tldsize":null,"tldregistrierungsdauer":null,"tldtransfer":null,"tldwhoisprivacy":null,"tldregistrarchange":null,"tldregistrantchange":null,"tldwhoisupdate":null,"tldnameserverupdate":null,"tlddeletesofort":null,"tlddeleteexpire":null,"tldumlaute":null,"tldrestore":null,"tldsubcategory":null,"tldbildname":null,"tldbildurl":null,"tldclean":null,"tldcategory":null,"tldpolicy":null,"tldbesonderheiten":null,"tld_bedeutung":null,"_oembed_d167040d816d8f94c072940c8009f5f8":null,"_oembed_b0a0fa59ef14f8870da2c63f2027d064":null,"_oembed_4792fa4dfb2a8f09ab950a73b7f313ba":null,"_oembed_33ceb1fe54a8ab775d9410abf699878d":null,"_oembed_fd7014d14d919b45ec004937c0db9335":null,"_oembed_21a029d076783ec3e8042698c351bd7e":null,"_oembed_be5ea8a0c7b18e658f08cc571a909452":null,"_oembed_a9ca7a298b19f9b48ec5914e010294d2":null,"_oembed_f8db6b27d08a2bb1f920e7647808899a":null,"_oembed_168ebde5096e77d8a89326519af9e022":null,"_oembed_cdb76f1b345b42743edfe25481b6f98f":null,"_oembed_87b0613611ae54e86e8864265404b0a1":null,"_oembed_27aa0e5cf3f1bb4bc416a4641a5ac273":null,"_oembed_time_27aa0e5cf3f1bb4bc416a4641a5ac273":null,"_tldname":null,"_tldclean":null,"_tldpreis":null,"_tldcategory":null,"_tldsubcategory":null,"_tldpolicy":null,"_tldpolicylink":null,"_tldsize":null,"_tldregistrierungsdauer":null,"_tldtransfer":null,"_tldwhoisprivacy":null,"_tldregistrarchange":null,"_tldregistrantchange":null,"_tldwhoisupdate":null,"_tldnameserverupdate":null,"_tlddeletesofort":null,"_tlddeleteexpire":null,"_tldumlaute":null,"_tldrestore":null,"_tldbildname":null,"_tldbildurl":null,"_tld_bedeutung":null,"_tldbesonderheiten":null,"_oembed_ad96e4112edb9f8ffa35731d4098bc6b":null,"_oembed_8357e2b8a2575c74ed5978f262a10126":null,"_oembed_3d5fea5103dd0d22ec5d6a33eff7f863":null,"_eael_widget_elements":null,"_oembed_0d8a206f09633e3d62b95a15a4dd0487":null,"_oembed_time_0d8a206f09633e3d62b95a15a4dd0487":null,"_aioseo_description":null,"_eb_attr":null,"_eb_data_table":null,"_oembed_819a879e7da16dd629cfd15a97334c8a":null,"_oembed_time_819a879e7da16dd629cfd15a97334c8a":null,"_acf_changed":null,"_wpcode_auto_insert":null,"_edit_last":null,"_edit_lock":null,"_oembed_e7b913c6c84084ed9702cb4feb012ddd":null,"_oembed_bfde9e10f59a17b85fc8917fa7edf782":null,"_oembed_time_bfde9e10f59a17b85fc8917fa7edf782":null,"_oembed_03514b67990db061d7c4672de26dc514":null,"_oembed_time_03514b67990db061d7c4672de26dc514":null,"rank_math_news_sitemap_robots":null,"rank_math_robots":null,"_eael_post_view_count":"2834","_trp_automatically_translated_slug_ru_ru":null,"_trp_automatically_translated_slug_et":null,"_trp_automatically_translated_slug_lv":null,"_trp_automatically_translated_slug_fr_fr":null,"_trp_automatically_translated_slug_en_us":null,"_wp_old_slug":null,"_trp_automatically_translated_slug_da_dk":null,"_trp_automatically_translated_slug_pl_pl":null,"_trp_automatically_translated_slug_es_es":null,"_trp_automatically_translated_slug_hu_hu":null,"_trp_automatically_translated_slug_fi":null,"_trp_automatically_translated_slug_ja":null,"_trp_automatically_translated_slug_lt_lt":null,"_elementor_edit_mode":null,"_elementor_template_type":null,"_elementor_version":null,"_elementor_pro_version":null,"_wp_page_template":null,"_elementor_page_settings":null,"_elementor_data":null,"_elementor_css":null,"_elementor_conditions":null,"_happyaddons_elements_cache":null,"_oembed_75446120c39305f0da0ccd147f6de9cb":null,"_oembed_time_75446120c39305f0da0ccd147f6de9cb":null,"_oembed_3efb2c3e76a18143e7207993a2a6939a":null,"_oembed_time_3efb2c3e76a18143e7207993a2a6939a":null,"_oembed_59808117857ddf57e478a31d79f76e4d":null,"_oembed_time_59808117857ddf57e478a31d79f76e4d":null,"_oembed_965c5b49aa8d22ce37dfb3bde0268600":null,"_oembed_time_965c5b49aa8d22ce37dfb3bde0268600":null,"_oembed_81002f7ee3604f645db4ebcfd1912acf":null,"_oembed_time_81002f7ee3604f645db4ebcfd1912acf":null,"_elementor_screenshot":null,"_oembed_7ea3429961cf98fa85da9747683af827":null,"_oembed_time_7ea3429961cf98fa85da9747683af827":null,"_elementor_controls_usage":null,"_elementor_page_assets":[],"_elementor_screenshot_failed":null,"theplus_transient_widgets":null,"_eael_custom_js":null,"_wp_old_date":null,"_trp_automatically_translated_slug_it_it":null,"_trp_automatically_translated_slug_pt_pt":null,"_trp_automatically_translated_slug_zh_cn":null,"_trp_automatically_translated_slug_nl_nl":null,"_trp_automatically_translated_slug_pt_br":null,"_trp_automatically_translated_slug_sv_se":null,"rank_math_analytic_object_id":null,"rank_math_internal_links_processed":null,"_trp_automatically_translated_slug_ro_ro":null,"_trp_automatically_translated_slug_sk_sk":null,"_trp_automatically_translated_slug_bg_bg":null,"_trp_automatically_translated_slug_sl_si":null,"litespeed_vpi_list":["webhostinglogo.png"],"litespeed_vpi_list_mobile":["webhostinglogo.png"],"rank_math_seo_score":null,"rank_math_contentai_score":null,"ilj_limitincominglinks":null,"ilj_maxincominglinks":null,"ilj_limitoutgoinglinks":null,"ilj_maxoutgoinglinks":null,"ilj_limitlinksperparagraph":null,"ilj_linksperparagraph":null,"ilj_blacklistdefinition":null,"ilj_linkdefinition":null,"_eb_reusable_block_ids":null,"rank_math_focus_keyword":"wordpress speed","rank_math_og_content_image":null,"_yoast_wpseo_metadesc":null,"_yoast_wpseo_content_score":null,"_yoast_wpseo_focuskeywords":null,"_yoast_wpseo_keywordsynonyms":null,"_yoast_wpseo_estimated-reading-time-minutes":null,"rank_math_description":null,"surfer_last_post_update":null,"surfer_last_post_update_direction":null,"surfer_keywords":null,"surfer_location":null,"surfer_draft_id":null,"surfer_permalink_hash":null,"surfer_scrape_ready":null,"_thumbnail_id":"12494","footnotes":null,"_links":{"self":[{"href":"https:\/\/webhosting.de\/fr\/wp-json\/wp\/v2\/posts\/12501","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/webhosting.de\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/webhosting.de\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/webhosting.de\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/webhosting.de\/fr\/wp-json\/wp\/v2\/comments?post=12501"}],"version-history":[{"count":0,"href":"https:\/\/webhosting.de\/fr\/wp-json\/wp\/v2\/posts\/12501\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/webhosting.de\/fr\/wp-json\/wp\/v2\/media\/12494"}],"wp:attachment":[{"href":"https:\/\/webhosting.de\/fr\/wp-json\/wp\/v2\/media?parent=12501"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/webhosting.de\/fr\/wp-json\/wp\/v2\/categories?post=12501"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/webhosting.de\/fr\/wp-json\/wp\/v2\/tags?post=12501"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}