[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"theme-db":3,"$fKnz2vuX4bZz1LbUTiuFsvSZ3e07l5_5fqNYp4Tzdhi8":22,"megamenu":103,"$fqD4aGaWgAdPrs1Mp8OpbL8e1vpSC8m3BsM-cqaAA4Jc":160,"header-db":198,"footer-db":211,"$frY90UhWoA_uwfF1Y7TcpwSNMkJ4pkZWr_ao5foEsB7Y":227},{"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",{"columns":23},[24,40,70,91],{"title":25,"links":26},"Plateforme",[27,31,34,37],{"label":28,"href":29,"external":30},"Offre Starter (2 500 €)","\u002Foffre-starter",false,{"label":32,"href":33,"external":30},"Devenir Ambassadeur","\u002Fambassadeur",{"label":35,"href":36,"external":30},"Modules PrestaShop","\u002Fmodules",{"label":38,"href":39,"external":20},"CodeMyShop.com","https:\u002F\u002Fcodemyshop.com",{"title":41,"links":42},"Le Synedre",[43,46,49,52,55,58,61,64,67],{"label":44,"href":45,"external":30},"L'histoire","\u002Fsynedre",{"label":47,"href":48,"external":30},"Constitution","\u002Fsynedre\u002Fconstitution",{"label":50,"href":51,"external":30},"L'équipe","\u002Fequipe",{"label":53,"href":54,"external":30},"Le réacteur en direct","\u002Freacteur",{"label":56,"href":57,"external":30},"Le Drill (entraînement)","\u002Fdrill",{"label":59,"href":60,"external":30},"Protocole de réunion","\u002Fsynedre\u002Freunion",{"label":62,"href":63,"external":30},"Les agents IA","\u002Fagents-ia",{"label":65,"href":66,"external":30},"La Conduite","\u002Fsynedre\u002Fconduite",{"label":68,"href":69,"external":30},"Charte plateforme","\u002Fsynedre\u002Fcharte",{"title":71,"links":72},"Ressources",[73,76,79,82,85,88],{"label":74,"href":75,"external":30},"Blog","\u002Fblog",{"label":77,"href":78,"external":30},"Academy","\u002Facademy",{"label":80,"href":81,"external":30},"Dictionnaire","\u002Fdictionnaire",{"label":83,"href":84,"external":30},"Expertise PrestaShop","\u002Fexpertise",{"label":86,"href":87,"external":30},"Flywheel","\u002Fflywheel",{"label":89,"href":90,"external":30},"Manifeste","\u002Fmanifeste",{"title":92,"links":93},"À propos",[94,97,100],{"label":95,"href":96,"external":30},"Alexandre Carette","\u002Fa-propos",{"label":98,"href":99,"external":30},"Dossier de presse","\u002Fpresse",{"label":101,"href":102,"external":30},"Contact","\u002Fcontact",{"items":104},[105,114,120,126,134,142,148,154],{"id":106,"type":107,"label":108,"href":84,"icon":110,"description":110,"badge":110,"groupTitle":110,"style":110,"gridColumns":110,"cssClass":110,"psCategoryId":110,"showPsChildren":30,"position":111,"children":112,"psChildren":113},41,"link",{"fr":109},"Expertise",null,0,[],[],{"id":115,"type":107,"label":116,"href":75,"icon":110,"description":110,"badge":110,"groupTitle":110,"style":110,"gridColumns":110,"cssClass":110,"psCategoryId":110,"showPsChildren":30,"position":117,"children":118,"psChildren":119},42,{"fr":74},1,[],[],{"id":121,"type":107,"label":122,"href":36,"icon":110,"description":110,"badge":110,"groupTitle":110,"style":110,"gridColumns":110,"cssClass":110,"psCategoryId":110,"showPsChildren":30,"position":123,"children":124,"psChildren":125},43,{"fr":35},2,[],[],{"id":127,"type":107,"label":128,"href":130,"icon":110,"description":110,"badge":110,"groupTitle":110,"style":110,"gridColumns":110,"cssClass":110,"psCategoryId":110,"showPsChildren":30,"position":131,"children":132,"psChildren":133},44,{"fr":129},"Outils IA","\u002Foutils-ia",3,[],[],{"id":135,"type":107,"label":136,"href":29,"icon":110,"description":110,"badge":110,"groupTitle":110,"style":138,"gridColumns":110,"cssClass":110,"psCategoryId":110,"showPsChildren":30,"position":139,"children":140,"psChildren":141},45,{"fr":137},"Offre Starter ✨",{"highlight":20},4,[],[],{"id":143,"type":107,"label":144,"href":78,"icon":110,"description":110,"badge":110,"groupTitle":110,"style":110,"gridColumns":110,"cssClass":110,"psCategoryId":110,"showPsChildren":30,"position":145,"children":146,"psChildren":147},46,{"fr":77},5,[],[],{"id":149,"type":107,"label":150,"href":96,"icon":110,"description":110,"badge":110,"groupTitle":110,"style":110,"gridColumns":110,"cssClass":110,"psCategoryId":110,"showPsChildren":30,"position":151,"children":152,"psChildren":153},47,{"fr":92},6,[],[],{"id":155,"type":107,"label":156,"href":102,"icon":110,"description":110,"badge":110,"groupTitle":110,"style":110,"gridColumns":110,"cssClass":110,"psCategoryId":110,"showPsChildren":30,"position":157,"children":158,"psChildren":159},48,{"fr":101},7,[],[],{"title":161,"slug":162,"metaDescription":163,"category":164,"tags":165,"difficulty":170,"psVersions":171,"content":174,"faq":175,"tldr":194,"readingTime":145,"generatedAt":195,"publishDate":195,"relatedArticles":196,"sourceCategory":197},"Réduire le JavaScript inutilisé sur PrestaShop : guide complet","reduire-javascript-inutilise-prestashop","Optimisez les performances de votre boutique PrestaShop en éliminant le JavaScript inutilisé. Webpack, coverage, positions modules : méthode complète.","performance",[166,164,167,168,169],"javascript","webpack","lighthouse","optimisation","intermediaire",[172,173],"1.7","8.x","\u003Ch2>Pourquoi Lighthouse signale du JavaScript inutilisé sur PrestaShop\u003C\u002Fh2>\n\u003Cp>Lorsque vous passez votre boutique PrestaShop dans Google Lighthouse ou PageSpeed Insights, l'alerte \u003Cstrong>\"Reduce unused JavaScript\"\u003C\u002Fstrong> apparaît quasi systématiquement. Ce n'est pas un bug : c'est la conséquence directe de l'architecture front-end de PrestaShop, qui charge un bundle JavaScript global (\u003Ccode>theme.js\u003C\u002Fcode>) et les scripts de chaque module sur toutes les pages, même quand ils ne servent pas.\u003C\u002Fp>\n\u003Cp>Concrètement, si votre page d'accueil charge le JS du module de paiement ou du panier alors que le visiteur n'a encore rien ajouté, ces kilo-octets sont téléchargés, parsés et compilés pour rien. Sur mobile, l'impact sur le Time to Interactive peut atteindre plusieurs secondes.\u003C\u002Fp>\n\u003Ch2>Étape 1 : diagnostiquer avec l'onglet Coverage de Chrome DevTools\u003C\u002Fh2>\n\u003Cp>Avant de toucher au code, il faut \u003Cstrong>mesurer précisément\u003C\u002Fstrong> ce qui est réellement utilisé. Chrome DevTools intègre un outil parfait pour cela.\u003C\u002Fp>\n\u003Ch3>Comment utiliser Coverage\u003C\u002Fh3>\n\u003Col>\n\u003Cli>Ouvrez Chrome DevTools (`F12` ou `Ctrl+Shift+I`)\u003C\u002Fli>\n\u003Cli>Ouvrez le panneau **Coverage** : `Ctrl+Shift+P` → tapez \"Coverage\" → sélectionnez \"Show Coverage\"\u003C\u002Fli>\n\u003Cli>Cliquez sur le bouton d'enregistrement (rond) puis rechargez la page\u003C\u002Fli>\n\u003Cli>Analysez les résultats :\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>   - \u003Cstrong>En bleu\u003C\u002Fstrong> : le code effectivement exécuté sur cette page\u003C\u002Fp>\n\u003Cp>   - \u003Cstrong>En rouge\u003C\u002Fstrong> : le code chargé mais jamais utilisé\u003C\u002Fp>\n\u003Cp>Cette cartographie vous donne une base factuelle. Un fichier \u003Ccode>theme.js\u003C\u002Fcode> avec 70 % de rouge est un candidat prioritaire à l'optimisation.\u003C\u002Fp>\n\u003Cblockquote>\u003Cp>\u003Cstrong>Astuce :\u003C\u002Fstrong> testez plusieurs pages (accueil, fiche produit, panier, checkout) car un script inutile en homepage peut être critique en checkout.\u003C\u002Fp>\u003C\u002Fblockquote>\n\u003Ch2>Étape 2 : commencer par le CSS (le quick win)\u003C\u002Fh2>\n\u003Cp>Le CSS inutilisé est \u003Cstrong>beaucoup plus simple à éliminer\u003C\u002Fstrong> que le JavaScript, et l'impact sur le rendu est souvent spectaculaire. Commencez par là.\u003C\u002Fp>\n\u003Ch3>Méthode avec PurgeCSS\u003C\u002Fh3>\n\u003Cp>PurgeCSS analyse vos templates et supprime automatiquement les sélecteurs CSS non utilisés :\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-bash\">\nnpm install -D purgecss\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Créez un fichier \u003Ccode>purgecss.config.js\u003C\u002Fcode> à la racine de votre thème :\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-javascript\">\nmodule.exports = {\n  content: [\n    '.\u002Ftemplates\u002F**\u002F*.tpl',\n    '.\u002Fmodules\u002F**\u002F*.tpl',\n    '.\u002F_dev\u002Fjs\u002F**\u002F*.js'\n  ],\n  css: ['.\u002Fassets\u002Fcss\u002Ftheme.css'],\n  safelist: {\n    \u002F\u002F Classes dynamiques générées par PrestaShop\n    standard: [\u002F^js-\u002F, \u002F^ps-\u002F, \u002F^block-\u002F],\n    deep: [\u002Fmodal\u002F, \u002Fdropdown\u002F, \u002Fcarousel\u002F]\n  }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cblockquote>\u003Cp>\u003Cstrong>Attention PrestaShop 8.x :\u003C\u002Fstrong> le thème \u003Ccode>classic\u003C\u002Fcode> a été remanié. Vérifiez que votre safelist couvre les nouvelles classes introduites dans Hummingbird si vous l'utilisez.\u003C\u002Fp>\u003C\u002Fblockquote>\n\u003Ch2>Étape 3 : désactiver les modules inutiles par page via les positions\u003C\u002Fh2>\n\u003Cp>PrestaShop permet de \u003Cstrong>greffer et dégreffer des modules hook par hook\u003C\u002Fstrong>. C'est le levier le plus rapide pour réduire le JS inutilisé sans toucher au code.\u003C\u002Fp>\n\u003Ch3>En back-office\u003C\u002Fh3>\n\u003Col>\n\u003Cli>Allez dans **Design → Positions**\u003C\u002Fli>\n\u003Cli>Identifiez les modules qui injectent du JS sur des pages où ils ne servent pas\u003C\u002Fli>\n\u003Cli>Utilisez les **exceptions par page** pour exclure certaines pages\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>Par exemple, un module de comparaison de produits n'a rien à faire sur la page de confirmation de commande. Un slider en homepage n'a pas besoin d'être chargé sur les fiches produit.\u003C\u002Fp>\n\u003Ch3>Via le code (plus propre)\u003C\u002Fh3>\n\u003Cp>Dans votre thème, vous pouvez conditionner le chargement d'un asset :\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-php\">\n\u002F\u002F Dans un module : ne charger le JS que sur les pages produit\npublic function hookActionFrontControllerSetMedia($params)\n{\n    $controller = $this-&gt;context-&gt;controller;\n    if ($controller instanceof ProductController) {\n        $this-&gt;context-&gt;controller-&gt;registerJavascript(\n            'module-monmodule-product',\n            'modules\u002F'.$this-&gt;name.'\u002Fviews\u002Fjs\u002Fproduct.js',\n            ['priority' =&gt; 200, 'attribute' =&gt; 'defer']\n        );\n    }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Sur \u003Cstrong>PrestaShop 8.x\u003C\u002Fstrong>, cette approche reste identique. L'API \u003Ccode>registerJavascript\u003C\u002Fcode> est stable depuis la 1.7.\u003C\u002Fp>\n\u003Ch2>Étape 4 : optimiser theme.js via Webpack\u003C\u002Fh2>\n\u003Cp>C'est l'étape la plus impactante mais aussi la plus délicate. Le fichier \u003Ccode>theme.js\u003C\u002Fcode> est un bundle Webpack qui inclut toutes les dépendances du thème : jQuery, les composants Bootstrap, les librairies d'animation, etc.\u003C\u002Fp>\n\u003Ch3>Analyser le bundle\u003C\u002Fh3>\n\u003Cpre>\u003Ccode class=\"language-bash\">\ncd themes\u002Fvotre-theme\u002F_dev\nnpm install\nnpm install -D webpack-bundle-analyzer\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Ajoutez dans \u003Ccode>webpack.config.js\u003C\u002Fcode> :\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-javascript\">\nconst BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin;\n\nmodule.exports = {\n  \u002F\u002F ... config existante\n  plugins: [\n    new BundleAnalyzerPlugin({ analyzerMode: 'static' })\n  ]\n};\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Lancez \u003Ccode>npm run build\u003C\u002Fcode> : une page HTML interactive s'ouvre, montrant la taille de chaque dépendance dans le bundle.\u003C\u002Fp>\n\u003Ch3>Supprimer les librairies inutiles\u003C\u002Fh3>\n\u003Cp>Les coupables classiques :\u003C\u002Fp>\n\u003Cul>\n\u003Cli>**Moment.js** (300 Ko) → remplacez par `dayjs` (2 Ko) ou supprimez si non utilisé\u003C\u002Fli>\n\u003Cli>**Velocity.js** → souvent remplaçable par des transitions CSS\u003C\u002Fli>\n\u003Cli>**Bootstrap JS complet** → n'importez que les composants utilisés\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cpre>\u003Ccode class=\"language-javascript\">\n\u002F\u002F Avant : import de tout Bootstrap\nimport 'bootstrap';\n\n\u002F\u002F Après : import sélectif\nimport 'bootstrap\u002Fjs\u002Fdist\u002Fmodal';\nimport 'bootstrap\u002Fjs\u002Fdist\u002Fdropdown';\nimport 'bootstrap\u002Fjs\u002Fdist\u002Fcollapse';\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3>Code splitting avec Webpack\u003C\u002Fh3>\n\u003Cp>Pour les fonctionnalités lourdes utilisées sur certaines pages seulement :\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-javascript\">\n\u002F\u002F Chargement dynamique du slider uniquement en homepage\nif (document.querySelector('.homepage-slider')) {\n  import(\u002F* webpackChunkName: \"slider\" *\u002F '.\u002Fcomponents\u002Fslider')\n    .then(module =&gt; module.default.init());\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Webpack créera automatiquement un chunk séparé qui ne sera chargé que quand nécessaire.\u003C\u002Fp>\n\u003Ch3>PrestaShop 8.x et le thème Hummingbird\u003C\u002Fh3>\n\u003Cp>Le nouveau thème \u003Cstrong>Hummingbird\u003C\u002Fstrong> de PrestaShop 8 abandonne jQuery au profit de JavaScript vanilla et adopte une architecture plus modulaire. Si vous démarrez un nouveau projet sur PS 8.x, Hummingbird offre une base bien plus légère que Classic. Pour les projets existants migrant vers 8.x, c'est l'occasion de repenser entièrement la stack front-end.\u003C\u002Fp>\n\u003Ch2>Étape 5 : attributs de chargement (defer et async)\u003C\u002Fh2>\n\u003Cp>Même sans recompiler Webpack, vous pouvez améliorer le chargement perçu :\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-php\">\n\u002F\u002F Dans votre thème ou module\n$this-&gt;context-&gt;controller-&gt;registerJavascript(\n    'mon-script',\n    '\u002Fmodules\u002Fmonmodule\u002Fviews\u002Fjs\u002Ffront.js',\n    [\n        'priority' =&gt; 200,\n        'attribute' =&gt; 'defer',  \u002F\u002F ou 'async'\n        'server' =&gt; 'local'\n    ]\n);\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cul>\n\u003Cli>**`defer`** : le script est téléchargé en parallèle et exécuté après le parsing HTML (ordre préservé)\u003C\u002Fli>\n\u003Cli>**`async`** : le script est téléchargé en parallèle et exécuté dès que disponible (ordre non garanti)\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>Privilégiez \u003Ccode>defer\u003C\u002Fcode> pour la plupart des cas. Réservez \u003Ccode>async\u003C\u002Fcode> aux scripts totalement indépendants (analytics, tracking).\u003C\u002Fp>\n\u003Ch2>Résumé de la stratégie d'optimisation\u003C\u002Fh2>\n\u003Ctr>\u003Cth>Action\u003C\u002Fth>\u003Cth>Difficulté\u003C\u002Fth>\u003Cth>Impact\u003C\u002Fth>\u003Cth>Risque\u003C\u002Fth>\u003C\u002Ftr>\n\u003Ctr>\u003Cth>Exceptions de position par page\u003C\u002Fth>\u003Cth>Facile\u003C\u002Fth>\u003Cth>Moyen\u003C\u002Fth>\u003Cth>Faible\u003C\u002Fth>\u003C\u002Ftr>\n\u003Ctr>\u003Cth>PurgeCSS sur le CSS\u003C\u002Fth>\u003Cth>Facile\u003C\u002Fth>\u003Cth>Fort\u003C\u002Fth>\u003Cth>Moyen\u003C\u002Fth>\u003C\u002Ftr>\n\u003Ctr>\u003Cth>Attributs defer\u002Fasync\u003C\u002Fth>\u003Cth>Facile\u003C\u002Fth>\u003Cth>Moyen\u003C\u002Fth>\u003Cth>Faible\u003C\u002Fth>\u003C\u002Ftr>\n\u003Ctr>\u003Cth>Code splitting Webpack\u003C\u002Fth>\u003Cth>Avancé\u003C\u002Fth>\u003Cth>Fort\u003C\u002Fth>\u003Cth>Moyen\u003C\u002Fth>\u003C\u002Ftr>\n\u003Ctr>\u003Cth>Refonte complète du bundle\u003C\u002Fth>\u003Cth>Expert\u003C\u002Fth>\u003Cth>Très fort\u003C\u002Fth>\u003Cth>Élevé\u003C\u002Fth>\u003C\u002Ftr>\n\u003Cp>La règle d'or : \u003Cstrong>commencez par le CSS et les positions de modules\u003C\u002Fstrong> (gains rapides, risque faible), puis attaquez le JavaScript progressivement avec Webpack. Ne refaites jamais tout d'un coup — chaque modification doit être testée isolément pour éviter les régressions fonctionnelles.\u003C\u002Fp>",[176,179,182,185,188,191],{"q":177,"a":178},"Comment savoir quel JavaScript est inutilisé sur ma boutique PrestaShop ?","Utilisez l'onglet Coverage de Chrome DevTools (Ctrl+Shift+P → Coverage). Il affiche en rouge le code chargé mais jamais exécuté et en bleu le code réellement utilisé. Testez sur plusieurs types de pages (accueil, produit, panier) car un script peut être inutile sur une page mais essentiel sur une autre.",{"q":180,"a":181},"Peut-on supprimer jQuery de PrestaShop pour réduire le JavaScript ?","Sur PrestaShop 1.7 et 8.x avec le thème Classic, jQuery est une dépendance profonde : de nombreux modules et le core front-end en dépendent. Le supprimer casserait la boutique. En revanche, le nouveau thème Hummingbird (PS 8.x) fonctionne sans jQuery. Si vous créez un thème custom, vous pouvez progressivement éliminer jQuery en réécrivant les composants en JavaScript vanilla.",{"q":183,"a":184},"Est-ce que réduire le JavaScript inutilisé améliore vraiment le SEO ?","Oui. Google utilise les Core Web Vitals comme facteur de classement. Le JavaScript inutilisé dégrade le Largest Contentful Paint (LCP) et le Time to Interactive (TTI), deux métriques clés. Sur mobile, l'impact est encore plus marqué car le parsing JS est plus lent. Chaque kilooctet de JS supprimé améliore ces scores.",{"q":186,"a":187},"Faut-il utiliser un module de minification JS ou optimiser manuellement via Webpack ?","Les modules de minification (comme ceux du Addons) appliquent une compression générique qui réduit le poids mais ne supprime pas le code inutilisé. Webpack permet d'aller plus loin avec le tree-shaking, le code splitting et la suppression de dépendances. L'idéal est de combiner les deux : optimiser le bundle à la source via Webpack, puis appliquer une minification en production.",{"q":189,"a":190},"Comment empêcher un module PrestaShop de charger son JS sur toutes les pages ?","Deux solutions : en back-office, allez dans Design → Positions, trouvez le module et ajoutez des exceptions par page. En code, utilisez une condition dans le hook actionFrontControllerSetMedia pour ne charger le script que sur les contrôleurs pertinents (ProductController, CartController, etc.). La seconde méthode est plus fiable et survit aux réinstallations de module.",{"q":192,"a":193},"Le code splitting Webpack fonctionne-t-il avec PrestaShop 1.7 et 8.x ?","Oui. Le thème Classic utilise Webpack depuis PrestaShop 1.7. Le code splitting via les imports dynamiques (import()) est supporté nativement. Les chunks générés sont automatiquement chargés par le navigateur quand nécessaire. Veillez simplement à ce que votre configuration Webpack définisse correctement le publicPath pour que les chunks soient servis depuis le bon répertoire.","Pour réduire le JavaScript inutilisé sur PrestaShop, commencez par diagnostiquer avec Chrome Coverage, désactivez les modules inutiles par page via les positions, puis optimisez le bundle theme.js avec Webpack (tree-shaking, code splitting, imports sélectifs).","2026-03-21T14:10:32.000Z",[],"PrestaShop pour les développeurs",{"header":199},{"logo":200,"topBar":205,"contactEmail":208,"features":209,"navBar":110},{"src":201,"alt":202,"text":95,"href":203,"class":204},"\u002Flogo-ac.svg","Alexandre Carette — Architecte E-commerce Souverain","\u002F","h-10 w-10",{"message":110,"showLanguages":30,"align":206,"languages":207},"left",[],"contact@alexandrecarette.fr",{"showSearch":30,"showWishlist":30,"showLogin":20,"showContact":30,"showCart":30,"stickyHeader":20,"headerLayout":210},"inline",{"footer":212},{"theme":213,"description":110,"hours":110,"logo":214,"contact":215,"social":216,"bottomBar":226},"dark",{"src":201,"href":203,"alt":95},{"email":110,"phone":110,"address":110,"cta":110},[217,220,223],{"platform":218,"href":219,"label":218},"linkedin","https:\u002F\u002Fwww.linkedin.com\u002Fin\u002Falexandre-carette\u002F",{"platform":221,"href":222,"label":221},"malt","https:\u002F\u002Fwww.malt.fr\u002Fprofile\u002Falexandrecarette",{"platform":224,"href":225,"label":224},"github","https:\u002F\u002Fgithub.com\u002Fprest4cafe",{"copyright":110},{"academy":228,"blog":229,"expertise":240},[],[230,234,237],{"title":231,"url":232,"score":117,"type":233},"Docker Compose PrestaShop : configuration production prête à déployer","\u002Fblog\u002Fdevops\u002Fdocker\u002Fdocker-compose-prestashop-production","blog",{"title":235,"url":236,"score":117,"type":233},"PrestaShop headless avec Nuxt 3 : pourquoi séparer back et front","\u002Fblog\u002Fprestashop\u002Farchitecture\u002Fprestashop-headless-nuxt-separation-front-back",{"title":238,"url":239,"score":117,"type":233},"PrestaShop headless : Nuxt 3, pas Next.js — le choix souverain","\u002Fblog\u002Fprestashop\u002Farchitecture\u002Fprestashop-headless-nuxt-nextjs-souverainete",[]]