[{"data":1,"prerenderedAt":1570},["ShallowReactive",2],{"article-alternates":3,"article-\u002Fde\u002Ftech\u002Fssg-leitfaden-fuer-nuxt-3":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":6,"_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":1564,"_id":1565,"_source":1566,"_file":1567,"_stem":1568,"_extension":1569},"tech",false,"","Nuxt 3 SSG: Prerender-Strategien und Build-Optimierung","Nuxt 3 Static Site Generation mit Route Rules, Payload Extraction und Incremental Regeneration. Build-Zeit von 40 auf 8 Sekunden reduzieren.","2026-05-21",[21,22,23,24,25],"nuxt-3","ssg","prerender","build-optimierung","vue",9,"Roibase",{"type":29,"children":30,"toc":1553},"root",[31,55,62,67,86,103,128,146,152,201,503,524,531,544,714,741,754,760,765,783,852,857,875,999,1004,1010,1023,1094,1106,1111,1117,1122,1377,1390,1406,1412,1417,1528,1533,1538,1542,1547],{"type":32,"tag":33,"props":34,"children":35},"element","p",{},[36,39,46,48,53],{"type":37,"value":38},"text","Die Static Site Generation (SSG) Engine von Nuxt 3 unterscheidet sich grundlegend von Version 2.x. Mit der Nitro Engine kommen ",{"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}," Direktiven und Payload-Extraction-Mechanismen, die Build-Zeiten und Runtime-Performance direkt beeinflussen. Wir teilen Strategien, mit denen wir auf einer E-Commerce-Site mit 10.000 Seiten die Build-Zeit von 40 Sekunden auf 8 Sekunden reduziert haben — zusammen mit Tradeoffs und Messkennzahlen.",{"type":32,"tag":56,"props":57,"children":59},"h2",{"id":58},"prerender-strategien-wahlmatrix",[60],{"type":37,"value":61},"Prerender-Strategien: Wahlmatrix",{"type":32,"tag":33,"props":63,"children":64},{},[65],{"type":37,"value":66},"Nuxt 3 bietet vier Haupt-Prerender-Strategien: Full Static, Partial Prerender, ISR Hybrid und On-Demand Generation. Jede hat unterschiedliche Build-Zeit, Runtime-Kosten und Cache-Hit-Rates.",{"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},"Full Static",{"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},"): Alle Routes werden zur Build-Zeit gerendert und als HTML exportiert. Für 100-Seiten-Sites ideal, bei 10.000 Seiten kann die Build-Zeit 5 Minuten überschreiten. Plus: keine Runtime, CDN Cache-Hit-Rate 100 %. Minus: Jede Inhaltsänderung erfordert ein vollständiges Rebuild. Bei E-Commerce-Katalogen, die täglich 50-mal aktualisiert werden, ist diese Strategie nicht nachhaltig.",{"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},"Partial Prerender",{"type":37,"value":95}," (mit ",{"type":32,"tag":40,"props":97,"children":99},{"className":98},[],[100],{"type":37,"value":45},{"type":37,"value":102},"): Kritische Routes (Homepage, Top-100-Kategorien) werden vorgerendert, Long-Tail-Traffic wird mit ISR bearbeitet. Build-Zeit sinkt um 90 %. Beispiel: Bei 10.000 Produkten die ersten 500 vorrendern, den Rest beim ersten Request cachen. Cache-Miss-Penalty: 800 ms (SSR), Cache-Hit: 40 ms (statisches HTML).",{"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},": Auf Plattformen wie Vercel\u002FNetlify mit ",{"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}," realisierbar. Nach dem ersten Render geht die Seite in den Cache, nach TTL-Ablauf erfolgt Revalidation im Hintergrund. Tradeoff: Risiko von veralteten Inhalten vs. Build-Zeit-Einsparungen. Mit 24-Stunden-TTL fängst du tägliche Preisänderungen nicht auf, aber die Build-Zeit sinkt auf 2 Sekunden.",{"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},"On-Demand",{"type":37,"value":137}," (über ",{"type":32,"tag":40,"props":139,"children":141},{"className":140},[],[142],{"type":37,"value":143},"server\u002Fapi",{"type":37,"value":145}," ausgelöst): Webhook-getriggert wird nur die betroffene Route neu gerendert. Niedrigste Build-Zeit, höchste Orchestration-Komplexität. Du musst eine Pipeline aufbauen: CMS Webhook → Nitro API → Route Invalidation.",{"type":32,"tag":56,"props":147,"children":149},{"id":148},"granulare-kontrolle-mit-route-rules",[150],{"type":37,"value":151},"Granulare Kontrolle mit Route Rules",{"type":32,"tag":33,"props":153,"children":154},{},[155,157,162,164,170,172,177,178,184,185,191,193,199],{"type":37,"value":156},"Die ",{"type":32,"tag":40,"props":158,"children":160},{"className":159},[],[161],{"type":37,"value":45},{"type":37,"value":163}," in ",{"type":32,"tag":40,"props":165,"children":167},{"className":166},[],[168],{"type":37,"value":169},"nuxt.config.ts",{"type":37,"value":171}," definieren pro Route verschiedene Rendering-Strategien. In dieser Schicht steuern Direktiven wie ",{"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":192}," und ",{"type":32,"tag":40,"props":194,"children":196},{"className":195},[],[197],{"type":37,"value":198},"ssr",{"type":37,"value":200}," das per-Route Cache-Verhalten.",{"type":32,"tag":202,"props":203,"children":207},"pre",{"className":204,"code":205,"language":206,"meta":16,"style":16},"language-typescript shiki shiki-themes github-dark","export default defineNuxtConfig({\n  routeRules: {\n    '\u002F': { prerender: true }, \u002F\u002F Homepage immer statisch\n    '\u002Fproducts\u002F**': { swr: 3600 }, \u002F\u002F Produkte 1 Stunde cachen\n    '\u002Fapi\u002F**': { cors: true, cache: false }, \u002F\u002F API-Endpoints nicht cachen\n    '\u002Fcategory\u002F:slug': { isr: true }, \u002F\u002F ISR aktiv\n  },\n  nitro: {\n    prerender: {\n      crawlLinks: true, \u002F\u002F Links aus Sitemap verfolgen\n      routes: ['\u002Fsitemap.xml'], \u002F\u002F Manuelle Route-Definition\n      ignore: ['\u002Fadmin', '\u002Fcheckout\u002F**'], \u002F\u002F Von Prerender ausschließen\n    },\n  },\n})\n","typescript",[208],{"type":32,"tag":40,"props":209,"children":210},{"__ignoreMap":16},[211,240,249,281,309,346,373,382,391,399,421,445,477,486,494],{"type":32,"tag":212,"props":213,"children":216},"span",{"class":214,"line":215},"line",1,[217,223,228,234],{"type":32,"tag":212,"props":218,"children":220},{"style":219},"--shiki-default:#F97583",[221],{"type":37,"value":222},"export",{"type":32,"tag":212,"props":224,"children":225},{"style":219},[226],{"type":37,"value":227}," default",{"type":32,"tag":212,"props":229,"children":231},{"style":230},"--shiki-default:#B392F0",[232],{"type":37,"value":233}," defineNuxtConfig",{"type":32,"tag":212,"props":235,"children":237},{"style":236},"--shiki-default:#E1E4E8",[238],{"type":37,"value":239},"({\n",{"type":32,"tag":212,"props":241,"children":243},{"class":214,"line":242},2,[244],{"type":32,"tag":212,"props":245,"children":246},{"style":236},[247],{"type":37,"value":248},"  routeRules: {\n",{"type":32,"tag":212,"props":250,"children":252},{"class":214,"line":251},3,[253,259,264,270,275],{"type":32,"tag":212,"props":254,"children":256},{"style":255},"--shiki-default:#9ECBFF",[257],{"type":37,"value":258},"    '\u002F'",{"type":32,"tag":212,"props":260,"children":261},{"style":236},[262],{"type":37,"value":263},": { prerender: ",{"type":32,"tag":212,"props":265,"children":267},{"style":266},"--shiki-default:#79B8FF",[268],{"type":37,"value":269},"true",{"type":32,"tag":212,"props":271,"children":272},{"style":236},[273],{"type":37,"value":274}," }, ",{"type":32,"tag":212,"props":276,"children":278},{"style":277},"--shiki-default:#6A737D",[279],{"type":37,"value":280},"\u002F\u002F Homepage immer statisch\n",{"type":32,"tag":212,"props":282,"children":284},{"class":214,"line":283},4,[285,290,295,300,304],{"type":32,"tag":212,"props":286,"children":287},{"style":255},[288],{"type":37,"value":289},"    '\u002Fproducts\u002F**'",{"type":32,"tag":212,"props":291,"children":292},{"style":236},[293],{"type":37,"value":294},": { swr: ",{"type":32,"tag":212,"props":296,"children":297},{"style":266},[298],{"type":37,"value":299},"3600",{"type":32,"tag":212,"props":301,"children":302},{"style":236},[303],{"type":37,"value":274},{"type":32,"tag":212,"props":305,"children":306},{"style":277},[307],{"type":37,"value":308},"\u002F\u002F Produkte 1 Stunde cachen\n",{"type":32,"tag":212,"props":310,"children":312},{"class":214,"line":311},5,[313,318,323,327,332,337,341],{"type":32,"tag":212,"props":314,"children":315},{"style":255},[316],{"type":37,"value":317},"    '\u002Fapi\u002F**'",{"type":32,"tag":212,"props":319,"children":320},{"style":236},[321],{"type":37,"value":322},": { cors: ",{"type":32,"tag":212,"props":324,"children":325},{"style":266},[326],{"type":37,"value":269},{"type":32,"tag":212,"props":328,"children":329},{"style":236},[330],{"type":37,"value":331},", cache: ",{"type":32,"tag":212,"props":333,"children":334},{"style":266},[335],{"type":37,"value":336},"false",{"type":32,"tag":212,"props":338,"children":339},{"style":236},[340],{"type":37,"value":274},{"type":32,"tag":212,"props":342,"children":343},{"style":277},[344],{"type":37,"value":345},"\u002F\u002F API-Endpoints nicht cachen\n",{"type":32,"tag":212,"props":347,"children":349},{"class":214,"line":348},6,[350,355,360,364,368],{"type":32,"tag":212,"props":351,"children":352},{"style":255},[353],{"type":37,"value":354},"    '\u002Fcategory\u002F:slug'",{"type":32,"tag":212,"props":356,"children":357},{"style":236},[358],{"type":37,"value":359},": { isr: ",{"type":32,"tag":212,"props":361,"children":362},{"style":266},[363],{"type":37,"value":269},{"type":32,"tag":212,"props":365,"children":366},{"style":236},[367],{"type":37,"value":274},{"type":32,"tag":212,"props":369,"children":370},{"style":277},[371],{"type":37,"value":372},"\u002F\u002F ISR aktiv\n",{"type":32,"tag":212,"props":374,"children":376},{"class":214,"line":375},7,[377],{"type":32,"tag":212,"props":378,"children":379},{"style":236},[380],{"type":37,"value":381},"  },\n",{"type":32,"tag":212,"props":383,"children":385},{"class":214,"line":384},8,[386],{"type":32,"tag":212,"props":387,"children":388},{"style":236},[389],{"type":37,"value":390},"  nitro: {\n",{"type":32,"tag":212,"props":392,"children":393},{"class":214,"line":26},[394],{"type":32,"tag":212,"props":395,"children":396},{"style":236},[397],{"type":37,"value":398},"    prerender: {\n",{"type":32,"tag":212,"props":400,"children":402},{"class":214,"line":401},10,[403,408,412,416],{"type":32,"tag":212,"props":404,"children":405},{"style":236},[406],{"type":37,"value":407},"      crawlLinks: ",{"type":32,"tag":212,"props":409,"children":410},{"style":266},[411],{"type":37,"value":269},{"type":32,"tag":212,"props":413,"children":414},{"style":236},[415],{"type":37,"value":47},{"type":32,"tag":212,"props":417,"children":418},{"style":277},[419],{"type":37,"value":420},"\u002F\u002F Links aus Sitemap verfolgen\n",{"type":32,"tag":212,"props":422,"children":424},{"class":214,"line":423},11,[425,430,435,440],{"type":32,"tag":212,"props":426,"children":427},{"style":236},[428],{"type":37,"value":429},"      routes: [",{"type":32,"tag":212,"props":431,"children":432},{"style":255},[433],{"type":37,"value":434},"'\u002Fsitemap.xml'",{"type":32,"tag":212,"props":436,"children":437},{"style":236},[438],{"type":37,"value":439},"], ",{"type":32,"tag":212,"props":441,"children":442},{"style":277},[443],{"type":37,"value":444},"\u002F\u002F Manuelle Route-Definition\n",{"type":32,"tag":212,"props":446,"children":448},{"class":214,"line":447},12,[449,454,459,463,468,472],{"type":32,"tag":212,"props":450,"children":451},{"style":236},[452],{"type":37,"value":453},"      ignore: [",{"type":32,"tag":212,"props":455,"children":456},{"style":255},[457],{"type":37,"value":458},"'\u002Fadmin'",{"type":32,"tag":212,"props":460,"children":461},{"style":236},[462],{"type":37,"value":47},{"type":32,"tag":212,"props":464,"children":465},{"style":255},[466],{"type":37,"value":467},"'\u002Fcheckout\u002F**'",{"type":32,"tag":212,"props":469,"children":470},{"style":236},[471],{"type":37,"value":439},{"type":32,"tag":212,"props":473,"children":474},{"style":277},[475],{"type":37,"value":476},"\u002F\u002F Von Prerender ausschließen\n",{"type":32,"tag":212,"props":478,"children":480},{"class":214,"line":479},13,[481],{"type":32,"tag":212,"props":482,"children":483},{"style":236},[484],{"type":37,"value":485},"    },\n",{"type":32,"tag":212,"props":487,"children":489},{"class":214,"line":488},14,[490],{"type":32,"tag":212,"props":491,"children":492},{"style":236},[493],{"type":37,"value":381},{"type":32,"tag":212,"props":495,"children":497},{"class":214,"line":496},15,[498],{"type":32,"tag":212,"props":499,"children":500},{"style":236},[501],{"type":37,"value":502},"})\n",{"type":32,"tag":33,"props":504,"children":505},{},[506,508,514,516,522],{"type":37,"value":507},"Mit ",{"type":32,"tag":40,"props":509,"children":511},{"className":510},[],[512],{"type":37,"value":513},"crawlLinks: true",{"type":37,"value":515}," werden Links aus der Sitemap automatisch erkannt. Bei 500-Seiten-Sites brauchst du keine manuelle Route-Liste zu pflegen. Bei 50.000 Seiten kann das Crawlen von allen Links 10 Minuten Build-Zeit kosten — dann nutze manuelle ",{"type":32,"tag":40,"props":517,"children":519},{"className":518},[],[520],{"type":37,"value":521},"routes",{"type":37,"value":523}," Arrays + inkrementelle Strategie.",{"type":32,"tag":525,"props":526,"children":528},"h3",{"id":527},"payload-extraction-datenverdopplung-vermeiden",[529],{"type":37,"value":530},"Payload Extraction: Datenverdopplung vermeiden",{"type":32,"tag":33,"props":532,"children":533},{},[534,536,542],{"type":37,"value":535},"Nuxt 3 erzeugt für jede vorgerenderte Route eine ",{"type":32,"tag":40,"props":537,"children":539},{"className":538},[],[540],{"type":37,"value":541},"_payload.json",{"type":37,"value":543},". Diese Datei serialisiert die serverseitig geholten Daten. Bei SPA Navigation wird diese JSON wiederverwendet, ohne erneute API-Calls.",{"type":32,"tag":202,"props":545,"children":547},{"className":204,"code":546,"language":206,"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",[548],{"type":32,"tag":40,"props":549,"children":550},{"__ignoreMap":16},[551,559,577,605,697],{"type":32,"tag":212,"props":552,"children":553},{"class":214,"line":215},[554],{"type":32,"tag":212,"props":555,"children":556},{"style":277},[557],{"type":37,"value":558},"\u002F\u002F pages\u002Fproduct\u002F[id].vue\n",{"type":32,"tag":212,"props":560,"children":561},{"class":214,"line":242},[562,567,572],{"type":32,"tag":212,"props":563,"children":564},{"style":219},[565],{"type":37,"value":566},"\u003C",{"type":32,"tag":212,"props":568,"children":569},{"style":236},[570],{"type":37,"value":571},"script setup",{"type":32,"tag":212,"props":573,"children":574},{"style":219},[575],{"type":37,"value":576},">\n",{"type":32,"tag":212,"props":578,"children":579},{"class":214,"line":251},[580,585,590,595,600],{"type":32,"tag":212,"props":581,"children":582},{"style":219},[583],{"type":37,"value":584},"const",{"type":32,"tag":212,"props":586,"children":587},{"style":266},[588],{"type":37,"value":589}," route",{"type":32,"tag":212,"props":591,"children":592},{"style":219},[593],{"type":37,"value":594}," =",{"type":32,"tag":212,"props":596,"children":597},{"style":230},[598],{"type":37,"value":599}," useRoute",{"type":32,"tag":212,"props":601,"children":602},{"style":236},[603],{"type":37,"value":604},"()\n",{"type":32,"tag":212,"props":606,"children":607},{"class":214,"line":283},[608,612,617,623,628,633,638,643,648,653,658,663,668,673,678,682,687,692],{"type":32,"tag":212,"props":609,"children":610},{"style":219},[611],{"type":37,"value":584},{"type":32,"tag":212,"props":613,"children":614},{"style":236},[615],{"type":37,"value":616}," { ",{"type":32,"tag":212,"props":618,"children":620},{"style":619},"--shiki-default:#FFAB70",[621],{"type":37,"value":622},"data",{"type":32,"tag":212,"props":624,"children":625},{"style":236},[626],{"type":37,"value":627},": ",{"type":32,"tag":212,"props":629,"children":630},{"style":266},[631],{"type":37,"value":632},"product",{"type":32,"tag":212,"props":634,"children":635},{"style":236},[636],{"type":37,"value":637}," } ",{"type":32,"tag":212,"props":639,"children":640},{"style":219},[641],{"type":37,"value":642},"=",{"type":32,"tag":212,"props":644,"children":645},{"style":219},[646],{"type":37,"value":647}," await",{"type":32,"tag":212,"props":649,"children":650},{"style":230},[651],{"type":37,"value":652}," useFetch",{"type":32,"tag":212,"props":654,"children":655},{"style":236},[656],{"type":37,"value":657},"(",{"type":32,"tag":212,"props":659,"children":660},{"style":255},[661],{"type":37,"value":662},"`\u002Fapi\u002Fproducts\u002F${",{"type":32,"tag":212,"props":664,"children":665},{"style":236},[666],{"type":37,"value":667},"route",{"type":32,"tag":212,"props":669,"children":670},{"style":255},[671],{"type":37,"value":672},".",{"type":32,"tag":212,"props":674,"children":675},{"style":236},[676],{"type":37,"value":677},"params",{"type":32,"tag":212,"props":679,"children":680},{"style":255},[681],{"type":37,"value":672},{"type":32,"tag":212,"props":683,"children":684},{"style":236},[685],{"type":37,"value":686},"id",{"type":32,"tag":212,"props":688,"children":689},{"style":255},[690],{"type":37,"value":691},"}`",{"type":32,"tag":212,"props":693,"children":694},{"style":236},[695],{"type":37,"value":696},")\n",{"type":32,"tag":212,"props":698,"children":699},{"class":214,"line":311},[700,705,710],{"type":32,"tag":212,"props":701,"children":702},{"style":219},[703],{"type":37,"value":704},"\u003C\u002F",{"type":32,"tag":212,"props":706,"children":707},{"style":236},[708],{"type":37,"value":709},"script",{"type":32,"tag":212,"props":711,"children":712},{"style":219},[713],{"type":37,"value":576},{"type":32,"tag":33,"props":715,"children":716},{},[717,719,725,727,732,734,739],{"type":37,"value":718},"Während des Prerenderings wird ",{"type":32,"tag":40,"props":720,"children":722},{"className":721},[],[723],{"type":37,"value":724},"\u002Fapi\u002Fproducts\u002F123",{"type":37,"value":726}," aufgerufen, die Response wird in ",{"type":32,"tag":40,"props":728,"children":730},{"className":729},[],[731],{"type":37,"value":541},{"type":37,"value":733}," eingebettet. Bei Client-seitiger Navigation wird dasselbe Daten-Set wiederverwendet. Tradeoff: Payload-Größe. Bei 10.000 Produkten mit je 5 KB ",{"type":32,"tag":40,"props":735,"children":737},{"className":736},[],[738],{"type":37,"value":541},{"type":37,"value":740}," entstehen 50 MB statische Assets. Rechne CDN-Bandbreitenkosten ein.",{"type":32,"tag":33,"props":742,"children":743},{},[744,746,752],{"type":37,"value":745},"Um dies zu optimieren, verwende Build-Zeit-Kompression für Payloads im ",{"type":32,"tag":40,"props":747,"children":749},{"className":748},[],[750],{"type":37,"value":751},"nitro.output.publicDir",{"type":37,"value":753}," Verzeichnis. Nginx\u002FCloudflare machen das automatisch, aber Gzip\u002FBrotli zur Build-Zeit reduziert 5 KB → 1,2 KB.",{"type":32,"tag":56,"props":755,"children":757},{"id":756},"build-performance-parallelisierung-und-cache-strategien",[758],{"type":37,"value":759},"Build-Performance: Parallelisierung und Cache-Strategien",{"type":32,"tag":33,"props":761,"children":762},{},[763],{"type":37,"value":764},"Die Nuxt 3 Build-Pipeline hat 3 Phasen: Webpack\u002FVite Compile → Nitro Prerender → Asset Optimization. Das Prerender von 10.000 Routes wird zum Bottleneck.",{"type":32,"tag":33,"props":766,"children":767},{},[768,773,775,781],{"type":32,"tag":71,"props":769,"children":770},{},[771],{"type":37,"value":772},"Parallelisierung:",{"type":37,"value":774}," Der Parameter ",{"type":32,"tag":40,"props":776,"children":778},{"className":777},[],[779],{"type":37,"value":780},"nitro.prerender.concurrency",{"type":37,"value":782}," steuert, wie viele Routes gleichzeitig gerendert werden. Standard: 10. Mit ausreichend RAM:",{"type":32,"tag":202,"props":784,"children":786},{"className":204,"code":785,"language":206,"meta":16,"style":16},"nitro: {\n  prerender: {\n    concurrency: 50,\n  },\n}\n",[787],{"type":32,"tag":40,"props":788,"children":789},{"__ignoreMap":16},[790,803,815,837,844],{"type":32,"tag":212,"props":791,"children":792},{"class":214,"line":215},[793,798],{"type":32,"tag":212,"props":794,"children":795},{"style":230},[796],{"type":37,"value":797},"nitro",{"type":32,"tag":212,"props":799,"children":800},{"style":236},[801],{"type":37,"value":802},": {\n",{"type":32,"tag":212,"props":804,"children":805},{"class":214,"line":242},[806,811],{"type":32,"tag":212,"props":807,"children":808},{"style":230},[809],{"type":37,"value":810},"  prerender",{"type":32,"tag":212,"props":812,"children":813},{"style":236},[814],{"type":37,"value":802},{"type":32,"tag":212,"props":816,"children":817},{"class":214,"line":251},[818,823,827,832],{"type":32,"tag":212,"props":819,"children":820},{"style":230},[821],{"type":37,"value":822},"    concurrency",{"type":32,"tag":212,"props":824,"children":825},{"style":236},[826],{"type":37,"value":627},{"type":32,"tag":212,"props":828,"children":829},{"style":266},[830],{"type":37,"value":831},"50",{"type":32,"tag":212,"props":833,"children":834},{"style":236},[835],{"type":37,"value":836},",\n",{"type":32,"tag":212,"props":838,"children":839},{"class":214,"line":283},[840],{"type":32,"tag":212,"props":841,"children":842},{"style":236},[843],{"type":37,"value":381},{"type":32,"tag":212,"props":845,"children":846},{"class":214,"line":311},[847],{"type":32,"tag":212,"props":848,"children":849},{"style":236},[850],{"type":37,"value":851},"}\n",{"type":32,"tag":33,"props":853,"children":854},{},[855],{"type":37,"value":856},"Bei 4-Core-CPU + 16 GB RAM reduzierte die Steigerung von 10 auf 50 die Build-Zeit von 40s auf 12s. Über 50 gibt es sinkende Grenzerträge, CPU-Context-Switching-Overhead steigt.",{"type":32,"tag":33,"props":858,"children":859},{},[860,865,867,873],{"type":32,"tag":71,"props":861,"children":862},{},[863],{"type":37,"value":864},"Inkrementeller Build-Cache:",{"type":37,"value":866}," Netlify\u002FVercel halten den ",{"type":32,"tag":40,"props":868,"children":870},{"className":869},[],[871],{"type":37,"value":872},".nuxt\u002Fprerender",{"type":37,"value":874}," Cache. Unveränderte Routes müssen nicht neu gerendert werden. Mit Git-Hash-basierter Cache-Invalidation werden bei jedem Deploy nur veränderte Routes neu gerendert.",{"type":32,"tag":202,"props":876,"children":878},{"className":204,"code":877,"language":206,"meta":16,"style":16},"\u002F\u002F 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",[879],{"type":32,"tag":40,"props":880,"children":881},{"__ignoreMap":16},[882,890,898,915,932,941,949,966,974,982],{"type":32,"tag":212,"props":883,"children":884},{"class":214,"line":215},[885],{"type":32,"tag":212,"props":886,"children":887},{"style":277},[888],{"type":37,"value":889},"\u002F\u002F netlify.toml\n",{"type":32,"tag":212,"props":891,"children":892},{"class":214,"line":242},[893],{"type":32,"tag":212,"props":894,"children":895},{"style":236},[896],{"type":37,"value":897},"[build]\n",{"type":32,"tag":212,"props":899,"children":900},{"class":214,"line":251},[901,906,910],{"type":32,"tag":212,"props":902,"children":903},{"style":236},[904],{"type":37,"value":905},"  command ",{"type":32,"tag":212,"props":907,"children":908},{"style":219},[909],{"type":37,"value":642},{"type":32,"tag":212,"props":911,"children":912},{"style":255},[913],{"type":37,"value":914}," \"nuxt build\"\n",{"type":32,"tag":212,"props":916,"children":917},{"class":214,"line":283},[918,923,927],{"type":32,"tag":212,"props":919,"children":920},{"style":236},[921],{"type":37,"value":922},"  publish ",{"type":32,"tag":212,"props":924,"children":925},{"style":219},[926],{"type":37,"value":642},{"type":32,"tag":212,"props":928,"children":929},{"style":255},[930],{"type":37,"value":931}," \".output\u002Fpublic\"\n",{"type":32,"tag":212,"props":933,"children":934},{"class":214,"line":311},[935],{"type":32,"tag":212,"props":936,"children":938},{"emptyLinePlaceholder":937},true,[939],{"type":37,"value":940},"\n",{"type":32,"tag":212,"props":942,"children":943},{"class":214,"line":348},[944],{"type":32,"tag":212,"props":945,"children":946},{"style":236},[947],{"type":37,"value":948},"[[plugins]]\n",{"type":32,"tag":212,"props":950,"children":951},{"class":214,"line":375},[952,957,961],{"type":32,"tag":212,"props":953,"children":954},{"style":219},[955],{"type":37,"value":956},"  package",{"type":32,"tag":212,"props":958,"children":959},{"style":219},[960],{"type":37,"value":594},{"type":32,"tag":212,"props":962,"children":963},{"style":255},[964],{"type":37,"value":965}," \"@netlify\u002Fplugin-nextjs\"\n",{"type":32,"tag":212,"props":967,"children":968},{"class":214,"line":384},[969],{"type":32,"tag":212,"props":970,"children":971},{"style":236},[972],{"type":37,"value":973},"  \n",{"type":32,"tag":212,"props":975,"children":976},{"class":214,"line":26},[977],{"type":32,"tag":212,"props":978,"children":979},{"style":236},[980],{"type":37,"value":981},"[build.environment]\n",{"type":32,"tag":212,"props":983,"children":984},{"class":214,"line":401},[985,990,994],{"type":32,"tag":212,"props":986,"children":987},{"style":266},[988],{"type":37,"value":989},"  NUXT_TELEMETRY_DISABLED",{"type":32,"tag":212,"props":991,"children":992},{"style":219},[993],{"type":37,"value":594},{"type":32,"tag":212,"props":995,"children":996},{"style":255},[997],{"type":37,"value":998}," \"1\"\n",{"type":32,"tag":33,"props":1000,"children":1001},{},[1002],{"type":37,"value":1003},"Bei einer Cache-Hit-Rate von 70 % wird eine 5000-Route-Site in 5 Sekunden statt 15 Sekunden gebaut.",{"type":32,"tag":525,"props":1005,"children":1007},{"id":1006},"bundle-größe-vs-prerender-tradeoff",[1008],{"type":37,"value":1009},"Bundle-Größe vs. Prerender-Tradeoff",{"type":32,"tag":33,"props":1011,"children":1012},{},[1013,1015,1021],{"type":37,"value":1014},"Vollständig vorgerenderte HTML-Dateien enthalten Bundle-JavaScript für Hydration. Mit ",{"type":32,"tag":40,"props":1016,"children":1018},{"className":1017},[],[1019],{"type":37,"value":1020},"experimental.payloadExtraction",{"type":37,"value":1022}," in Nuxt 3 kannst du Payload vom HTML trennen. Dies optimiert Chunk Splitting.",{"type":32,"tag":202,"props":1024,"children":1026},{"className":204,"code":1025,"language":206,"meta":16,"style":16},"experimental: {\n  payloadExtraction: true,\n  inlineSSRStyles: false, \u002F\u002F Critical CSS nicht inline\n}\n",[1027],{"type":32,"tag":40,"props":1028,"children":1029},{"__ignoreMap":16},[1030,1042,1062,1087],{"type":32,"tag":212,"props":1031,"children":1032},{"class":214,"line":215},[1033,1038],{"type":32,"tag":212,"props":1034,"children":1035},{"style":230},[1036],{"type":37,"value":1037},"experimental",{"type":32,"tag":212,"props":1039,"children":1040},{"style":236},[1041],{"type":37,"value":802},{"type":32,"tag":212,"props":1043,"children":1044},{"class":214,"line":242},[1045,1050,1054,1058],{"type":32,"tag":212,"props":1046,"children":1047},{"style":230},[1048],{"type":37,"value":1049},"  payloadExtraction",{"type":32,"tag":212,"props":1051,"children":1052},{"style":236},[1053],{"type":37,"value":627},{"type":32,"tag":212,"props":1055,"children":1056},{"style":266},[1057],{"type":37,"value":269},{"type":32,"tag":212,"props":1059,"children":1060},{"style":236},[1061],{"type":37,"value":836},{"type":32,"tag":212,"props":1063,"children":1064},{"class":214,"line":251},[1065,1070,1074,1078,1082],{"type":32,"tag":212,"props":1066,"children":1067},{"style":230},[1068],{"type":37,"value":1069},"  inlineSSRStyles",{"type":32,"tag":212,"props":1071,"children":1072},{"style":236},[1073],{"type":37,"value":627},{"type":32,"tag":212,"props":1075,"children":1076},{"style":266},[1077],{"type":37,"value":336},{"type":32,"tag":212,"props":1079,"children":1080},{"style":236},[1081],{"type":37,"value":47},{"type":32,"tag":212,"props":1083,"children":1084},{"style":277},[1085],{"type":37,"value":1086},"\u002F\u002F Critical CSS nicht inline\n",{"type":32,"tag":212,"props":1088,"children":1089},{"class":214,"line":283},[1090],{"type":32,"tag":212,"props":1091,"children":1092},{"style":236},[1093],{"type":37,"value":851},{"type":32,"tag":33,"props":1095,"children":1096},{},[1097,1098,1104],{"type":37,"value":507},{"type":32,"tag":40,"props":1099,"children":1101},{"className":1100},[],[1102],{"type":37,"value":1103},"payloadExtraction: true",{"type":37,"value":1105}," wird 250 KB HTML in 180 KB HTML + 70 KB JSON aufgeteilt. Client-seitiger Navigation ruft JSON ab, der HTML wird nicht neu geparst. LCP sinkt von 2,1s auf 1,8s (90th Percentile, Mobile 3G).",{"type":32,"tag":33,"props":1107,"children":1108},{},[1109],{"type":37,"value":1110},"Das Tradeoff: ein zusätzlicher HTTP-Request. Mit HTTP\u002F2 Multiplexing kein Problem, bei HTTP\u002F1.1 steigt die Latenz. Bei modernen CDNs wie Cloudflare\u002FFastly ist HTTP\u002F2 Standard, diese Strategie bringt also Gewinn.",{"type":32,"tag":56,"props":1112,"children":1114},{"id":1113},"headless-commerce-integration-shopify-nuxt-ssg",[1115],{"type":37,"value":1116},"Headless-Commerce-Integration: Shopify + Nuxt SSG",{"type":32,"tag":33,"props":1118,"children":1119},{},[1120],{"type":37,"value":1121},"Bei E-Commerce-Seiten macht das Vorrendern von Produktseiten die Inventory-Synchronisierung komplex. Mit der Shopify GraphQL Storefront API baust du Webhook-getriebene Revalidation auf.",{"type":32,"tag":202,"props":1123,"children":1125},{"className":204,"code":1124,"language":206,"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",[1126],{"type":32,"tag":40,"props":1127,"children":1128},{"__ignoreMap":16},[1129,1137,1186,1217,1224,1252,1274,1306,1324,1332,1340,1347,1370],{"type":32,"tag":212,"props":1130,"children":1131},{"class":214,"line":215},[1132],{"type":32,"tag":212,"props":1133,"children":1134},{"style":277},[1135],{"type":37,"value":1136},"\u002F\u002F server\u002Fapi\u002Frevalidate.post.ts\n",{"type":32,"tag":212,"props":1138,"children":1139},{"class":214,"line":242},[1140,1144,1148,1153,1157,1162,1166,1171,1176,1181],{"type":32,"tag":212,"props":1141,"children":1142},{"style":219},[1143],{"type":37,"value":222},{"type":32,"tag":212,"props":1145,"children":1146},{"style":219},[1147],{"type":37,"value":227},{"type":32,"tag":212,"props":1149,"children":1150},{"style":230},[1151],{"type":37,"value":1152}," defineEventHandler",{"type":32,"tag":212,"props":1154,"children":1155},{"style":236},[1156],{"type":37,"value":657},{"type":32,"tag":212,"props":1158,"children":1159},{"style":219},[1160],{"type":37,"value":1161},"async",{"type":32,"tag":212,"props":1163,"children":1164},{"style":236},[1165],{"type":37,"value":77},{"type":32,"tag":212,"props":1167,"children":1168},{"style":619},[1169],{"type":37,"value":1170},"event",{"type":32,"tag":212,"props":1172,"children":1173},{"style":236},[1174],{"type":37,"value":1175},") ",{"type":32,"tag":212,"props":1177,"children":1178},{"style":219},[1179],{"type":37,"value":1180},"=>",{"type":32,"tag":212,"props":1182,"children":1183},{"style":236},[1184],{"type":37,"value":1185}," {\n",{"type":32,"tag":212,"props":1187,"children":1188},{"class":214,"line":251},[1189,1194,1199,1203,1207,1212],{"type":32,"tag":212,"props":1190,"children":1191},{"style":219},[1192],{"type":37,"value":1193},"  const",{"type":32,"tag":212,"props":1195,"children":1196},{"style":266},[1197],{"type":37,"value":1198}," body",{"type":32,"tag":212,"props":1200,"children":1201},{"style":219},[1202],{"type":37,"value":594},{"type":32,"tag":212,"props":1204,"children":1205},{"style":219},[1206],{"type":37,"value":647},{"type":32,"tag":212,"props":1208,"children":1209},{"style":230},[1210],{"type":37,"value":1211}," readBody",{"type":32,"tag":212,"props":1213,"children":1214},{"style":236},[1215],{"type":37,"value":1216},"(event)\n",{"type":32,"tag":212,"props":1218,"children":1219},{"class":214,"line":283},[1220],{"type":32,"tag":212,"props":1221,"children":1222},{"style":236},[1223],{"type":37,"value":973},{"type":32,"tag":212,"props":1225,"children":1226},{"class":214,"line":311},[1227,1232,1237,1242,1247],{"type":32,"tag":212,"props":1228,"children":1229},{"style":219},[1230],{"type":37,"value":1231},"  if",{"type":32,"tag":212,"props":1233,"children":1234},{"style":236},[1235],{"type":37,"value":1236}," (body.topic ",{"type":32,"tag":212,"props":1238,"children":1239},{"style":219},[1240],{"type":37,"value":1241},"===",{"type":32,"tag":212,"props":1243,"children":1244},{"style":255},[1245],{"type":37,"value":1246}," 'products\u002Fupdate'",{"type":32,"tag":212,"props":1248,"children":1249},{"style":236},[1250],{"type":37,"value":1251},") {\n",{"type":32,"tag":212,"props":1253,"children":1254},{"class":214,"line":348},[1255,1260,1265,1269],{"type":32,"tag":212,"props":1256,"children":1257},{"style":219},[1258],{"type":37,"value":1259},"    const",{"type":32,"tag":212,"props":1261,"children":1262},{"style":266},[1263],{"type":37,"value":1264}," productId",{"type":32,"tag":212,"props":1266,"children":1267},{"style":219},[1268],{"type":37,"value":594},{"type":32,"tag":212,"props":1270,"children":1271},{"style":236},[1272],{"type":37,"value":1273}," body.id\n",{"type":32,"tag":212,"props":1275,"children":1276},{"class":214,"line":375},[1277,1282,1287,1292,1296,1301],{"type":32,"tag":212,"props":1278,"children":1279},{"style":219},[1280],{"type":37,"value":1281},"    await",{"type":32,"tag":212,"props":1283,"children":1284},{"style":236},[1285],{"type":37,"value":1286}," nitroApp.hooks.",{"type":32,"tag":212,"props":1288,"children":1289},{"style":230},[1290],{"type":37,"value":1291},"callHook",{"type":32,"tag":212,"props":1293,"children":1294},{"style":236},[1295],{"type":37,"value":657},{"type":32,"tag":212,"props":1297,"children":1298},{"style":255},[1299],{"type":37,"value":1300},"'prerender:routes'",{"type":32,"tag":212,"props":1302,"children":1303},{"style":236},[1304],{"type":37,"value":1305},", [\n",{"type":32,"tag":212,"props":1307,"children":1308},{"class":214,"line":384},[1309,1314,1319],{"type":32,"tag":212,"props":1310,"children":1311},{"style":255},[1312],{"type":37,"value":1313},"      `\u002Fproducts\u002F${",{"type":32,"tag":212,"props":1315,"children":1316},{"style":236},[1317],{"type":37,"value":1318},"productId",{"type":32,"tag":212,"props":1320,"children":1321},{"style":255},[1322],{"type":37,"value":1323},"}`\n",{"type":32,"tag":212,"props":1325,"children":1326},{"class":214,"line":26},[1327],{"type":32,"tag":212,"props":1328,"children":1329},{"style":236},[1330],{"type":37,"value":1331},"    ])\n",{"type":32,"tag":212,"props":1333,"children":1334},{"class":214,"line":401},[1335],{"type":32,"tag":212,"props":1336,"children":1337},{"style":236},[1338],{"type":37,"value":1339},"  }\n",{"type":32,"tag":212,"props":1341,"children":1342},{"class":214,"line":423},[1343],{"type":32,"tag":212,"props":1344,"children":1345},{"style":236},[1346],{"type":37,"value":973},{"type":32,"tag":212,"props":1348,"children":1349},{"class":214,"line":447},[1350,1355,1360,1365],{"type":32,"tag":212,"props":1351,"children":1352},{"style":219},[1353],{"type":37,"value":1354},"  return",{"type":32,"tag":212,"props":1356,"children":1357},{"style":236},[1358],{"type":37,"value":1359}," { status: ",{"type":32,"tag":212,"props":1361,"children":1362},{"style":255},[1363],{"type":37,"value":1364},"'revalidated'",{"type":32,"tag":212,"props":1366,"children":1367},{"style":236},[1368],{"type":37,"value":1369}," }\n",{"type":32,"tag":212,"props":1371,"children":1372},{"class":214,"line":479},[1373],{"type":32,"tag":212,"props":1374,"children":1375},{"style":236},[1376],{"type":37,"value":502},{"type":32,"tag":33,"props":1378,"children":1379},{},[1380,1382,1388],{"type":37,"value":1381},"Abonniere das Webhook aus der Shopify Admin API → Bei Produktaktualisierung wird ",{"type":32,"tag":40,"props":1383,"children":1385},{"className":1384},[],[1386],{"type":37,"value":1387},"\u002Fapi\u002Frevalidate",{"type":37,"value":1389}," ausgelöst → Nur diese Route wird neu gerendert. Statt ganzen Katalog zu rebuilden, regeneriert sich eine Route in 200 ms.",{"type":32,"tag":33,"props":1391,"children":1392},{},[1393,1395,1404],{"type":37,"value":1394},"In ",{"type":32,"tag":1396,"props":1397,"children":1401},"a",{"href":1398,"rel":1399},"https:\u002F\u002Fwww.roibase.com.tr\u002Fde\u002Fheadless",[1400],"nofollow",[1402],{"type":37,"value":1403},"Headless-Commerce",{"type":37,"value":1405},"-Architekturen ist dieses Pattern kritisch. Bei monolithischen Plattformen ist Full Rebuild erforderlich, bei Headless machst du granulare Invalidation. Bei 50.000 SKUs mit täglichen 500 Produktaktualisierungen dauert Full Rebuild 6 Stunden, inkrementelle Revalidation 2 Minuten.",{"type":32,"tag":56,"props":1407,"children":1409},{"id":1408},"isr-edge-caching-hybrid-strategie-mit-cloudflare-workers",[1410],{"type":37,"value":1411},"ISR + Edge Caching: Hybrid-Strategie mit Cloudflare Workers",{"type":32,"tag":33,"props":1413,"children":1414},{},[1415],{"type":37,"value":1416},"In der Kombination Nuxt 3 + Cloudflare Pages implementierst du ISR mit Workers KV. Routes werden beim ersten Request gerendert, in KV geschrieben, nachfolgende Requests aus KV bedient.",{"type":32,"tag":202,"props":1418,"children":1420},{"className":204,"code":1419,"language":206,"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 1 Stunde TTL\n  },\n})\n",[1421],{"type":32,"tag":40,"props":1422,"children":1423},{"__ignoreMap":16},[1424,1432,1451,1458,1475,1482,1489,1514,1521],{"type":32,"tag":212,"props":1425,"children":1426},{"class":214,"line":215},[1427],{"type":32,"tag":212,"props":1428,"children":1429},{"style":277},[1430],{"type":37,"value":1431},"\u002F\u002F nuxt.config.ts\n",{"type":32,"tag":212,"props":1433,"children":1434},{"class":214,"line":242},[1435,1439,1443,1447],{"type":32,"tag":212,"props":1436,"children":1437},{"style":219},[1438],{"type":37,"value":222},{"type":32,"tag":212,"props":1440,"children":1441},{"style":219},[1442],{"type":37,"value":227},{"type":32,"tag":212,"props":1444,"children":1445},{"style":230},[1446],{"type":37,"value":233},{"type":32,"tag":212,"props":1448,"children":1449},{"style":236},[1450],{"type":37,"value":239},{"type":32,"tag":212,"props":1452,"children":1453},{"class":214,"line":251},[1454],{"type":32,"tag":212,"props":1455,"children":1456},{"style":236},[1457],{"type":37,"value":390},{"type":32,"tag":212,"props":1459,"children":1460},{"class":214,"line":283},[1461,1466,1471],{"type":32,"tag":212,"props":1462,"children":1463},{"style":236},[1464],{"type":37,"value":1465},"    preset: ",{"type":32,"tag":212,"props":1467,"children":1468},{"style":255},[1469],{"type":37,"value":1470},"'cloudflare-pages'",{"type":32,"tag":212,"props":1472,"children":1473},{"style":236},[1474],{"type":37,"value":836},{"type":32,"tag":212,"props":1476,"children":1477},{"class":214,"line":311},[1478],{"type":32,"tag":212,"props":1479,"children":1480},{"style":236},[1481],{"type":37,"value":381},{"type":32,"tag":212,"props":1483,"children":1484},{"class":214,"line":348},[1485],{"type":32,"tag":212,"props":1486,"children":1487},{"style":236},[1488],{"type":37,"value":248},{"type":32,"tag":212,"props":1490,"children":1491},{"class":214,"line":375},[1492,1497,1501,1505,1509],{"type":32,"tag":212,"props":1493,"children":1494},{"style":255},[1495],{"type":37,"value":1496},"    '\u002Fblog\u002F**'",{"type":32,"tag":212,"props":1498,"children":1499},{"style":236},[1500],{"type":37,"value":359},{"type":32,"tag":212,"props":1502,"children":1503},{"style":266},[1504],{"type":37,"value":299},{"type":32,"tag":212,"props":1506,"children":1507},{"style":236},[1508],{"type":37,"value":274},{"type":32,"tag":212,"props":1510,"children":1511},{"style":277},[1512],{"type":37,"value":1513},"\u002F\u002F 1 Stunde TTL\n",{"type":32,"tag":212,"props":1515,"children":1516},{"class":214,"line":384},[1517],{"type":32,"tag":212,"props":1518,"children":1519},{"style":236},[1520],{"type":37,"value":381},{"type":32,"tag":212,"props":1522,"children":1523},{"class":214,"line":26},[1524],{"type":32,"tag":212,"props":1525,"children":1526},{"style":236},[1527],{"type":37,"value":502},{"type":32,"tag":33,"props":1529,"children":1530},{},[1531],{"type":37,"value":1532},"Cloudflare KV hat Latenz ~50 ms (globaler Edge). Erster Render 800 ms + 50 ms KV Write, nachfolgende Requests 50 ms. Bei 95 % Cache-Hit-Rate ist die durchschnittliche Response-Zeit 95×50 ms + 5×850 ms = 90 ms. Reines SSR würde konstant 800 ms sein.",{"type":32,"tag":33,"props":1534,"children":1535},{},[1536],{"type":37,"value":1537},"Tradeoff: KV-Write-Kosten. Bei 1 M Requests\u002FMonat kostet KV $0,50 (Cloudflare Pricing 2026). Static Hosting kostet $0, ISR addiert also Kosten, aber der UX-Gewinn rechtfertigt das.",{"type":32,"tag":1539,"props":1540,"children":1541},"hr",{},[],{"type":32,"tag":33,"props":1543,"children":1544},{},[1545],{"type":37,"value":1546},"Nuxt 3 SSG-Strategien erfordern Entscheidungen im Dreieck: Datenfreshness, Build-Zeit und Runtime-Performance. Homepage vorrendern, Long-Tail mit ISR, kritische Pfade serverseitig — diese Mischung muss für jedes Projekt neu kalkuliert werden. Ohne Messung ist es falsch zu sagen „Full Static ist immer schneller\" — bei 10.000 Routes kann Build-Zeit die UX verschlechtern. Mit inkrementeller Regeneration + Edge Cache gewinnst du sowohl Build-Zeit als auch Response-Zeit, musst aber die Orchestration-Komplexität akzeptieren.",{"type":32,"tag":1548,"props":1549,"children":1550},"style",{},[1551],{"type":37,"value":1552},"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":251,"depth":251,"links":1554},[1555,1556,1559,1562,1563],{"id":58,"depth":242,"text":61},{"id":148,"depth":242,"text":151,"children":1557},[1558],{"id":527,"depth":251,"text":530},{"id":756,"depth":242,"text":759,"children":1560},[1561],{"id":1006,"depth":251,"text":1009},{"id":1113,"depth":242,"text":1116},{"id":1408,"depth":242,"text":1411},"markdown","content:de:tech:ssg-leitfaden-fuer-nuxt-3.md","content","de\u002Ftech\u002Fssg-leitfaden-fuer-nuxt-3.md","de\u002Ftech\u002Fssg-leitfaden-fuer-nuxt-3","md",1780898613034]