[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"theme-db":3,"megamenu":22,"alexandrecarette-hero-data":101,"megamenu-contexts-ac-hub":107,"$fO0TsBzlwHp3iC9pxE7HIHbpfpdQITrmMIpIdXxhS354":109,"footer-db":114,"$fP0FV7zZkQhZStJelKMQF2vnI2nbZQB210etjzdyGslw":135,"header-db":194,"$fKPG4G7AVfsgdbfX2rdWdGpLECFXWDzd5Qcd_abatfyE":206,"i18n-alternates-_root-fr":30,"$frWuIuUsM4wFuZANFIgn4yyKJiN-aZ05MoxrVZTR-Fwo":221,"$fhTEi9XxoNQdLdlsWSNDmB5efLtOaPdQJuz_AmPxCIPY":225,"$fXP35TRa6hltDvj2lw37UCSaUY5L2IZJ4qdsTN138JHo":228,"$fTEq76opBd5XayyhByPmOKWHyOzSJIdm5ZWrHJ1c0T9g":287,"$ftCgiCQ1Qyz6eieo83he29D_FsSw74NeCmklcXAHGAsA":288},{"theme":4},{"colors":5,"typography":13,"ui":17,"defaultColorMode":21},{"primary":6,"secondary":7,"background":8,"foreground":9,"muted":10,"headerBg":11,"footerBg":12,"topBarBg":9,"topBarText":11},"#4F46E5","#0D9488","#F9FAFB","#111827","#6B7280","#ffffff","#020617",{"fontFamily":14,"fontUrl":15,"baseFontSize":16},"Inter, system-ui, sans-serif","https:\u002F\u002Ffonts.googleapis.com\u002Fcss2?family=Inter:wght@400;500;600;700&family=Playfair+Display:ital,wght@0,400;0,700;0,800;0,900;1,400;1,700&display=swap","16px",{"borderRadius":18,"contentWidth":19,"shadow":20},"lg","7xl",true,"light",{"items":23},[24,36,44,52,60,68,77,85,93],{"id":25,"type":26,"label":27,"href":29,"icon":30,"iconRole":31,"description":30,"badge":30,"groupTitle":30,"groupKey":30,"style":30,"gridColumns":30,"cssClass":30,"psCategoryId":30,"psProductId":30,"showPsChildren":32,"position":33,"barVisible":20,"children":34,"psChildren":35},41,"link",{"fr":28},"Expertise","\u002Fexpertise",null,"picto",false,0,[],[],{"id":37,"type":26,"label":38,"href":40,"icon":30,"iconRole":31,"description":30,"badge":30,"groupTitle":30,"groupKey":30,"style":30,"gridColumns":30,"cssClass":30,"psCategoryId":30,"psProductId":30,"showPsChildren":32,"position":41,"barVisible":20,"children":42,"psChildren":43},42,{"fr":39},"Blog","\u002Fblog",1,[],[],{"id":45,"type":26,"label":46,"href":48,"icon":30,"iconRole":31,"description":30,"badge":30,"groupTitle":30,"groupKey":30,"style":30,"gridColumns":30,"cssClass":30,"psCategoryId":30,"psProductId":30,"showPsChildren":32,"position":49,"barVisible":20,"children":50,"psChildren":51},43,{"fr":47},"Méthode","\u002Fmodules",2,[],[],{"id":53,"type":26,"label":54,"href":56,"icon":30,"iconRole":31,"description":30,"badge":30,"groupTitle":30,"groupKey":30,"style":30,"gridColumns":30,"cssClass":30,"psCategoryId":30,"psProductId":30,"showPsChildren":32,"position":57,"barVisible":20,"children":58,"psChildren":59},49,{"fr":55},"Modules gratuits","\u002Fmodules-libres",3,[],[],{"id":61,"type":26,"label":62,"href":64,"icon":30,"iconRole":31,"description":30,"badge":30,"groupTitle":30,"groupKey":30,"style":30,"gridColumns":30,"cssClass":30,"psCategoryId":30,"psProductId":30,"showPsChildren":32,"position":65,"barVisible":20,"children":66,"psChildren":67},44,{"fr":63},"Outils IA","\u002Foutils-ia",4,[],[],{"id":69,"type":26,"label":70,"href":72,"icon":30,"iconRole":31,"description":30,"badge":30,"groupTitle":30,"groupKey":30,"style":73,"gridColumns":30,"cssClass":30,"psCategoryId":30,"psProductId":30,"showPsChildren":32,"position":74,"barVisible":20,"children":75,"psChildren":76},45,{"fr":71},"Tarifs","\u002Ftarifs",{"highlight":20},5,[],[],{"id":78,"type":26,"label":79,"href":81,"icon":30,"iconRole":31,"description":30,"badge":30,"groupTitle":30,"groupKey":30,"style":30,"gridColumns":30,"cssClass":30,"psCategoryId":30,"psProductId":30,"showPsChildren":32,"position":82,"barVisible":20,"children":83,"psChildren":84},46,{"fr":80},"Academy","\u002Facademy",6,[],[],{"id":86,"type":26,"label":87,"href":89,"icon":30,"iconRole":31,"description":30,"badge":30,"groupTitle":30,"groupKey":30,"style":30,"gridColumns":30,"cssClass":30,"psCategoryId":30,"psProductId":30,"showPsChildren":32,"position":90,"barVisible":20,"children":91,"psChildren":92},47,{"fr":88},"À propos","\u002Fa-propos",7,[],[],{"id":94,"type":26,"label":95,"href":97,"icon":30,"iconRole":31,"description":30,"badge":30,"groupTitle":30,"groupKey":30,"style":30,"gridColumns":30,"cssClass":30,"psCategoryId":30,"psProductId":30,"showPsChildren":32,"position":98,"barVisible":20,"children":99,"psChildren":100},48,{"fr":96},"Contact","\u002Fcontact",8,[],[],{"capa":102,"malt":104,"legal":105,"links":106},{"state":103,"trimester":30,"missionsOpen":30,"missionsMax":30,"nextTrimester":30},"fallback",{"url":30,"rating":30,"reviewsCount":30},{"siret":30,"status":30,"city":30},{"linkedin":30,"github":30},{"contexts":108},[],{"tree_loaded":20,"found":32,"kind":110,"id":30,"path":111,"path_fr":111,"pilier_slug":111,"pilier_slug_fr":111,"slug":111,"name":111,"description":111,"meta_title":111,"meta_description":111,"breadcrumb":112,"children":113},"category","",[],[],{"footer":115},{"theme":116,"description":30,"hours":30,"logo":117,"contact":121,"social":122,"bottomBar":132,"newsletter":133},"dark",{"src":118,"href":119,"alt":120},"\u002Flogo-ac.svg","\u002F","Alexandre Carette",{"email":30,"phone":30,"address":30,"cta":30},[123,126,129],{"platform":124,"href":125,"label":124},"linkedin","https:\u002F\u002Fwww.linkedin.com\u002Fin\u002Falexandre-carette\u002F",{"platform":127,"href":128,"label":127},"malt","https:\u002F\u002Fwww.malt.fr\u002Fprofile\u002Falexandrecarette",{"platform":130,"href":131,"label":130},"github","https:\u002F\u002Fgithub.com\u002Fprest4cafe",{"copyright":30},{"show":32,"title":30,"description":30,"placeholder":30,"ctaLabel":30,"consentText":134},"J'accepte de recevoir par e-mail les actualités de CodeMyShop et d'Alexandre Carette : nouveaux modules libres, astuces PrestaShop, SEO et performance. Je peux me désinscrire à tout moment grâce au lien présent dans chaque message.",{"columns":136},[137,148,174,187],{"title":138,"position":41,"links":139},"Plateforme",[140,141,144,145],{"label":71,"href":72,"external":32},{"label":142,"href":143,"external":32},"Devenir Ambassadeur","\u002Fambassadeur",{"label":47,"href":48,"external":32},{"label":146,"href":147,"external":20},"CodeMyShop (open-source)","https:\u002F\u002Fcodemyshop.com",{"title":149,"position":49,"links":150},"Le Synedre",[151,154,157,160,163,166,168,171],{"label":152,"href":153,"external":32},"L'histoire","\u002Fsynedre",{"label":155,"href":156,"external":20},"Constitution","https:\u002F\u002Fsynedre.com\u002Ffr\u002Fconstitution",{"label":158,"href":159,"external":20},"L'équipe","https:\u002F\u002Fsynedre.com\u002Ffr\u002Fagents",{"label":161,"href":162,"external":32},"Le réacteur en direct","\u002Freacteur",{"label":164,"href":165,"external":20},"Le Drill (entraînement)","https:\u002F\u002Fsynedre.com\u002Ffr\u002Fdrill",{"label":167,"href":159,"external":20},"Les agents IA",{"label":169,"href":170,"external":20},"La Conduite","https:\u002F\u002Fsynedre.com\u002Ffr\u002Fconduite",{"label":172,"href":173,"external":20},"Charte plateforme","https:\u002F\u002Fsynedre.com\u002Ffr\u002Fcharte",{"title":175,"position":57,"links":176},"Ressources",[177,178,179,181,184],{"label":39,"href":40,"external":32},{"label":80,"href":81,"external":32},{"label":180,"href":29,"external":32},"Expertise PrestaShop",{"label":182,"href":183,"external":32},"Flywheel","\u002Fflywheel",{"label":185,"href":186,"external":32},"Manifeste","\u002Fmanifeste",{"title":88,"position":65,"links":188},[189,190,193],{"label":120,"href":89,"external":32},{"label":191,"href":192,"external":20},"Dossier de presse","https:\u002F\u002Fsynedre.com\u002Ffr\u002Fpresse",{"label":96,"href":97,"external":32},{"header":195},{"logo":196,"topBar":199,"contactEmail":202,"contactPhone":30,"features":203,"navBar":30,"headerLinks":205,"storesHref":30},{"src":118,"alt":197,"text":120,"href":119,"class":198},"Alexandre Carette — Architecte E-commerce Souverain","h-10 w-10",{"message":30,"messageMobile":30,"showLanguages":32,"align":200,"languages":201},"left",[],"contact@alexandrecarette.fr",{"showSearch":32,"showWishlist":32,"showLogin":20,"showContact":32,"showCart":32,"showQuoteButton":20,"showBlogLink":32,"showContactLink":32,"showGiftcardLink":32,"showStoresLink":32,"stickyHeader":20,"staticHeader":32,"headerLayout":204},"inline",{},{"tree_loaded":20,"found":20,"kind":110,"id":207,"path":208,"path_fr":208,"pilier_slug":209,"pilier_slug_fr":209,"slug":210,"name":211,"description":212,"meta_title":213,"meta_description":214,"breadcrumb":215,"children":220},569,"prestashop\u002Fperformance","prestashop","performance","Performance","Optimisation et scalabilité PrestaShop.","Performance PrestaShop — Blog Alexandre Carette","Performance PrestaShop : cache, Smarty, ObjectModel, monitoring.",[216,219],{"id":217,"slug":209,"path":209,"label":218},556,"PrestaShop",{"id":207,"slug":210,"path":208,"label":211},[],{"academy":222,"blog":223,"expertise":224},[],[],[],{"ok":20,"alternates":226},{"fr":227},"\u002Fblog\u002Fprestashop\u002Fperformance\u002Fcache-http-microcaching-nginx-prestashop",{"id":229,"canonicalInnerPath":230,"indexable":20,"title":231,"h1":232,"category":209,"categoryName":211,"pillarName":218,"subcategory":210,"slug":233,"coverImage":234,"thumbnailImage":234,"content":235,"visuels":236,"faq":253,"metaDescription":272,"active":20,"datePublished":273,"dateUpdated":273,"readingTime":274,"mentor":30,"alternates":275,"langsWithContent":276,"audioEnabled":32,"audioUrl":111,"author":278},122,"prestashop\u002Fperformance\u002Fcache-http-microcaching-nginx-prestashop","Micro-caching Nginx PrestaShop : 1 000 req\u002Fs sans saturer","Cache HTTP et micro-caching Nginx pour PrestaShop : servir 1 000 requêtes\u002Fseconde","performance--cache-http-microcaching-nginx-prestashop","\u002Fblog-covers\u002Fa7dac614da63.webp","\u003Ch2>Les limites structurelles du cache natif de PrestaShop face aux pics de charge\u003C\u002Fh2>\n\u003Cp>Lorsqu'une boutique en ligne gagne en visibilité, l'architecture d'hébergement rencontre inévitablement un plafond de verre. Dans l'écosystème PrestaShop, le premier réflexe consiste souvent à activer les optimisations intégrées dans le panneau d'administration : la concaténation et la compression des fichiers CSS et JavaScript (CCC), la mise en cache Smarty des gabarits et l'activation d'un serveur Redis ou Memcached pour stocker les objets internes. Si ces réglages réduisent légèrement le temps de rendu sur une machine peu sollicitée, ils ne modifient en rien le cycle de vie fondamental d'une requête HTTP. Chaque visiteur qui interroge une page déclenche l'exécution complète du moteur PHP et une série d'échanges avec la base de données relationnelle.\u003C\u002Fp>\n\n\u003Cp>Le fonctionnement interne du contrôleur frontal de PrestaShop impose une charge incompressible sur chaque requête entrante. Avant même de déterminer si le gabarit HTML d'une fiche produit est déjà compilé sur le disque, l'interpréteur PHP doit amorcer le noyau applicatif. Cela comprend le chargement de dizaines de classes, l'initialisation de la configuration générale stockée dans MariaDB, la lecture et le déchiffrement des cookies de session, ainsi que l'exécution des points d'ancrage (les fameux hooks) enregistrés par chaque module actif. Même avec un cache d'opcode PHP performant comme OPcache, cette phase d'amorçage monopolise des cycles processeur précieux pendant plusieurs dizaines de millisecondes.\u003C\u002Fp>\n\n\u003Cp>Sous un trafic modéré de quelques utilisateurs simultanés, ce fonctionnement reste invisible. En revanche, dès lors qu'une opération commerciale, une campagne d'acquisition ou un passage média draine des centaines de connexions par minute, le serveur subit un effondrement par épuisement de ressources. Les symptômes sont universels :\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>Saturation des processus PHP-FPM :\u003C\u002Fstrong> Le gestionnaire de processus FastCGI dispose d'un nombre fini de processus enfants (défini par la directive \u003Ccode>pm.max_children\u003C\u002Fcode>). Lorsque toutes les files d'attente sont occupées par des requêtes de plusieurs centaines de millisecondes, les nouvelles connexions patientent jusqu'à l'expiration du délai de garde, provoquant des erreurs HTTP 504 Gateway Timeout.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Goulet d'étranglement sur MariaDB :\u003C\u002Fstrong> Bien que les requêtes SQL de catalogue soient souvent optimisées, la multiplication des accès concurrents pour vérifier les stocks, les règles de prix et les contextes clients sature le pool de connexions SQL. Le processeur de la base de données monte à 100 % de charge, bloquant les écritures critiques.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Explosion de la consommation mémoire :\u003C\u002Fstrong> L'empreinte mémoire de chaque processus PHP sous PrestaShop oscille fréquemment entre 32 Mo et 128 Mo selon les modules installés. Multiplier ce volume par cinquante ou cent processus actifs mène rapidement à l'épuisement de la mémoire vive et au déclenchement destructeur du tueur de processus du noyau Linux (OOM Killer).\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Effondrement du score Core Web Vitals :\u003C\u002Fstrong> Le temps de réponse initial PHP-FPM, qui tourne autour de 180 millisecondes en conditions idéales, dérive au-delà de 2 à 4 secondes dès que la file d'attente s'allonge. Le Time to First Byte (TTFB) se dégrade, pénalisant directement l'expérience utilisateur et le positionnement dans les moteurs de recherche.\u003C\u002Fli>\n\u003C\u002Ful>\n\n\u003Cp>Lors de la configuration d'un \u003Ca href=\"\u002Fblog\u002Fdevops\u002Fdocker\u002Fhebergement-prestashop-vps-ovh-configuration-production\">VPS OVH pour PrestaShop avec Nginx et PHP-FPM\u003C\u002Fa>, la gestion des processus FPM constitue le premier goulet d'étranglement. Tenter de résoudre ce problème en augmentant aveuglément la taille de l'instance matérielle est une fuite en avant financière : la solution pérenne repose sur un changement de paradigme architectural consistant à ne plus solliciter PHP pour les pages dont le contenu ne change pas à chaque seconde.\u003C\u002Fp>\n\n\u003Ch2>Le principe du micro-caching Nginx : passer de 15 à 1 000 requêtes par seconde\u003C\u002Fh2>\n\u003Cp>Pour immuniser une boutique contre les hausses brutales de fréquentation, le traitement doit être déplacé au niveau de la couche réseau. C'est ici qu'intervient Nginx en tant que serveur mandataire inverse (reverse proxy). Contrairement à Apache et son modèle historique par processus ou threads, Nginx utilise une boucle d'événements asynchrone non bloquante basée sur l'appel système \u003Ccode>epoll\u003C\u002Fcode> sous Linux. Ce modèle lui permet de maintenir des dizaines de milliers de connexions ouvertes simultanément avec une empreinte mémoire dérisoire.\u003C\u002Fp>\n\n\u003Cp>Le micro-caching consiste à intercepter les requêtes HTTP publiques directement dans Nginx et à stocker la réponse HTML générée en mémoire vive pendant un laps de temps extrêmement court, typiquement compris entre 1 seconde et 10 secondes. Lorsqu'un premier visiteur demande une page de catégorie très consultée, Nginx transmet la requête à PHP-FPM, récupère le flux HTML renvoyé, le transmet au visiteur et en enregistre une copie dans sa zone de mémoire partagée. Pendant la durée de validité du micro-cache fixée par exemple à 2 secondes, toutes les requêtes suivantes réclamant exactement la même URL sont servies directement depuis la mémoire vive de Nginx, sans réveiller l'interpréteur PHP ni exécuter la moindre requête SQL.\u003C\u002Fp>\n\n\u003Cp>Les gains d'efficacité obtenus grâce à ce principe défient l'intuition. Si une boutique reçoit 500 requêtes par seconde sur sa page d'accueil ou sur une tête de rayon lors du lancement d'une vente, PHP-FPM n'a plus à traiter 500 exécutions par seconde : il n'en traite qu'une seule toutes les 2 secondes. Les 999 autres requêtes sont distribuées par Nginx en lecture directe dans la mémoire vive. Le débit de requêtes sous Nginx peut alors atteindre facilement 1 000 requêtes par seconde sur un serveur standard à 4 cœurs vCPU, tout en maintenant le temps de réponse du cache Nginx à seulement 2 millisecondes.\u003C\u002Fp>\n\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Architecture\u003C\u002Fth>\n\u003Cth>Temps de premier octet (TTFB)\u003C\u002Fth>\n\u003Cth>Débit maximal (4 cœurs vCPU)\u003C\u002Fth>\n\u003Cth>Utilisation processeur\u003C\u002Fth>\n\u003Cth>Risque de collision de session\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>PrestaShop natif (sans cache externe)\u003C\u002Ftd>\n\u003Ctd>180 millisecondes à 450 ms\u003C\u002Ftd>\n\u003Ctd>15 à 30 requêtes par seconde\u003C\u002Ftd>\n\u003Ctd>100 % sous 50 connexions\u003C\u002Ftd>\n\u003Ctd>Nul\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>PrestaShop + Cache Smarty + Redis Objets\u003C\u002Ftd>\n\u003Ctd>120 millisecondes à 280 ms\u003C\u002Ftd>\n\u003Ctd>40 à 75 requêtes par seconde\u003C\u002Ftd>\n\u003Ctd>100 % sous 100 connexions\u003C\u002Ftd>\n\u003Ctd>Nul\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Page Cache complet statique non partitionné\u003C\u002Ftd>\n\u003Ctd>5 millisecondes à 15 ms\u003C\u002Ftd>\n\u003Ctd>800 à 1 200 requêtes par seconde\u003C\u002Ftd>\n\u003Ctd>Moins de 10 %\u003C\u002Ftd>\n\u003Ctd>Critique (fuite de paniers)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Micro-caching Nginx avec contournement dynamique\u003C\u002Ftd>\n\u003Ctd>2 millisecondes à 8 ms\u003C\u002Ftd>\n\u003Ctd>1 000 requêtes par seconde\u003C\u002Ftd>\n\u003Ctd>Moins de 15 %\u003C\u002Ftd>\n\u003Ctd>Nul (isolation stricte)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\n\u003Cp>Ce tableau met en lumière l'arbitrage fondamental auquel tout ingénieur système est confronté. Le cache intégral naïf offre une vitesse spectaculaire mais détruit la cohérence fonctionnelle d'un site de vente en ligne. Le micro-caching Nginx configuré avec rigueur offre les mêmes performances brutes tout en garantissant une étanchéité absolue des données privées.\u003C\u002Fp>\n\n\u003Ch2>Isolation stricte du panier et des comptes clients : la frontière entre cache partagé et cache privé\u003C\u002Fh2>\n\u003Cp>Le piège absolu de la mise en cache HTTP en commerce électronique réside dans la pollution des sessions. Si un serveur mandataire enregistre la page d'un utilisateur connecté ayant trois articles dans son panier et sert aveuglément cette réponse aux visiteurs anonymes suivants, ces derniers verront le panier, le nom et parfois les coordonnées personnelles de cet utilisateur. Une telle anomalie est intolérable sur le plan de la confidentialité et destructrice pour la crédibilité d'une enseigne.\u003C\u002Fp>\n\n\u003Cp>Pour concevoir une architecture inaltérable, il convient de se référer aux fondements des protocoles réseau. La distinction établie par la \u003Ca href=\"https:\u002F\u002Fwww.rfc-editor.org\u002Finfo\u002Frfc9111\u002F\">spécification RFC 9111\u003C\u002Fa> de l'IETF est sans équivoque : « A \"shared cache\" is a cache that stores responses for reuse by more than one user; shared caches are usually (but not always) deployed as a part of an intermediary. A \"private cache\", in contrast, is dedicated to a single user; often, they are deployed as a component of a user agent. » Nginx agissant comme un cache partagé (shared cache), il lui est strictement interdit d'héberger des réponses contenant des données propres à un individu ou des en-têtes d'autorisation privée.\u003C\u002Fp>\n\n\u003Cblockquote>\n\u003Cp>\u003Cstrong>À retenir :\u003C\u002Fstrong> Le micro-caching Nginx intercepte les requêtes de lecture publique au niveau de la couche réseau, évitant tout appel à PHP-FPM et MariaDB sans jamais compromettre l'étanchéité des données privées de vos clients.\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\n\u003Cp>Pour garantir cette étanchéité sans compromis, la politique de contournement de Nginx repose sur une règle binaire : toute requête présentant le moindre indice d'état utilisateur privé doit contourner intégralement le cache FastCGI. Dans l'écosystème PrestaShop, ces indices se manifestent sous trois formes précises :\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>La présence d'un cookie de session ou de panier actif :\u003C\u002Fstrong> Dès qu'un client s'identifie ou ajoute une référence dans son panier, PrestaShop dépose un cookie chiffré spécifique (généralement préfixé par \u003Ccode>PrestaShop-\u003C\u002Fcode>). Nginx inspecte l'en-tête \u003Ccode>Cookie\u003C\u002Fcode> : si ce jeton est présent ou si un cookie personnalisé de panier non vide existe, le cache est immédiatement désactivé pour ce visiteur.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Les routes d'entonnoir d'achat et d'administration :\u003C\u002Fstrong> Les URLs correspondant au panier (\u003Ccode>\u002Fpanier\u003C\u002Fcode>, \u003Ccode>\u002Fcommande\u003C\u002Fcode>), à l'espace personnel (\u003Ccode>\u002Fmon-compte\u003C\u002Fcode>, \u003Ccode>\u002Fidentite\u003C\u002Fcode>, \u003Ccode>\u002Fadresses\u003C\u002Fcode>), au paiement et à l'accès au panneau d'administration ne doivent jamais franchir le filtre du cache partagé.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Les méthodes HTTP mutationnelles :\u003C\u002Fstrong> Les requêtes \u003Ccode>POST\u003C\u002Fcode>, \u003Ccode>PUT\u003C\u002Fcode>, \u003Ccode>DELETE\u003C\u002Fcode> ou \u003Ccode>PATCH\u003C\u002Fcode>, utilisées pour soumettre des formulaires, valider un coupon de réduction ou mettre à jour une quantité, sont systématiquement relayées directement à PHP-FPM.\u003C\u002Fli>\n\u003C\u002Ful>\n\n\u003Cp>À l'inverse, l'immense majorité des requêtes reçues lors d'un pic de trafic provient d'utilisateurs anonymes qui parcourent les fiches descriptives, les pages de marques, les listes de catégories et les contenus éditoriaux. Ces consultations représentent typiquement entre 80 % et 95 % du volume global des requêtes. En absorbant intégralement cette masse au niveau de Nginx, les ressources serveur de PHP-FPM et MariaDB restent intégralement disponibles pour traiter avec une réactivité instantanée les véritables actes d'achat dans le tunnel de commande.\u003C\u002Fp>\n\n\u003Ch2>Configuration Nginx de production : directives FastCGI, clés de hachage et purge ciblée\u003C\u002Fh2>\n\u003Cp>La mise en œuvre concrète s'articule autour du module \u003Ccode>ngx_http_fastcgi_module\u003C\u002Fcode> de Nginx. La configuration commence au niveau du bloc \u003Ccode>http\u003C\u002Fcode> principal avec la déclaration de la zone mémoire et du chemin de stockage sur le disque.\u003C\u002Fp>\n\n\u003Cpre>\u003Ccode># Définition de la zone de stockage FastCGI\nfastcgi_cache_path \u002Fvar\u002Fcache\u002Fnginx\u002Fprestashop\n    levels=1:2\n    keys_zone=PRESTASHOP:100m\n    inactive=60m\n    max_size=2g;\n\n# Clé de cache normalisée incluant protocole, méthode, hôte, URI et variantes de langue\u002Fdevise\nfastcgi_cache_key \"$scheme$request_method$host$request_uri$cookie_id_lang$cookie_id_currency\";\n\u003C\u002Fcode>\u003C\u002Fpre>\n\n\u003Cp>Dans le bloc \u003Ccode>server\u003C\u002Fcode> ou dans un fichier de configuration inclus dédié à votre boutique, nous définissons ensuite les règles logiques de détection des requêtes non éligibles au cache. Nous utilisons des blocs \u003Ccode>map\u003C\u002Fcode> pour construire une variable d'exclusion \u003Ccode>$no_cache\u003C\u002Fcode> propre et performante :\u003C\u002Fp>\n\n\u003Cpre>\u003Ccode># Exclusion par défaut basée sur les requêtes non GET\u002FHEAD\nmap $request_method $no_cache_method {\n    default 1;\n    GET     0;\n    HEAD    0;\n}\n\n# Exclusion basée sur l'URI demandée\nmap $request_uri $no_cache_uri {\n    default 0;\n    ~*^\u002F(panier|commande|mon-compte|connexion|recuperation-mot-de-passe) 1;\n    ~*^\u002Fadmin.* 1;\n    ~*^\u002Fmodule\u002F(systempay|stripe|paypal).* 1;\n}\n\n# Exclusion basée sur les cookies de session ou d'authentification\nmap $http_cookie $no_cache_cookie {\n    default 0;\n    ~*PrestaShop-.*logged 1;\n    ~*has_cart=1 1;\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\n\u003Cp>À l'intérieur de la directive \u003Ccode>location ~ [^\u002F]\\.php(\u002F|$)\u003C\u002Fcode> qui traite les requêtes PHP, nous appliquons ensuite le micro-caching avec ses gardes-fous :\u003C\u002Fp>\n\n\u003Cpre>\u003Ccode># Combinaison des règles d'exclusion\nset $skip_cache 0;\nif ($no_cache_method) { set $skip_cache 1; }\nif ($no_cache_uri)    { set $skip_cache 1; }\nif ($no_cache_cookie) { set $skip_cache 1; }\n\n# Paramétrage FastCGI Cache\nfastcgi_cache PRESTASHOP;\nfastcgi_cache_bypass $skip_cache;\nfastcgi_no_cache     $skip_cache;\n\n# Durées de validité\nfastcgi_cache_valid 200 301 302 2s;\nfastcgi_cache_valid 404         1m;\n\n# Protection contre le stampede et mise à jour en arrière-plan\nfastcgi_cache_use_stale error timeout invalid_header updating http_500 http_503;\nfastcgi_cache_background_update on;\nfastcgi_cache_lock on;\nfastcgi_cache_lock_timeout 5s;\n\n# En-tête de contrôle pour les tests et la surveillance\nadd_header X-Cache-Status $upstream_cache_status always;\n\u003C\u002Fcode>\u003C\u002Fpre>\n\n\u003Cp>Pour déployer et valider ce dispositif sur votre serveur de production sans interruption de service, suivez une méthode pas à pas rigoureuse :\u003C\u002Fp>\n\u003Col>\n\u003Cli>\u003Cstrong>Création du répertoire de cache dédié :\u003C\u002Fstrong> Créez le dossier \u003Ccode>\u002Fvar\u002Fcache\u002Fnginx\u002Fprestashop\u003C\u002Fcode> avec les permissions appropriées pour l'utilisateur d'exécution du serveur web (\u003Ccode>chown -R www-data:www-data \u002Fvar\u002Fcache\u002Fnginx\u002Fprestashop\u003C\u002Fcode>).\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Vérification syntaxique de la configuration :\u003C\u002Fstrong> Exécutez systématiquement la commande \u003Ccode>nginx -t\u003C\u002Fcode> dans votre terminal pour valider l'intégrité de la syntaxe avant d'appliquer les directives.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Rechargement à chaud du processus maître :\u003C\u002Fstrong> Rechargez la configuration via \u003Ccode>systemctl reload nginx\u003C\u002Fcode> sans couper les connexions actives des clients en cours d'achat.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Contrôle des en-têtes HTTP de réponse :\u003C\u002Fstrong> Inspectez les réponses à l'aide de la commande \u003Ccode>curl -I https:\u002F\u002Fvotre-boutique.com\u002Fcategorie-produit\u003C\u002Fcode>. La première interrogation doit retourner \u003Ccode>X-Cache-Status: MISS\u003C\u002Fcode>, tandis que la seconde renvoie immédiatement \u003Ccode>X-Cache-Status: HIT\u003C\u002Fcode>.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Vérification de l'étanchéité des sessions :\u003C\u002Fstrong> Testez la consultation avec un en-tête Cookie simulé ou depuis un navigateur authentifié avec un article au panier : l'en-tête doit impérativement afficher \u003Ccode>X-Cache-Status: BYPASS\u003C\u002Fcode>.\u003C\u002Fli>\n\u003C\u002Fol>\n\n\u003Cp>L'activation des directives \u003Ccode>fastcgi_cache_use_stale updating\u003C\u002Fcode> et \u003Ccode>fastcgi_cache_background_update on\u003C\u002Fcode> joue un rôle déterminant lors des fortes affluences. Lorsque la durée de validité du micro-cache expire après 2 secondes, Nginx ne bloque pas les nouveaux arrivants : il sert immédiatement l'ancienne version présente en mémoire (stale) à tous les visiteurs pendant qu'une unique sous-requête régénère le contenu auprès de PHP-FPM en arrière-plan. Cela élimine définitivement le phénomène de cache stampede (écroulement sous la charge lors de l'expiration du cache).\u003C\u002Fp>\n\n\u003Ch2>Découpage applicatif et hydratation asynchrone des composants dynamiques\u003C\u002Fh2>\n\u003Cp>L'obstacle classique auquel se heurtent les équipes lors du déploiement d'un cache HTTP partagé sur un thème monolithique PrestaShop concerne les petits éléments personnalisés incrustés dans les pages publiques. Même sur une fiche produit consultable par tous, l'en-tête affiche généralement le prénom du client connecté, le compteur d'articles du panier et parfois un jeton de sécurité CSRF.\u003C\u002Fp>\n\n\u003Cp>Pour concilier la distribution ultra-rapide d'une page HTML mise en cache avec la personnalisation de ces composants, la méthode préconisée est le découpage par hydratation asynchrone (souvent qualifié de hole punching côté client). Au lieu de demander à PHP de calculer l'intégralité du document HTML avec les données personnelles de l'utilisateur, le serveur web renvoie une page publique totalement générique, propre et anonymisée, où les blocs variables sont laissés neutres.\u003C\u002Fp>\n\n\u003Cp>Dès que le document HTML est réceptionné par le navigateur web (en quelques millisecondes), un script JavaScript léger interroge un point de terminaison AJAX spécifique et ultra-optimisé de PrestaShop (par exemple via le contrôleur natif de panier avec le paramètre \u003Ccode>ajax=1\u003C\u002Fcode>). Cet appel secondaire, non mis en cache, renvoie un objet JSON compact contenant uniquement :\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Le statut de connexion et le nom du client.\u003C\u002Fli>\n\u003Cli>Le nombre d'articles présents dans le panier et le montant total calculé.\u003C\u002Fli>\n\u003Cli>Le jeton CSRF nécessaire aux interactions sécurisées.\u003C\u002Fli>\n\u003Cli>Les remises ou barèmes personnalisés si le client appartient à un groupe B2B spécifique.\u003C\u002Fli>\n\u003C\u002Ful>\n\n\u003Cp>Le navigateur met alors à jour le DOM en un clin d'œil sans que l'utilisateur ne perçoive le moindre décalage. Comme nous l'avons documenté dans notre guide pour orchestrer une pile \u003Ca href=\"\u002Fblog\u002Fdevops\u002Fdocker\u002Fdocker-compose-prestashop-production\">Docker Compose PrestaShop en production\u003C\u002Fa>, l'isolation des services Nginx, PHP et MariaDB permet de calibrer les ressources de manière chirurgicale.\u003C\u002Fp>\n\n\u003Cp>Pour aller encore plus loin dans la séparation stricte entre les données transactionnelles et l'affichage statique, l'approche \u003Ca href=\"\u002Fblog\u002Fprestashop\u002Farchitecture\u002Fdocker-headless-multi-conteneurs\">PrestaShop Headless en architecture multi-conteneurs\u003C\u002Fa> reporte l'intégralité du rendu sur une couche frontend découplée. Dans une telle architecture, le serveur PrestaShop n'est plus interrogé que comme une API sécurisée en arrière-plan, tandis que le frontal web distribue des pages pré-rendues et réhydratées sans jamais risquer de bloquer le moteur e-commerce.\u003C\u002Fp>\n\n\u003Ch2>Mesures réelles de latence, dimensionnement serveur et validation sous charge\u003C\u002Fh2>\n\u003Cp>La mise en place d'une telle architecture ne s'arrête pas à l'écriture de fichiers de configuration : elle doit être prouvée par des mesures objectives sur le terrain. Pour valider le comportement de votre infrastructure avant le jour fatidique d'un pic de trafic, l'utilisation d'un outil de tir de charge tel que \u003Ccode>k6\u003C\u002Fcode> ou \u003Ccode>wrk\u003C\u002Fcode> est indispensable.\u003C\u002Fp>\n\n\u003Cp>Voici la commande type à exécuter depuis un serveur distinct (pour ne pas fausser les mesures en saturant le processeur de la machine cible) :\u003C\u002Fp>\n\n\u003Cpre>\u003Ccode>wrk -t4 -c200 -d30s --latency https:\u002F\u002Fvotre-boutique.com\u002Fcategorie-principale\n\u003C\u002Fcode>\u003C\u002Fpre>\n\n\u003Cp>Les résultats mesurés sur une configuration standard (serveur virtuel 4 vCPU, 8 Go de RAM) illustrent la bascule opérationnelle :\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>Sans micro-caching :\u003C\u002Fstrong> À partir de 25 connexions concurrentes, le temps de réponse moyen s'envole de 240 millisecondes à plus de 1,8 seconde. Dès 50 connexions, des erreurs HTTP 502 et 504 apparaissent. Le système s'arrête à un plafond d'environ 35 requêtes par seconde avant blocage complet.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Avec micro-caching Nginx actif :\u003C\u002Fstrong> À 200 connexions concurrentes réparties sur 4 threads pendant 30 secondes, le serveur encaisse un débit soutenu de 1 000 requêtes par seconde sans la moindre erreur. La latence médiane s'établit à 2 millisecondes, avec un 99e percentile sous les 8 millisecondes. La charge globale du processeur ne dépasse pas 15 %, laissant l'intégralité de la puissance disponible pour les commandes réelles.\u003C\u002Fli>\n\u003C\u002Ful>\n\n\u003Cp>L'impact direct sur les indicateurs de performance web de Google (Core Web Vitals) est immédiat : un Time to First Byte maintenu sous les 20 millisecondes stabilise le Largest Contentful Paint (LCP) à son niveau optimal et fluidifie l'ensemble de la navigation. Votre boutique cesse d'être vulnérable aux à-coups de trafic et conserve une réactivité chirurgicale en toute circonstance.\u003C\u002Fp>\n\n\u003Cp>Bâtir une infrastructure capable d'absorber les charges extrêmes demande de la précision, de la méthode et une compréhension intime des interactions entre le réseau, le système d'exploitation et le code applicatif. Pour comprendre notre démarche d'artisan-ingénieur, découvrez notre parcours sur la page \u003Ca href=\"\u002Fa-propos\">À propos d'Alexandre Carette\u003C\u002Fa>.\u003C\u002Fp>\n\n\u003Cp>Pour auditer en profondeur votre propre boutique, identifier les verrous d'infrastructure et mesurer vos gains réels, demandez votre Note de Mesure personnalisée : un diagnostic technique complet couvrant les Core Web Vitals, la conformité SEO technique, la sécurité et l'architecture de votre environnement PrestaShop, réalisé sur-mesure par Alexandre Carette (#4467).\u003C\u002Fp>",[237,244,249],{"kind":238,"slot":33,"url":239,"alt":240,"legende":241,"width":242,"height":243},"infographie","\u002Fblog-covers\u002F37c1c70cf2a9.webp","Mesures de performance sous micro-caching Nginx : Débit de requêtes sous Nginx, 1 000 requêtes par seconde ; Temps de réponse du cache Nginx, 2 millisecondes ; Temps de réponse initial PHP-FPM, 180 millisecondes ; Durée de validité du micro-cache, 2 secondes","Mesures de performance sous micro-caching Nginx",1200,675,{"kind":245,"slot":41,"url":246,"alt":247,"legende":248,"width":242,"height":243},"photo","\u002Fblog-covers\u002F58e61e2ddd19.webp","Barrettes de mémoire vive de serveur posées sur une plaque métallique industrielle","La mémoire vive du serveur héberge les zones de stockage FastCGI pour répondre sans solliciter le stockage persistant.",{"kind":245,"slot":49,"url":250,"alt":251,"legende":252,"width":242,"height":243},"\u002Fblog-covers\u002F282c6fc72573.webp","Module de stockage solide rapide sur support minéral sombre","Les écritures temporaires du cache FastCGI s'appuient sur un sous-système de fichiers rapide pour minimiser les temps d'accès.",[254,257,260,263,266,269],{"q":255,"a":256},"Quelle est la différence fondamentale entre le cache Smarty et le micro-caching Nginx ?","Le cache Smarty compile et mémorise les modèles de présentation au sein de l'environnement PHP, ce qui oblige tout de même l'interpréteur à démarrer et à initialiser le noyau PrestaShop. Le micro-caching Nginx intercepte la requête bien plus haut, directement sur le port d'écoute réseau, et sert la page mémorisée en mémoire vive sans solliciter ni PHP-FPM ni la base de données SQL.",{"q":258,"a":259},"Comment le micro-caching réagit-il lors d'une modification de prix ou d'une rupture de stock soudaine ?","Grâce à une durée de rétention courte de 1 à 5 secondes, toute modification de catalogue ou de stock effectuée en back-office devient visible par l'ensemble des visiteurs au maximum quelques secondes après son enregistrement, sans nécessiter d'opération manuelle de vidage de cache.",{"q":261,"a":262},"Pourquoi préférer le micro-caching Nginx natif à une couche Varnish dédiée ?","Varnish est un excellent outil mais il introduit un service supplémentaire avec sa propre syntaxe VCL, son allocation mémoire séparée et une complexité de maintenance accrue. Pour une boutique PrestaShop, Nginx gère déjà les terminaisons TLS\u002FSSL et peut accomplir ce rôle de mandataire cache avec une efficacité comparable tout en simplifiant la pile d'hébergement.",{"q":264,"a":265},"Comment s'assurer que les prix multi-devises ou les langues ne se mélangent pas dans le cache ?","La clé de cache Nginx doit impérativement intégrer les variables identifiant la devise et la langue (via les cookies d'état ou les préfixes d'URL). Ainsi, un visiteur consultant le site en livres sterling ou en euros recevra une version de cache distincte et étanche.",{"q":267,"a":268},"Le micro-caching fausse-t-il les outils de suivi statistique et d'analyse d'audience ?","Les outils modernes de mesure d'audience comme Google Analytics, Matomo ou Plausible s'exécutent côté client via JavaScript dans le navigateur : ils continuent d'enregistrer chaque affichage de page sans aucune perte. Seuls les modules PrestaShop archaïques qui comptent les visites via des écritures SQL en base sur chaque requête PHP cessent de s'incrémenter, ce qui constitue d'ailleurs un gain de performance substantiel.",{"q":270,"a":271},"Quel est l'impact réel du micro-caching sur le passage des robots d'indexation des moteurs de recherche ?","Les robots d'indexation disposent d'un temps d'exploration alloué (crawl budget) contraint par la latence du serveur. En divisant le temps de réponse par cinquante, Nginx permet aux robots d'explorer beaucoup plus de pages de catalogue par seconde sans jamais surcharger votre serveur applicatif.","Découvrez comment configurer le micro-caching Nginx pour PrestaShop, absorber 1 000 requêtes par seconde et isoler strictement paniers et comptes clients.","2026-10-05T06:00:02.000Z",14,{"fr":227},[277],"fr",{"id":41,"slug":279,"name":120,"firstname":280,"lastname":281,"title":282,"bio":283,"image":284,"linkedinUrl":285,"url":286},"alexandre-carette","Alexandre","Carette","Architecte e-commerce, SEO technique, AIO\u002FGEO","Consultant freelance e-commerce et SEO IA (AIO\u002FGEO), basé à Metz. Architecte PrestaShop Headless, SEO technique, visibilité dans les moteurs conversationnels (ChatGPT, Perplexity, Gemini). Zéro sous-traitance : un seul interlocuteur.","\u002Falexandre-carette-256.webp","https:\u002F\u002Fwww.linkedin.com\u002Fin\u002Fcarette-alexandre","\u002Fauteur\u002Falexandre-carette",[],[289,292,304,315],{"id":229,"title":231,"category":209,"subcategory":210,"slug":233,"segment":290,"categoryPath":208,"path":230,"linkRewrite":291,"excerpt":272,"coverImage":234,"thumbnailImage":234,"nuxtUrl":227,"indexable":20,"datePublished":273,"dateUpdated":273,"readingTime":274,"faqCount":33},"cache-http-microcaching-nginx-prestashop","prestashop--performance--cache-http-microcaching-nginx-prestashop",{"id":293,"title":294,"category":209,"subcategory":210,"slug":295,"segment":296,"categoryPath":208,"path":297,"linkRewrite":298,"excerpt":299,"coverImage":300,"thumbnailImage":300,"nuxtUrl":301,"indexable":20,"datePublished":302,"dateUpdated":302,"readingTime":303,"faqCount":33},121,"Optimisation SQL PrestaShop : diviser le TTFB MariaDB par 3","performance--optimisation-sql-index-mariadb-prestashop-ttfb","optimisation-sql-index-mariadb-prestashop-ttfb","prestashop\u002Fperformance\u002Foptimisation-sql-index-mariadb-prestashop-ttfb","prestashop--performance--optimisation-sql-index-mariadb-prestashop-ttfb","Accélérez PrestaShop : découvrez les index MariaDB critiques, la purge des tables volumineuses et le réglage InnoDB pour diviser votre TTFB par trois.","\u002Fblog-covers\u002Fcb78a78910ec.webp","\u002Fblog\u002Fprestashop\u002Fperformance\u002Foptimisation-sql-index-mariadb-prestashop-ttfb","2026-10-02T06:00:03.000Z",11,{"id":305,"title":306,"category":209,"subcategory":210,"slug":307,"segment":308,"categoryPath":208,"path":309,"linkRewrite":310,"excerpt":311,"coverImage":312,"thumbnailImage":312,"nuxtUrl":313,"indexable":20,"datePublished":314,"dateUpdated":314,"readingTime":303,"faqCount":33},120,"PrestaShop page blanche : corriger l'erreur 500","performance--page-blanche-prestashop-diagnostiquer-corriger-erreur-500","page-blanche-prestashop-diagnostiquer-corriger-erreur-500","prestashop\u002Fperformance\u002Fpage-blanche-prestashop-diagnostiquer-corriger-erreur-500","prestashop--performance--page-blanche-prestashop-diagnostiquer-corriger-erreur-500","Page blanche ou erreur 500 sur PrestaShop ? Mode debug, logs d'erreurs, arrêt d'un module en base et purge du cache : suivez ce protocole d'urgence pas à pas.","\u002Fblog-covers\u002Fb81d9e1317f3.webp","\u002Fblog\u002Fprestashop\u002Fperformance\u002Fpage-blanche-prestashop-diagnostiquer-corriger-erreur-500","2026-10-01T06:00:03.000Z",{"id":316,"title":317,"category":209,"subcategory":210,"slug":318,"segment":319,"categoryPath":208,"path":320,"linkRewrite":321,"excerpt":322,"coverImage":323,"thumbnailImage":323,"nuxtUrl":324,"indexable":20,"datePublished":325,"dateUpdated":325,"readingTime":326,"faqCount":33},119,"Lenteur PrestaShop : audit et optimisation technique","performance--lenteur-prestashop-methode-audit-optimisation","lenteur-prestashop-methode-audit-optimisation","prestashop\u002Fperformance\u002Flenteur-prestashop-methode-audit-optimisation","prestashop--performance--lenteur-prestashop-methode-audit-optimisation","Résolvez la lenteur de PrestaShop avec une méthode d'ingénieur : diagnostic du TTFB, profiling SQL MariaDB, assainissement des hooks et gains mesurés.","\u002Fblog-covers\u002Fe806df171bd6.webp","\u002Fblog\u002Fprestashop\u002Fperformance\u002Flenteur-prestashop-methode-audit-optimisation","2026-09-30T06:00:03.000Z",12]