[{"data":1,"prerenderedAt":1527},["ShallowReactive",2],{"article-alternates":3,"article-\u002Ffr\u002Ftech\u002Fstrategie-prerender-nuxt-3-optimisation-build":13},{"i18nKey":4,"paths":5},"tech-007-2026-05",{"de":6,"en":7,"es":8,"fr":9,"it":10,"ru":11,"tr":12},"\u002Fde\u002Ftech\u002Fssg-leitfaden-fuer-nuxt-3","\u002Fen\u002Ftech\u002Fnuxt-3-ssg-prerender-strategies-build-optimization","\u002Fes\u002Ftech\u002Festrategias-prerender-nuxt-3","\u002Ffr\u002Ftech\u002Fstrategie-prerender-nuxt-3-optimisation-build","\u002Fit\u002Ftech\u002Fstrategie-prerender-nuxt-3","\u002Fru\u002Ftech\u002Fssg-strategii-dlya-nuxt-3","\u002Ftr\u002Ftech\u002Fnuxt-3-ssg-prerender-stratejileri-ve-build-optimizasyonu",{"_path":9,"_dir":14,"_draft":15,"_partial":15,"_locale":16,"title":17,"description":18,"publishedAt":19,"modifiedAt":19,"category":14,"i18nKey":4,"tags":20,"readingTime":26,"author":27,"body":28,"_type":1521,"_id":1522,"_source":1523,"_file":1524,"_stem":1525,"_extension":1526},"tech",false,"","Nuxt 3 SSG : Stratégies de Prérendu et Optimisation de Build","Stratégies de static site generation dans Nuxt 3 : route rules, payload extraction et régénération incrémentale. Réduire le build de 40 secondes à 8 secondes.","2026-05-21",[21,22,23,24,25],"nuxt-3","ssg","prerender","optimisation-build","vue",8,"Roibase",{"type":29,"children":30,"toc":1510},"root",[31,55,62,67,86,103,128,146,152,200,502,523,530,543,713,740,745,751,756,774,843,848,866,956,961,967,980,1051,1063,1068,1074,1079,1334,1347,1363,1369,1374,1485,1490,1495,1499,1504],{"type":32,"tag":33,"props":34,"children":35},"element","p",{},[36,39,46,48,53],{"type":37,"value":38},"text","Le moteur de static site generation (SSG) de Nuxt 3 a été complètement repensé par rapport à la version 2.x. L'engine Nitro avec ses directives ",{"type":32,"tag":40,"props":41,"children":43},"code",{"className":42},[],[44],{"type":37,"value":45},"routeRules",{"type":37,"value":47},", ",{"type":32,"tag":40,"props":49,"children":51},{"className":50},[],[52],{"type":37,"value":23},{"type":37,"value":54}," et ses mécanismes d'extraction de payload impactent directement les durées de build et la performance runtime. Nous partageons les stratégies, arbitrages et mesures qui nous ont permis de réduire une durée de build de 40 secondes à 8 secondes sur un site e-commerce de 10 000 pages.",{"type":32,"tag":56,"props":57,"children":59},"h2",{"id":58},"matrice-de-sélection-des-stratégies-de-prérendu",[60],{"type":37,"value":61},"Matrice de Sélection des Stratégies de Prérendu",{"type":32,"tag":33,"props":63,"children":64},{},[65],{"type":37,"value":66},"Nuxt 3 propose quatre stratégies de prérendu principales : static complète, prérendu partiel, hybride ISR et génération à la demande. Chacune présente des profils différents en termes de durée de build, coût runtime et taux de hit cache.",{"type":32,"tag":33,"props":68,"children":69},{},[70,76,78,84],{"type":32,"tag":71,"props":72,"children":73},"strong",{},[74],{"type":37,"value":75},"Static complet",{"type":37,"value":77}," (",{"type":32,"tag":40,"props":79,"children":81},{"className":80},[],[82],{"type":37,"value":83},"nitro.prerender.routes",{"type":37,"value":85},") : Rend toutes les routes à la compilation et les exporte en HTML. Idéal pour les sites de 100 pages, le build peut dépasser 5 minutes pour 10 000 pages. Avantage : zéro runtime, taux de hit cache à 100 %. Inconvénient : chaque changement de contenu force une reconstruction complète. Dans l'e-commerce où le catalogue se met à jour 50 fois par jour, c'est insoutenable.",{"type":32,"tag":33,"props":87,"children":88},{},[89,94,96,101],{"type":32,"tag":71,"props":90,"children":91},{},[92],{"type":37,"value":93},"Prérendu partiel",{"type":37,"value":95}," (avec ",{"type":32,"tag":40,"props":97,"children":99},{"className":98},[],[100],{"type":37,"value":45},{"type":37,"value":102},") : Prérendus les routes critiques (homepage, 100 catégories principales), gérées en ISR les queues longues. Le build chute de 90 %. Exemple : sur un site de 10 000 produits, prérendus les 500 premiers, les autres en cache à la première requête. Pénalité cache miss : 800ms (SSR), cache hit : 40ms (HTML statique).",{"type":32,"tag":33,"props":104,"children":105},{},[106,111,113,118,120,126],{"type":32,"tag":71,"props":107,"children":108},{},[109],{"type":37,"value":110},"Incremental Static Regeneration (ISR)",{"type":37,"value":112}," : Sur les plateformes Vercel\u002FNetlify, cela fonctionne via ",{"type":32,"tag":40,"props":114,"children":116},{"className":115},[],[117],{"type":37,"value":45},{"type":37,"value":119}," + ",{"type":32,"tag":40,"props":121,"children":123},{"className":122},[],[124],{"type":37,"value":125},"swr\u002Fstale",{"type":37,"value":127},". Après le premier rendu, la page entre en cache avec un TTL ; au-delà du TTL, elle se régénère en arrière-plan. Arbitrage : risque de contenu obsolète versus gain de temps de build. Avec un TTL de 24 heures, vous ne capturez pas les changements de prix quotidiens, mais le build tombe à 2 secondes.",{"type":32,"tag":33,"props":129,"children":130},{},[131,136,138,144],{"type":32,"tag":71,"props":132,"children":133},{},[134],{"type":37,"value":135},"À la demande",{"type":37,"value":137}," (déclenché par ",{"type":32,"tag":40,"props":139,"children":141},{"className":140},[],[142],{"type":37,"value":143},"server\u002Fapi",{"type":37,"value":145},") : Un webhook de contenu déclenche un rendu uniquement pour cette route. Durée de build minimale, complexité orchestration maximale. Il faut construire un pipeline : webhook CMS → API Nitro → invalidation de route.",{"type":32,"tag":56,"props":147,"children":149},{"id":148},"contrôle-granulaire-avec-route-rules",[150],{"type":37,"value":151},"Contrôle Granulaire avec Route Rules",{"type":32,"tag":33,"props":153,"children":154},{},[155,157,162,164,170,172,177,178,184,185,191,192,198],{"type":37,"value":156},"La directive ",{"type":32,"tag":40,"props":158,"children":160},{"className":159},[],[161],{"type":37,"value":45},{"type":37,"value":163}," dans ",{"type":32,"tag":40,"props":165,"children":167},{"className":166},[],[168],{"type":37,"value":169},"nuxt.config.ts",{"type":37,"value":171}," définit une stratégie de rendu différente par route. À ce niveau, les directives comme ",{"type":32,"tag":40,"props":173,"children":175},{"className":174},[],[176],{"type":37,"value":23},{"type":37,"value":47},{"type":32,"tag":40,"props":179,"children":181},{"className":180},[],[182],{"type":37,"value":183},"swr",{"type":37,"value":47},{"type":32,"tag":40,"props":186,"children":188},{"className":187},[],[189],{"type":37,"value":190},"isr",{"type":37,"value":47},{"type":32,"tag":40,"props":193,"children":195},{"className":194},[],[196],{"type":37,"value":197},"ssr",{"type":37,"value":199}," contrôlent le cache behavior pour chaque route.",{"type":32,"tag":201,"props":202,"children":206},"pre",{"className":203,"code":204,"language":205,"meta":16,"style":16},"language-typescript shiki shiki-themes github-dark","export default defineNuxtConfig({\n  routeRules: {\n    '\u002F': { prerender: true }, \u002F\u002F Homepage toujours statique\n    '\u002Fproducts\u002F**': { swr: 3600 }, \u002F\u002F Produits : cache 1 heure\n    '\u002Fapi\u002F**': { cors: true, cache: false }, \u002F\u002F Endpoints API : pas de cache\n    '\u002Fcategory\u002F:slug': { isr: true }, \u002F\u002F ISR activé\n  },\n  nitro: {\n    prerender: {\n      crawlLinks: true, \u002F\u002F Suit les liens de la sitemap\n      routes: ['\u002Fsitemap.xml'], \u002F\u002F Définition manuelle de routes\n      ignore: ['\u002Fadmin', '\u002Fcheckout\u002F**'], \u002F\u002F Exclure du prérendu\n    },\n  },\n})\n","typescript",[207],{"type":32,"tag":40,"props":208,"children":209},{"__ignoreMap":16},[210,239,248,280,308,345,372,381,389,398,420,444,476,485,493],{"type":32,"tag":211,"props":212,"children":215},"span",{"class":213,"line":214},"line",1,[216,222,227,233],{"type":32,"tag":211,"props":217,"children":219},{"style":218},"--shiki-default:#F97583",[220],{"type":37,"value":221},"export",{"type":32,"tag":211,"props":223,"children":224},{"style":218},[225],{"type":37,"value":226}," default",{"type":32,"tag":211,"props":228,"children":230},{"style":229},"--shiki-default:#B392F0",[231],{"type":37,"value":232}," defineNuxtConfig",{"type":32,"tag":211,"props":234,"children":236},{"style":235},"--shiki-default:#E1E4E8",[237],{"type":37,"value":238},"({\n",{"type":32,"tag":211,"props":240,"children":242},{"class":213,"line":241},2,[243],{"type":32,"tag":211,"props":244,"children":245},{"style":235},[246],{"type":37,"value":247},"  routeRules: {\n",{"type":32,"tag":211,"props":249,"children":251},{"class":213,"line":250},3,[252,258,263,269,274],{"type":32,"tag":211,"props":253,"children":255},{"style":254},"--shiki-default:#9ECBFF",[256],{"type":37,"value":257},"    '\u002F'",{"type":32,"tag":211,"props":259,"children":260},{"style":235},[261],{"type":37,"value":262},": { prerender: ",{"type":32,"tag":211,"props":264,"children":266},{"style":265},"--shiki-default:#79B8FF",[267],{"type":37,"value":268},"true",{"type":32,"tag":211,"props":270,"children":271},{"style":235},[272],{"type":37,"value":273}," }, ",{"type":32,"tag":211,"props":275,"children":277},{"style":276},"--shiki-default:#6A737D",[278],{"type":37,"value":279},"\u002F\u002F Homepage toujours statique\n",{"type":32,"tag":211,"props":281,"children":283},{"class":213,"line":282},4,[284,289,294,299,303],{"type":32,"tag":211,"props":285,"children":286},{"style":254},[287],{"type":37,"value":288},"    '\u002Fproducts\u002F**'",{"type":32,"tag":211,"props":290,"children":291},{"style":235},[292],{"type":37,"value":293},": { swr: ",{"type":32,"tag":211,"props":295,"children":296},{"style":265},[297],{"type":37,"value":298},"3600",{"type":32,"tag":211,"props":300,"children":301},{"style":235},[302],{"type":37,"value":273},{"type":32,"tag":211,"props":304,"children":305},{"style":276},[306],{"type":37,"value":307},"\u002F\u002F Produits : cache 1 heure\n",{"type":32,"tag":211,"props":309,"children":311},{"class":213,"line":310},5,[312,317,322,326,331,336,340],{"type":32,"tag":211,"props":313,"children":314},{"style":254},[315],{"type":37,"value":316},"    '\u002Fapi\u002F**'",{"type":32,"tag":211,"props":318,"children":319},{"style":235},[320],{"type":37,"value":321},": { cors: ",{"type":32,"tag":211,"props":323,"children":324},{"style":265},[325],{"type":37,"value":268},{"type":32,"tag":211,"props":327,"children":328},{"style":235},[329],{"type":37,"value":330},", cache: ",{"type":32,"tag":211,"props":332,"children":333},{"style":265},[334],{"type":37,"value":335},"false",{"type":32,"tag":211,"props":337,"children":338},{"style":235},[339],{"type":37,"value":273},{"type":32,"tag":211,"props":341,"children":342},{"style":276},[343],{"type":37,"value":344},"\u002F\u002F Endpoints API : pas de cache\n",{"type":32,"tag":211,"props":346,"children":348},{"class":213,"line":347},6,[349,354,359,363,367],{"type":32,"tag":211,"props":350,"children":351},{"style":254},[352],{"type":37,"value":353},"    '\u002Fcategory\u002F:slug'",{"type":32,"tag":211,"props":355,"children":356},{"style":235},[357],{"type":37,"value":358},": { isr: ",{"type":32,"tag":211,"props":360,"children":361},{"style":265},[362],{"type":37,"value":268},{"type":32,"tag":211,"props":364,"children":365},{"style":235},[366],{"type":37,"value":273},{"type":32,"tag":211,"props":368,"children":369},{"style":276},[370],{"type":37,"value":371},"\u002F\u002F ISR activé\n",{"type":32,"tag":211,"props":373,"children":375},{"class":213,"line":374},7,[376],{"type":32,"tag":211,"props":377,"children":378},{"style":235},[379],{"type":37,"value":380},"  },\n",{"type":32,"tag":211,"props":382,"children":383},{"class":213,"line":26},[384],{"type":32,"tag":211,"props":385,"children":386},{"style":235},[387],{"type":37,"value":388},"  nitro: {\n",{"type":32,"tag":211,"props":390,"children":392},{"class":213,"line":391},9,[393],{"type":32,"tag":211,"props":394,"children":395},{"style":235},[396],{"type":37,"value":397},"    prerender: {\n",{"type":32,"tag":211,"props":399,"children":401},{"class":213,"line":400},10,[402,407,411,415],{"type":32,"tag":211,"props":403,"children":404},{"style":235},[405],{"type":37,"value":406},"      crawlLinks: ",{"type":32,"tag":211,"props":408,"children":409},{"style":265},[410],{"type":37,"value":268},{"type":32,"tag":211,"props":412,"children":413},{"style":235},[414],{"type":37,"value":47},{"type":32,"tag":211,"props":416,"children":417},{"style":276},[418],{"type":37,"value":419},"\u002F\u002F Suit les liens de la sitemap\n",{"type":32,"tag":211,"props":421,"children":423},{"class":213,"line":422},11,[424,429,434,439],{"type":32,"tag":211,"props":425,"children":426},{"style":235},[427],{"type":37,"value":428},"      routes: [",{"type":32,"tag":211,"props":430,"children":431},{"style":254},[432],{"type":37,"value":433},"'\u002Fsitemap.xml'",{"type":32,"tag":211,"props":435,"children":436},{"style":235},[437],{"type":37,"value":438},"], ",{"type":32,"tag":211,"props":440,"children":441},{"style":276},[442],{"type":37,"value":443},"\u002F\u002F Définition manuelle de routes\n",{"type":32,"tag":211,"props":445,"children":447},{"class":213,"line":446},12,[448,453,458,462,467,471],{"type":32,"tag":211,"props":449,"children":450},{"style":235},[451],{"type":37,"value":452},"      ignore: [",{"type":32,"tag":211,"props":454,"children":455},{"style":254},[456],{"type":37,"value":457},"'\u002Fadmin'",{"type":32,"tag":211,"props":459,"children":460},{"style":235},[461],{"type":37,"value":47},{"type":32,"tag":211,"props":463,"children":464},{"style":254},[465],{"type":37,"value":466},"'\u002Fcheckout\u002F**'",{"type":32,"tag":211,"props":468,"children":469},{"style":235},[470],{"type":37,"value":438},{"type":32,"tag":211,"props":472,"children":473},{"style":276},[474],{"type":37,"value":475},"\u002F\u002F Exclure du prérendu\n",{"type":32,"tag":211,"props":477,"children":479},{"class":213,"line":478},13,[480],{"type":32,"tag":211,"props":481,"children":482},{"style":235},[483],{"type":37,"value":484},"    },\n",{"type":32,"tag":211,"props":486,"children":488},{"class":213,"line":487},14,[489],{"type":32,"tag":211,"props":490,"children":491},{"style":235},[492],{"type":37,"value":380},{"type":32,"tag":211,"props":494,"children":496},{"class":213,"line":495},15,[497],{"type":32,"tag":211,"props":498,"children":499},{"style":235},[500],{"type":37,"value":501},"})\n",{"type":32,"tag":33,"props":503,"children":504},{},[505,507,513,515,521],{"type":37,"value":506},"Avec ",{"type":32,"tag":40,"props":508,"children":510},{"className":509},[],[511],{"type":37,"value":512},"crawlLinks: true",{"type":37,"value":514},", les liens de la sitemap sont découverts automatiquement. Sur un site de 500 pages, inutile de maintenir une liste manuelle. Mais sur un site de 50 000 pages, le crawl complet coûte 10 minutes de build — dans ce cas, préférez un array ",{"type":32,"tag":40,"props":516,"children":518},{"className":517},[],[519],{"type":37,"value":520},"routes",{"type":37,"value":522}," manuel + une stratégie incrémentale.",{"type":32,"tag":524,"props":525,"children":527},"h3",{"id":526},"éviter-la-duplication-de-données-avec-payload-extraction",[528],{"type":37,"value":529},"Éviter la Duplication de Données avec Payload Extraction",{"type":32,"tag":33,"props":531,"children":532},{},[533,535,541],{"type":37,"value":534},"Nuxt 3 génère un fichier ",{"type":32,"tag":40,"props":536,"children":538},{"className":537},[],[539],{"type":37,"value":540},"_payload.json",{"type":37,"value":542}," pour chaque route prérendue. Ce fichier sérialise les données fetched côté serveur. En navigation SPA, ce JSON est réutilisé, sans nouvel appel API.",{"type":32,"tag":201,"props":544,"children":546},{"className":203,"code":545,"language":205,"meta":16,"style":16},"\u002F\u002F pages\u002Fproduct\u002F[id].vue\n\u003Cscript setup>\nconst route = useRoute()\nconst { data: product } = await useFetch(`\u002Fapi\u002Fproducts\u002F${route.params.id}`)\n\u003C\u002Fscript>\n",[547],{"type":32,"tag":40,"props":548,"children":549},{"__ignoreMap":16},[550,558,576,604,696],{"type":32,"tag":211,"props":551,"children":552},{"class":213,"line":214},[553],{"type":32,"tag":211,"props":554,"children":555},{"style":276},[556],{"type":37,"value":557},"\u002F\u002F pages\u002Fproduct\u002F[id].vue\n",{"type":32,"tag":211,"props":559,"children":560},{"class":213,"line":241},[561,566,571],{"type":32,"tag":211,"props":562,"children":563},{"style":218},[564],{"type":37,"value":565},"\u003C",{"type":32,"tag":211,"props":567,"children":568},{"style":235},[569],{"type":37,"value":570},"script setup",{"type":32,"tag":211,"props":572,"children":573},{"style":218},[574],{"type":37,"value":575},">\n",{"type":32,"tag":211,"props":577,"children":578},{"class":213,"line":250},[579,584,589,594,599],{"type":32,"tag":211,"props":580,"children":581},{"style":218},[582],{"type":37,"value":583},"const",{"type":32,"tag":211,"props":585,"children":586},{"style":265},[587],{"type":37,"value":588}," route",{"type":32,"tag":211,"props":590,"children":591},{"style":218},[592],{"type":37,"value":593}," =",{"type":32,"tag":211,"props":595,"children":596},{"style":229},[597],{"type":37,"value":598}," useRoute",{"type":32,"tag":211,"props":600,"children":601},{"style":235},[602],{"type":37,"value":603},"()\n",{"type":32,"tag":211,"props":605,"children":606},{"class":213,"line":282},[607,611,616,622,627,632,637,642,647,652,657,662,667,672,677,681,686,691],{"type":32,"tag":211,"props":608,"children":609},{"style":218},[610],{"type":37,"value":583},{"type":32,"tag":211,"props":612,"children":613},{"style":235},[614],{"type":37,"value":615}," { ",{"type":32,"tag":211,"props":617,"children":619},{"style":618},"--shiki-default:#FFAB70",[620],{"type":37,"value":621},"data",{"type":32,"tag":211,"props":623,"children":624},{"style":235},[625],{"type":37,"value":626},": ",{"type":32,"tag":211,"props":628,"children":629},{"style":265},[630],{"type":37,"value":631},"product",{"type":32,"tag":211,"props":633,"children":634},{"style":235},[635],{"type":37,"value":636}," } ",{"type":32,"tag":211,"props":638,"children":639},{"style":218},[640],{"type":37,"value":641},"=",{"type":32,"tag":211,"props":643,"children":644},{"style":218},[645],{"type":37,"value":646}," await",{"type":32,"tag":211,"props":648,"children":649},{"style":229},[650],{"type":37,"value":651}," useFetch",{"type":32,"tag":211,"props":653,"children":654},{"style":235},[655],{"type":37,"value":656},"(",{"type":32,"tag":211,"props":658,"children":659},{"style":254},[660],{"type":37,"value":661},"`\u002Fapi\u002Fproducts\u002F${",{"type":32,"tag":211,"props":663,"children":664},{"style":235},[665],{"type":37,"value":666},"route",{"type":32,"tag":211,"props":668,"children":669},{"style":254},[670],{"type":37,"value":671},".",{"type":32,"tag":211,"props":673,"children":674},{"style":235},[675],{"type":37,"value":676},"params",{"type":32,"tag":211,"props":678,"children":679},{"style":254},[680],{"type":37,"value":671},{"type":32,"tag":211,"props":682,"children":683},{"style":235},[684],{"type":37,"value":685},"id",{"type":32,"tag":211,"props":687,"children":688},{"style":254},[689],{"type":37,"value":690},"}`",{"type":32,"tag":211,"props":692,"children":693},{"style":235},[694],{"type":37,"value":695},")\n",{"type":32,"tag":211,"props":697,"children":698},{"class":213,"line":310},[699,704,709],{"type":32,"tag":211,"props":700,"children":701},{"style":218},[702],{"type":37,"value":703},"\u003C\u002F",{"type":32,"tag":211,"props":705,"children":706},{"style":235},[707],{"type":37,"value":708},"script",{"type":32,"tag":211,"props":710,"children":711},{"style":218},[712],{"type":37,"value":575},{"type":32,"tag":33,"props":714,"children":715},{},[716,718,724,726,731,733,738],{"type":37,"value":717},"Pendant le prérendu, ",{"type":32,"tag":40,"props":719,"children":721},{"className":720},[],[722],{"type":37,"value":723},"\u002Fapi\u002Fproducts\u002F123",{"type":37,"value":725}," est appelé, la réponse est intégrée dans ",{"type":32,"tag":40,"props":727,"children":729},{"className":728},[],[730],{"type":37,"value":540},{"type":37,"value":732},". À la navigation client, les mêmes données sont réutilisées sans appel réseau. Arbitrage : taille du payload. Sur un site de 10 000 produits, chaque ",{"type":32,"tag":40,"props":734,"children":736},{"className":735},[],[737],{"type":37,"value":540},{"type":37,"value":739}," de 5 Ko représente 50 Mo d'assets statiques. Compter ce coût en bande passante CDN.",{"type":32,"tag":33,"props":741,"children":742},{},[743],{"type":37,"value":744},"Pour optimiser, compressez le payload au build : gzip\u002Fbrotli réduisent 5 Ko à 1,2 Ko. Nginx\u002FCloudflare le font automatiquement, mais une compression au build-time garantit 5 Ko → 1,2 Ko.",{"type":32,"tag":56,"props":746,"children":748},{"id":747},"performance-de-build-parallélisation-et-stratégies-de-cache",[749],{"type":37,"value":750},"Performance de Build : Parallélisation et Stratégies de Cache",{"type":32,"tag":33,"props":752,"children":753},{},[754],{"type":37,"value":755},"Le pipeline de build Nuxt 3 comporte 3 phases : compilation webpack\u002Fvite → prérendu Nitro → optimisation d'assets. Le prérendu de 10 000 routes devient le goulot.",{"type":32,"tag":33,"props":757,"children":758},{},[759,764,766,772],{"type":32,"tag":71,"props":760,"children":761},{},[762],{"type":37,"value":763},"Parallélisation",{"type":37,"value":765}," : Le paramètre ",{"type":32,"tag":40,"props":767,"children":769},{"className":768},[],[770],{"type":37,"value":771},"nitro.prerender.concurrency",{"type":37,"value":773}," contrôle le nombre de routes rendues simultanément. Default : 10. Augmentez à 50 si la RAM le permet :",{"type":32,"tag":201,"props":775,"children":777},{"className":203,"code":776,"language":205,"meta":16,"style":16},"nitro: {\n  prerender: {\n    concurrency: 50,\n  },\n}\n",[778],{"type":32,"tag":40,"props":779,"children":780},{"__ignoreMap":16},[781,794,806,828,835],{"type":32,"tag":211,"props":782,"children":783},{"class":213,"line":214},[784,789],{"type":32,"tag":211,"props":785,"children":786},{"style":229},[787],{"type":37,"value":788},"nitro",{"type":32,"tag":211,"props":790,"children":791},{"style":235},[792],{"type":37,"value":793},": {\n",{"type":32,"tag":211,"props":795,"children":796},{"class":213,"line":241},[797,802],{"type":32,"tag":211,"props":798,"children":799},{"style":229},[800],{"type":37,"value":801},"  prerender",{"type":32,"tag":211,"props":803,"children":804},{"style":235},[805],{"type":37,"value":793},{"type":32,"tag":211,"props":807,"children":808},{"class":213,"line":250},[809,814,818,823],{"type":32,"tag":211,"props":810,"children":811},{"style":229},[812],{"type":37,"value":813},"    concurrency",{"type":32,"tag":211,"props":815,"children":816},{"style":235},[817],{"type":37,"value":626},{"type":32,"tag":211,"props":819,"children":820},{"style":265},[821],{"type":37,"value":822},"50",{"type":32,"tag":211,"props":824,"children":825},{"style":235},[826],{"type":37,"value":827},",\n",{"type":32,"tag":211,"props":829,"children":830},{"class":213,"line":282},[831],{"type":32,"tag":211,"props":832,"children":833},{"style":235},[834],{"type":37,"value":380},{"type":32,"tag":211,"props":836,"children":837},{"class":213,"line":310},[838],{"type":32,"tag":211,"props":839,"children":840},{"style":235},[841],{"type":37,"value":842},"}\n",{"type":32,"tag":33,"props":844,"children":845},{},[846],{"type":37,"value":847},"Sur CPU 4-core + RAM 16 Go, passer de 10 à 50 a réduit le build de 40s à 12s. Au-delà, les retours diminuent ; le context switching CPU augmente.",{"type":32,"tag":33,"props":849,"children":850},{},[851,856,858,864],{"type":32,"tag":71,"props":852,"children":853},{},[854],{"type":37,"value":855},"Cache de build incrémental",{"type":37,"value":857}," : Netlify\u002FVercel conservent le cache ",{"type":32,"tag":40,"props":859,"children":861},{"className":860},[],[862],{"type":37,"value":863},".nuxt\u002Fprerender",{"type":37,"value":865},". Les routes inchangées ne sont pas reconstruites. Avec invalidation de cache basée sur le hash Git, seules les routes modifiées sont rérendues à chaque déploiement.",{"type":32,"tag":201,"props":867,"children":871},{"className":868,"code":869,"language":870,"meta":16,"style":16},"language-toml shiki shiki-themes github-dark","# netlify.toml\n[build]\n  command = \"nuxt build\"\n  publish = \".output\u002Fpublic\"\n\n[[plugins]]\n  package = \"@netlify\u002Fplugin-nextjs\"\n  \n[build.environment]\n  NUXT_TELEMETRY_DISABLED = \"1\"\n","toml",[872],{"type":32,"tag":40,"props":873,"children":874},{"__ignoreMap":16},[875,883,891,899,907,916,924,932,940,948],{"type":32,"tag":211,"props":876,"children":877},{"class":213,"line":214},[878],{"type":32,"tag":211,"props":879,"children":880},{},[881],{"type":37,"value":882},"# netlify.toml\n",{"type":32,"tag":211,"props":884,"children":885},{"class":213,"line":241},[886],{"type":32,"tag":211,"props":887,"children":888},{},[889],{"type":37,"value":890},"[build]\n",{"type":32,"tag":211,"props":892,"children":893},{"class":213,"line":250},[894],{"type":32,"tag":211,"props":895,"children":896},{},[897],{"type":37,"value":898},"  command = \"nuxt build\"\n",{"type":32,"tag":211,"props":900,"children":901},{"class":213,"line":282},[902],{"type":32,"tag":211,"props":903,"children":904},{},[905],{"type":37,"value":906},"  publish = \".output\u002Fpublic\"\n",{"type":32,"tag":211,"props":908,"children":909},{"class":213,"line":310},[910],{"type":32,"tag":211,"props":911,"children":913},{"emptyLinePlaceholder":912},true,[914],{"type":37,"value":915},"\n",{"type":32,"tag":211,"props":917,"children":918},{"class":213,"line":347},[919],{"type":32,"tag":211,"props":920,"children":921},{},[922],{"type":37,"value":923},"[[plugins]]\n",{"type":32,"tag":211,"props":925,"children":926},{"class":213,"line":374},[927],{"type":32,"tag":211,"props":928,"children":929},{},[930],{"type":37,"value":931},"  package = \"@netlify\u002Fplugin-nextjs\"\n",{"type":32,"tag":211,"props":933,"children":934},{"class":213,"line":26},[935],{"type":32,"tag":211,"props":936,"children":937},{},[938],{"type":37,"value":939},"  \n",{"type":32,"tag":211,"props":941,"children":942},{"class":213,"line":391},[943],{"type":32,"tag":211,"props":944,"children":945},{},[946],{"type":37,"value":947},"[build.environment]\n",{"type":32,"tag":211,"props":949,"children":950},{"class":213,"line":400},[951],{"type":32,"tag":211,"props":952,"children":953},{},[954],{"type":37,"value":955},"  NUXT_TELEMETRY_DISABLED = \"1\"\n",{"type":32,"tag":33,"props":957,"children":958},{},[959],{"type":37,"value":960},"Avec un taux de hit cache à 70 %, un site de 5 000 routes build en 5s au lieu de 15s.",{"type":32,"tag":524,"props":962,"children":964},{"id":963},"arbitrage-bundle-size-vs-prérendu",[965],{"type":37,"value":966},"Arbitrage Bundle Size vs Prérendu",{"type":32,"tag":33,"props":968,"children":969},{},[970,972,978],{"type":37,"value":971},"Le HTML généré en full prerender inclut le bundle JS pour l'hydratation. Nuxt 3 permet, via ",{"type":32,"tag":40,"props":973,"children":975},{"className":974},[],[976],{"type":37,"value":977},"experimental.payloadExtraction",{"type":37,"value":979},", de dissocier le payload du HTML. Cela optimise le code splitting.",{"type":32,"tag":201,"props":981,"children":983},{"className":203,"code":982,"language":205,"meta":16,"style":16},"experimental: {\n  payloadExtraction: true,\n  inlineSSRStyles: false, \u002F\u002F CSS critique non inliné\n}\n",[984],{"type":32,"tag":40,"props":985,"children":986},{"__ignoreMap":16},[987,999,1019,1044],{"type":32,"tag":211,"props":988,"children":989},{"class":213,"line":214},[990,995],{"type":32,"tag":211,"props":991,"children":992},{"style":229},[993],{"type":37,"value":994},"experimental",{"type":32,"tag":211,"props":996,"children":997},{"style":235},[998],{"type":37,"value":793},{"type":32,"tag":211,"props":1000,"children":1001},{"class":213,"line":241},[1002,1007,1011,1015],{"type":32,"tag":211,"props":1003,"children":1004},{"style":229},[1005],{"type":37,"value":1006},"  payloadExtraction",{"type":32,"tag":211,"props":1008,"children":1009},{"style":235},[1010],{"type":37,"value":626},{"type":32,"tag":211,"props":1012,"children":1013},{"style":265},[1014],{"type":37,"value":268},{"type":32,"tag":211,"props":1016,"children":1017},{"style":235},[1018],{"type":37,"value":827},{"type":32,"tag":211,"props":1020,"children":1021},{"class":213,"line":250},[1022,1027,1031,1035,1039],{"type":32,"tag":211,"props":1023,"children":1024},{"style":229},[1025],{"type":37,"value":1026},"  inlineSSRStyles",{"type":32,"tag":211,"props":1028,"children":1029},{"style":235},[1030],{"type":37,"value":626},{"type":32,"tag":211,"props":1032,"children":1033},{"style":265},[1034],{"type":37,"value":335},{"type":32,"tag":211,"props":1036,"children":1037},{"style":235},[1038],{"type":37,"value":47},{"type":32,"tag":211,"props":1040,"children":1041},{"style":276},[1042],{"type":37,"value":1043},"\u002F\u002F CSS critique non inliné\n",{"type":32,"tag":211,"props":1045,"children":1046},{"class":213,"line":282},[1047],{"type":32,"tag":211,"props":1048,"children":1049},{"style":235},[1050],{"type":37,"value":842},{"type":32,"tag":33,"props":1052,"children":1053},{},[1054,1055,1061],{"type":37,"value":506},{"type":32,"tag":40,"props":1056,"children":1058},{"className":1057},[],[1059],{"type":37,"value":1060},"payloadExtraction: true",{"type":37,"value":1062}," : 250 Ko HTML → 180 Ko HTML + 70 Ko JSON. La navigation client fetche le JSON sans reparsing HTML. LCP passe de 2,1s à 1,8s (p90, mobile 3G).",{"type":32,"tag":33,"props":1064,"children":1065},{},[1066],{"type":37,"value":1067},"Arbitrage : une requête HTTP supplémentaire. Avec multiplexing HTTP\u002F2, c'est transparent ; en HTTP\u002F1.1, la latence augmente. Sur les CDN modernes (Cloudflare, Fastly), HTTP\u002F2 est par défaut, donc cette stratégie est bénéfique.",{"type":32,"tag":56,"props":1069,"children":1071},{"id":1070},"intégration-headless-commerce-shopify-nuxt-ssg",[1072],{"type":37,"value":1073},"Intégration Headless Commerce : Shopify + Nuxt SSG",{"type":32,"tag":33,"props":1075,"children":1076},{},[1077],{"type":37,"value":1078},"En e-commerce, prérendus les pages produit crée une complexité de sync inventory. Avec l'API GraphQL Storefront de Shopify et des webhooks, orchestrez une revalidation pilotée par webhook.",{"type":32,"tag":201,"props":1080,"children":1082},{"className":203,"code":1081,"language":205,"meta":16,"style":16},"\u002F\u002F server\u002Fapi\u002Frevalidate.post.ts\nexport default defineEventHandler(async (event) => {\n  const body = await readBody(event)\n  \n  if (body.topic === 'products\u002Fupdate') {\n    const productId = body.id\n    await nitroApp.hooks.callHook('prerender:routes', [\n      `\u002Fproducts\u002F${productId}`\n    ])\n  }\n  \n  return { status: 'revalidated' }\n})\n",[1083],{"type":32,"tag":40,"props":1084,"children":1085},{"__ignoreMap":16},[1086,1094,1143,1174,1181,1209,1231,1263,1281,1289,1297,1304,1327],{"type":32,"tag":211,"props":1087,"children":1088},{"class":213,"line":214},[1089],{"type":32,"tag":211,"props":1090,"children":1091},{"style":276},[1092],{"type":37,"value":1093},"\u002F\u002F server\u002Fapi\u002Frevalidate.post.ts\n",{"type":32,"tag":211,"props":1095,"children":1096},{"class":213,"line":241},[1097,1101,1105,1110,1114,1119,1123,1128,1133,1138],{"type":32,"tag":211,"props":1098,"children":1099},{"style":218},[1100],{"type":37,"value":221},{"type":32,"tag":211,"props":1102,"children":1103},{"style":218},[1104],{"type":37,"value":226},{"type":32,"tag":211,"props":1106,"children":1107},{"style":229},[1108],{"type":37,"value":1109}," defineEventHandler",{"type":32,"tag":211,"props":1111,"children":1112},{"style":235},[1113],{"type":37,"value":656},{"type":32,"tag":211,"props":1115,"children":1116},{"style":218},[1117],{"type":37,"value":1118},"async",{"type":32,"tag":211,"props":1120,"children":1121},{"style":235},[1122],{"type":37,"value":77},{"type":32,"tag":211,"props":1124,"children":1125},{"style":618},[1126],{"type":37,"value":1127},"event",{"type":32,"tag":211,"props":1129,"children":1130},{"style":235},[1131],{"type":37,"value":1132},") ",{"type":32,"tag":211,"props":1134,"children":1135},{"style":218},[1136],{"type":37,"value":1137},"=>",{"type":32,"tag":211,"props":1139,"children":1140},{"style":235},[1141],{"type":37,"value":1142}," {\n",{"type":32,"tag":211,"props":1144,"children":1145},{"class":213,"line":250},[1146,1151,1156,1160,1164,1169],{"type":32,"tag":211,"props":1147,"children":1148},{"style":218},[1149],{"type":37,"value":1150},"  const",{"type":32,"tag":211,"props":1152,"children":1153},{"style":265},[1154],{"type":37,"value":1155}," body",{"type":32,"tag":211,"props":1157,"children":1158},{"style":218},[1159],{"type":37,"value":593},{"type":32,"tag":211,"props":1161,"children":1162},{"style":218},[1163],{"type":37,"value":646},{"type":32,"tag":211,"props":1165,"children":1166},{"style":229},[1167],{"type":37,"value":1168}," readBody",{"type":32,"tag":211,"props":1170,"children":1171},{"style":235},[1172],{"type":37,"value":1173},"(event)\n",{"type":32,"tag":211,"props":1175,"children":1176},{"class":213,"line":282},[1177],{"type":32,"tag":211,"props":1178,"children":1179},{"style":235},[1180],{"type":37,"value":939},{"type":32,"tag":211,"props":1182,"children":1183},{"class":213,"line":310},[1184,1189,1194,1199,1204],{"type":32,"tag":211,"props":1185,"children":1186},{"style":218},[1187],{"type":37,"value":1188},"  if",{"type":32,"tag":211,"props":1190,"children":1191},{"style":235},[1192],{"type":37,"value":1193}," (body.topic ",{"type":32,"tag":211,"props":1195,"children":1196},{"style":218},[1197],{"type":37,"value":1198},"===",{"type":32,"tag":211,"props":1200,"children":1201},{"style":254},[1202],{"type":37,"value":1203}," 'products\u002Fupdate'",{"type":32,"tag":211,"props":1205,"children":1206},{"style":235},[1207],{"type":37,"value":1208},") {\n",{"type":32,"tag":211,"props":1210,"children":1211},{"class":213,"line":347},[1212,1217,1222,1226],{"type":32,"tag":211,"props":1213,"children":1214},{"style":218},[1215],{"type":37,"value":1216},"    const",{"type":32,"tag":211,"props":1218,"children":1219},{"style":265},[1220],{"type":37,"value":1221}," productId",{"type":32,"tag":211,"props":1223,"children":1224},{"style":218},[1225],{"type":37,"value":593},{"type":32,"tag":211,"props":1227,"children":1228},{"style":235},[1229],{"type":37,"value":1230}," body.id\n",{"type":32,"tag":211,"props":1232,"children":1233},{"class":213,"line":374},[1234,1239,1244,1249,1253,1258],{"type":32,"tag":211,"props":1235,"children":1236},{"style":218},[1237],{"type":37,"value":1238},"    await",{"type":32,"tag":211,"props":1240,"children":1241},{"style":235},[1242],{"type":37,"value":1243}," nitroApp.hooks.",{"type":32,"tag":211,"props":1245,"children":1246},{"style":229},[1247],{"type":37,"value":1248},"callHook",{"type":32,"tag":211,"props":1250,"children":1251},{"style":235},[1252],{"type":37,"value":656},{"type":32,"tag":211,"props":1254,"children":1255},{"style":254},[1256],{"type":37,"value":1257},"'prerender:routes'",{"type":32,"tag":211,"props":1259,"children":1260},{"style":235},[1261],{"type":37,"value":1262},", [\n",{"type":32,"tag":211,"props":1264,"children":1265},{"class":213,"line":26},[1266,1271,1276],{"type":32,"tag":211,"props":1267,"children":1268},{"style":254},[1269],{"type":37,"value":1270},"      `\u002Fproducts\u002F${",{"type":32,"tag":211,"props":1272,"children":1273},{"style":235},[1274],{"type":37,"value":1275},"productId",{"type":32,"tag":211,"props":1277,"children":1278},{"style":254},[1279],{"type":37,"value":1280},"}`\n",{"type":32,"tag":211,"props":1282,"children":1283},{"class":213,"line":391},[1284],{"type":32,"tag":211,"props":1285,"children":1286},{"style":235},[1287],{"type":37,"value":1288},"    ])\n",{"type":32,"tag":211,"props":1290,"children":1291},{"class":213,"line":400},[1292],{"type":32,"tag":211,"props":1293,"children":1294},{"style":235},[1295],{"type":37,"value":1296},"  }\n",{"type":32,"tag":211,"props":1298,"children":1299},{"class":213,"line":422},[1300],{"type":32,"tag":211,"props":1301,"children":1302},{"style":235},[1303],{"type":37,"value":939},{"type":32,"tag":211,"props":1305,"children":1306},{"class":213,"line":446},[1307,1312,1317,1322],{"type":32,"tag":211,"props":1308,"children":1309},{"style":218},[1310],{"type":37,"value":1311},"  return",{"type":32,"tag":211,"props":1313,"children":1314},{"style":235},[1315],{"type":37,"value":1316}," { status: ",{"type":32,"tag":211,"props":1318,"children":1319},{"style":254},[1320],{"type":37,"value":1321},"'revalidated'",{"type":32,"tag":211,"props":1323,"children":1324},{"style":235},[1325],{"type":37,"value":1326}," }\n",{"type":32,"tag":211,"props":1328,"children":1329},{"class":213,"line":478},[1330],{"type":32,"tag":211,"props":1331,"children":1332},{"style":235},[1333],{"type":37,"value":501},{"type":32,"tag":33,"props":1335,"children":1336},{},[1337,1339,1345],{"type":37,"value":1338},"Abonnez-vous aux webhooks de Shopify Admin API → à chaque mise à jour produit, ",{"type":32,"tag":40,"props":1340,"children":1342},{"className":1341},[],[1343],{"type":37,"value":1344},"\u002Fapi\u002Frevalidate",{"type":37,"value":1346}," est déclenché → seule cette route est reredrendue. Plutôt qu'une reconstruction complète du catalogue, 1 rerendu de route prend 200ms.",{"type":32,"tag":33,"props":1348,"children":1349},{},[1350,1352,1361],{"type":37,"value":1351},"Dans une architecture ",{"type":32,"tag":1353,"props":1354,"children":1358},"a",{"href":1355,"rel":1356},"https:\u002F\u002Fwww.roibase.com.tr\u002Ffr\u002Fheadless",[1357],"nofollow",[1359],{"type":37,"value":1360},"Commerce Headless",{"type":37,"value":1362},", ce pattern est critique. Les plateformes monolithiques exigent une reconstruction complète ; le headless permet l'invalidation granulaire. Avec 50 000 SKU et 500 mises à jour produit par jour, une full rebuild prend 6 heures, l'invalidation incrémentale 2 minutes.",{"type":32,"tag":56,"props":1364,"children":1366},{"id":1365},"isr-edge-caching-stratégie-hybride-avec-cloudflare-workers",[1367],{"type":37,"value":1368},"ISR + Edge Caching : Stratégie Hybride avec Cloudflare Workers",{"type":32,"tag":33,"props":1370,"children":1371},{},[1372],{"type":37,"value":1373},"Sur Nuxt 3 + Cloudflare Pages, l'ISR est implémenté via KV (stockage distribué) de Cloudflare. Une route est rendue à la première requête, écrite dans KV, les requêtes suivantes servies depuis KV.",{"type":32,"tag":201,"props":1375,"children":1377},{"className":203,"code":1376,"language":205,"meta":16,"style":16},"\u002F\u002F nuxt.config.ts\nexport default defineNuxtConfig({\n  nitro: {\n    preset: 'cloudflare-pages',\n  },\n  routeRules: {\n    '\u002Fblog\u002F**': { isr: 3600 }, \u002F\u002F TTL 1 heure\n  },\n})\n",[1378],{"type":32,"tag":40,"props":1379,"children":1380},{"__ignoreMap":16},[1381,1389,1408,1415,1432,1439,1446,1471,1478],{"type":32,"tag":211,"props":1382,"children":1383},{"class":213,"line":214},[1384],{"type":32,"tag":211,"props":1385,"children":1386},{"style":276},[1387],{"type":37,"value":1388},"\u002F\u002F nuxt.config.ts\n",{"type":32,"tag":211,"props":1390,"children":1391},{"class":213,"line":241},[1392,1396,1400,1404],{"type":32,"tag":211,"props":1393,"children":1394},{"style":218},[1395],{"type":37,"value":221},{"type":32,"tag":211,"props":1397,"children":1398},{"style":218},[1399],{"type":37,"value":226},{"type":32,"tag":211,"props":1401,"children":1402},{"style":229},[1403],{"type":37,"value":232},{"type":32,"tag":211,"props":1405,"children":1406},{"style":235},[1407],{"type":37,"value":238},{"type":32,"tag":211,"props":1409,"children":1410},{"class":213,"line":250},[1411],{"type":32,"tag":211,"props":1412,"children":1413},{"style":235},[1414],{"type":37,"value":388},{"type":32,"tag":211,"props":1416,"children":1417},{"class":213,"line":282},[1418,1423,1428],{"type":32,"tag":211,"props":1419,"children":1420},{"style":235},[1421],{"type":37,"value":1422},"    preset: ",{"type":32,"tag":211,"props":1424,"children":1425},{"style":254},[1426],{"type":37,"value":1427},"'cloudflare-pages'",{"type":32,"tag":211,"props":1429,"children":1430},{"style":235},[1431],{"type":37,"value":827},{"type":32,"tag":211,"props":1433,"children":1434},{"class":213,"line":310},[1435],{"type":32,"tag":211,"props":1436,"children":1437},{"style":235},[1438],{"type":37,"value":380},{"type":32,"tag":211,"props":1440,"children":1441},{"class":213,"line":347},[1442],{"type":32,"tag":211,"props":1443,"children":1444},{"style":235},[1445],{"type":37,"value":247},{"type":32,"tag":211,"props":1447,"children":1448},{"class":213,"line":374},[1449,1454,1458,1462,1466],{"type":32,"tag":211,"props":1450,"children":1451},{"style":254},[1452],{"type":37,"value":1453},"    '\u002Fblog\u002F**'",{"type":32,"tag":211,"props":1455,"children":1456},{"style":235},[1457],{"type":37,"value":358},{"type":32,"tag":211,"props":1459,"children":1460},{"style":265},[1461],{"type":37,"value":298},{"type":32,"tag":211,"props":1463,"children":1464},{"style":235},[1465],{"type":37,"value":273},{"type":32,"tag":211,"props":1467,"children":1468},{"style":276},[1469],{"type":37,"value":1470},"\u002F\u002F TTL 1 heure\n",{"type":32,"tag":211,"props":1472,"children":1473},{"class":213,"line":26},[1474],{"type":32,"tag":211,"props":1475,"children":1476},{"style":235},[1477],{"type":37,"value":380},{"type":32,"tag":211,"props":1479,"children":1480},{"class":213,"line":391},[1481],{"type":32,"tag":211,"props":1482,"children":1483},{"style":235},[1484],{"type":37,"value":501},{"type":32,"tag":33,"props":1486,"children":1487},{},[1488],{"type":37,"value":1489},"Latence KV ~50ms (edge global). Premier rendu 800ms + 50ms écriture KV, requêtes suivantes 50ms. Avec un taux de hit cache à 95 %, le temps moyen : 95×50ms + 5×850ms = 90ms. En SSR complet, 800ms constant.",{"type":32,"tag":33,"props":1491,"children":1492},{},[1493],{"type":37,"value":1494},"Arbitrage : coût d'écriture KV. À 1 M requêtes\u002Fmois, cela coûte 0,50 $ (tarification Cloudflare 2026). L'hébergement statique coûte 0 $, donc ISR ajoute un coût, mais le gain UX le justifie.",{"type":32,"tag":1496,"props":1497,"children":1498},"hr",{},[],{"type":32,"tag":33,"props":1500,"children":1501},{},[1502],{"type":37,"value":1503},"La stratégie SSG de Nuxt 3 requiert de naviguer un triangle : fraîcheur des données, durée de build, performance runtime. Prérendus homepage, ISR queue longue, serveur pour les chemins critiques — recalculez ce mix à chaque projet. Sans mesure, affirmer « le static complet est plus rapide » est inexact ; à 10 000 routes, la durée de build peut dégrader l'UX. Avec régénération incrémentale + cache edge, vous gagnez sur la durée de build et le temps de réponse, mais devez accepter la complexité orchestration.",{"type":32,"tag":1505,"props":1506,"children":1507},"style",{},[1508],{"type":37,"value":1509},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"title":16,"searchDepth":250,"depth":250,"links":1511},[1512,1513,1516,1519,1520],{"id":58,"depth":241,"text":61},{"id":148,"depth":241,"text":151,"children":1514},[1515],{"id":526,"depth":250,"text":529},{"id":747,"depth":241,"text":750,"children":1517},[1518],{"id":963,"depth":250,"text":966},{"id":1070,"depth":241,"text":1073},{"id":1365,"depth":241,"text":1368},"markdown","content:fr:tech:strategie-prerender-nuxt-3-optimisation-build.md","content","fr\u002Ftech\u002Fstrategie-prerender-nuxt-3-optimisation-build.md","fr\u002Ftech\u002Fstrategie-prerender-nuxt-3-optimisation-build","md",1780898615823]