[{"data":1,"prerenderedAt":1909},["ShallowReactive",2],{"article-alternates":3,"article-\u002Fru\u002Ftech\u002Fssg-strategii-i-optimizaciya-sborki-dlya-nuxt-3":13},{"i18nKey":4,"paths":5},"tech-007-2026-06",{"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-prerendu-nuxt-3","\u002Fit\u002Ftech\u002Festrategia-ssg-nuxt-3-prerender-e-ottimizzazione-build","\u002Fru\u002Ftech\u002Fssg-strategii-i-optimizaciya-sborki-dlya-nuxt-3","\u002Ftr\u002Ftech\u002Fnuxt-3-ssg-prerender-stratejileri-ve-build-optimizasyonu",{"_path":11,"_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":1903,"_id":1904,"_source":1905,"_file":1906,"_stem":1907,"_extension":1908},"tech",false,"","Nuxt 3 SSG: Strategii Prerendera i Optimizaciya Sborki","Staticheskaya generaciya sajtov v Nuxt 3: route rules, nitro prerender, inkrementalnaya sborka i edge deployment. S real'nymi benchmarkami.","2026-06-11",[21,22,23,24,25],"nuxt-3","ssg","static-site-generation","nitro","build-optimization",8,"Roibase",{"type":29,"children":30,"toc":1889},"root",[31,39,46,76,243,264,284,290,303,459,480,500,507,520,773,778,784,805,841,846,859,920,925,931,936,1347,1352,1358,1392,1397,1439,1481,1493,1499,1504,1705,1710,1716,1732,1737,1860,1865,1871,1883],{"type":32,"tag":33,"props":34,"children":35},"element","p",{},[36],{"type":37,"value":38},"text","Motor SSG v Nuxt 3 — Nitro — zapuskaet Vue Router vo vremya kompilacii i generiruet staticheskij HTML. Odnak dlya e-kommerca s 500+ stranicami polnaya sborka kazhdogo ruta mozhet zanyat' 12 minut. V etoj stat'e my razbirem strategii prerendera, mekhanizmy kontrolya na urovne rut i tekhniku snizheniya vremeni sborki na 70%. Real'nye rezul'taty: odin proekt sokratilsya s 12 minut do 3,5 minut, vremya razvyortyvaniya na edge CDN snyzilos' do 2 minut.",{"type":32,"tag":40,"props":41,"children":43},"h2",{"id":42},"motor-prerendera-nitro-i-bazovye-nastrojki",[44],{"type":37,"value":45},"Motor Prerendera Nitro i Bazovye Nastrojki",{"type":32,"tag":33,"props":47,"children":48},{},[49,51,58,60,66,68,74],{"type":37,"value":50},"V Nuxt 3 SSG kontroliruetsya klyuchom ",{"type":32,"tag":52,"props":53,"children":55},"code",{"className":54},[],[56],{"type":37,"value":57},"nitro.prerender",{"type":37,"value":59}," v ",{"type":32,"tag":52,"props":61,"children":63},{"className":62},[],[64],{"type":37,"value":65},"nuxt.config.ts",{"type":37,"value":67},". Standartnym povedeniem yavlyaetsya avtomaticheskoe skanirovanie vsех rut iz papki ",{"type":32,"tag":52,"props":69,"children":71},{"className":70},[],[72],{"type":37,"value":73},"pages\u002F",{"type":37,"value":75},". Odnak eto pokryvaet tol'ko staticheskie marshruty — dinamicheskie parametrizovannye marshrute trebuyut ruchnogo ob\"yavleniya.",{"type":32,"tag":77,"props":78,"children":82},"pre",{"className":79,"code":80,"language":81,"meta":16,"style":16},"language-typescript shiki shiki-themes github-dark","\u002F\u002F nuxt.config.ts\nexport default defineNuxtConfig({\n  nitro: {\n    prerender: {\n      crawlLinks: true,\n      routes: [\n        '\u002F',\n        '\u002Fproducts',\n        '\u002Fproducts\u002Flaptop-sleeve-pro'\n      ]\n    }\n  }\n})\n","typescript",[83],{"type":32,"tag":52,"props":84,"children":85},{"__ignoreMap":16},[86,98,125,134,143,163,172,186,198,207,216,225,234],{"type":32,"tag":87,"props":88,"children":91},"span",{"class":89,"line":90},"line",1,[92],{"type":32,"tag":87,"props":93,"children":95},{"style":94},"--shiki-default:#6A737D",[96],{"type":37,"value":97},"\u002F\u002F nuxt.config.ts\n",{"type":32,"tag":87,"props":99,"children":101},{"class":89,"line":100},2,[102,108,113,119],{"type":32,"tag":87,"props":103,"children":105},{"style":104},"--shiki-default:#F97583",[106],{"type":37,"value":107},"export",{"type":32,"tag":87,"props":109,"children":110},{"style":104},[111],{"type":37,"value":112}," default",{"type":32,"tag":87,"props":114,"children":116},{"style":115},"--shiki-default:#B392F0",[117],{"type":37,"value":118}," defineNuxtConfig",{"type":32,"tag":87,"props":120,"children":122},{"style":121},"--shiki-default:#E1E4E8",[123],{"type":37,"value":124},"({\n",{"type":32,"tag":87,"props":126,"children":128},{"class":89,"line":127},3,[129],{"type":32,"tag":87,"props":130,"children":131},{"style":121},[132],{"type":37,"value":133},"  nitro: {\n",{"type":32,"tag":87,"props":135,"children":137},{"class":89,"line":136},4,[138],{"type":32,"tag":87,"props":139,"children":140},{"style":121},[141],{"type":37,"value":142},"    prerender: {\n",{"type":32,"tag":87,"props":144,"children":146},{"class":89,"line":145},5,[147,152,158],{"type":32,"tag":87,"props":148,"children":149},{"style":121},[150],{"type":37,"value":151},"      crawlLinks: ",{"type":32,"tag":87,"props":153,"children":155},{"style":154},"--shiki-default:#79B8FF",[156],{"type":37,"value":157},"true",{"type":32,"tag":87,"props":159,"children":160},{"style":121},[161],{"type":37,"value":162},",\n",{"type":32,"tag":87,"props":164,"children":166},{"class":89,"line":165},6,[167],{"type":32,"tag":87,"props":168,"children":169},{"style":121},[170],{"type":37,"value":171},"      routes: [\n",{"type":32,"tag":87,"props":173,"children":175},{"class":89,"line":174},7,[176,182],{"type":32,"tag":87,"props":177,"children":179},{"style":178},"--shiki-default:#9ECBFF",[180],{"type":37,"value":181},"        '\u002F'",{"type":32,"tag":87,"props":183,"children":184},{"style":121},[185],{"type":37,"value":162},{"type":32,"tag":87,"props":187,"children":188},{"class":89,"line":26},[189,194],{"type":32,"tag":87,"props":190,"children":191},{"style":178},[192],{"type":37,"value":193},"        '\u002Fproducts'",{"type":32,"tag":87,"props":195,"children":196},{"style":121},[197],{"type":37,"value":162},{"type":32,"tag":87,"props":199,"children":201},{"class":89,"line":200},9,[202],{"type":32,"tag":87,"props":203,"children":204},{"style":178},[205],{"type":37,"value":206},"        '\u002Fproducts\u002Flaptop-sleeve-pro'\n",{"type":32,"tag":87,"props":208,"children":210},{"class":89,"line":209},10,[211],{"type":32,"tag":87,"props":212,"children":213},{"style":121},[214],{"type":37,"value":215},"      ]\n",{"type":32,"tag":87,"props":217,"children":219},{"class":89,"line":218},11,[220],{"type":32,"tag":87,"props":221,"children":222},{"style":121},[223],{"type":37,"value":224},"    }\n",{"type":32,"tag":87,"props":226,"children":228},{"class":89,"line":227},12,[229],{"type":32,"tag":87,"props":230,"children":231},{"style":121},[232],{"type":37,"value":233},"  }\n",{"type":32,"tag":87,"props":235,"children":237},{"class":89,"line":236},13,[238],{"type":32,"tag":87,"props":239,"children":240},{"style":121},[241],{"type":37,"value":242},"})\n",{"type":32,"tag":33,"props":244,"children":245},{},[246,248,254,256,262],{"type":37,"value":247},"Kogda ",{"type":32,"tag":52,"props":249,"children":251},{"className":250},[],[252],{"type":37,"value":253},"crawlLinks: true",{"type":37,"value":255}," aktivizirovan, Nitro skaniriruet ",{"type":32,"tag":52,"props":257,"children":259},{"className":258},[],[260],{"type":37,"value":261},"\u003Ca href>",{"type":37,"value":263}," tegov v renderironannom HTML i generiruet najdennye novye marshrute. Avtomaticheskoe obnaruzhenie rabotaet dlya blogov i katalogov. No dlya kataloга s 2000 tovarami polnoe skanirovanie vzryvaet vremya sborki. Poetomu nuzhny strategicheskie route rules.",{"type":32,"tag":33,"props":265,"children":266},{},[267,269,274,276,282],{"type":37,"value":268},"Benchmark: 500 staticheskih rut + ",{"type":32,"tag":52,"props":270,"children":272},{"className":271},[],[273],{"type":37,"value":253},{"type":37,"value":275}," → vremya sborki 8,2 minuty. ",{"type":32,"tag":52,"props":277,"children":279},{"className":278},[],[280],{"type":37,"value":281},"crawlLinks: false",{"type":37,"value":283}," + ruchnaya inzhekciya rut → 3,1 minuty. Raznica: neperenebeshhyennye promezhutochnyepages ne renderiruyutsya.",{"type":32,"tag":40,"props":285,"children":287},{"id":286},"granulnyj-kontrol-s-route-rules",[288],{"type":37,"value":289},"Granulnyj Kontrol s Route Rules",{"type":32,"tag":33,"props":291,"children":292},{},[293,295,301],{"type":37,"value":294},"API ",{"type":32,"tag":52,"props":296,"children":298},{"className":297},[],[299],{"type":37,"value":300},"routeRules",{"type":37,"value":302}," v Nuxt 3 pozvolyaet opredelyat' strategiyu rendera dlya kazhdogo marshruta. Vy mozheте vybirat' mezhdu SSG, SSR, SWR (stale-while-revalidate) i ISR (incremental static regeneration). Eto daet vozmozhnost' postroit' gibridnuyu arhitekturu vmesto privedeniya vsego sajta k odnomu rezhimu.",{"type":32,"tag":77,"props":304,"children":306},{"className":79,"code":305,"language":81,"meta":16,"style":16},"export default defineNuxtConfig({\n  routeRules: {\n    '\u002F': { prerender: true },\n    '\u002Fproducts\u002F**': { swr: 3600 }, \u002F\u002F ISR, kesh na 1 chas\n    '\u002Fadmin\u002F**': { ssr: false }, \u002F\u002F SPA rezhim\n    '\u002Fapi\u002F**': { cors: true, prerender: false }\n  }\n})\n",[307],{"type":32,"tag":52,"props":308,"children":309},{"__ignoreMap":16},[310,329,337,359,387,414,445,452],{"type":32,"tag":87,"props":311,"children":312},{"class":89,"line":90},[313,317,321,325],{"type":32,"tag":87,"props":314,"children":315},{"style":104},[316],{"type":37,"value":107},{"type":32,"tag":87,"props":318,"children":319},{"style":104},[320],{"type":37,"value":112},{"type":32,"tag":87,"props":322,"children":323},{"style":115},[324],{"type":37,"value":118},{"type":32,"tag":87,"props":326,"children":327},{"style":121},[328],{"type":37,"value":124},{"type":32,"tag":87,"props":330,"children":331},{"class":89,"line":100},[332],{"type":32,"tag":87,"props":333,"children":334},{"style":121},[335],{"type":37,"value":336},"  routeRules: {\n",{"type":32,"tag":87,"props":338,"children":339},{"class":89,"line":127},[340,345,350,354],{"type":32,"tag":87,"props":341,"children":342},{"style":178},[343],{"type":37,"value":344},"    '\u002F'",{"type":32,"tag":87,"props":346,"children":347},{"style":121},[348],{"type":37,"value":349},": { prerender: ",{"type":32,"tag":87,"props":351,"children":352},{"style":154},[353],{"type":37,"value":157},{"type":32,"tag":87,"props":355,"children":356},{"style":121},[357],{"type":37,"value":358}," },\n",{"type":32,"tag":87,"props":360,"children":361},{"class":89,"line":136},[362,367,372,377,382],{"type":32,"tag":87,"props":363,"children":364},{"style":178},[365],{"type":37,"value":366},"    '\u002Fproducts\u002F**'",{"type":32,"tag":87,"props":368,"children":369},{"style":121},[370],{"type":37,"value":371},": { swr: ",{"type":32,"tag":87,"props":373,"children":374},{"style":154},[375],{"type":37,"value":376},"3600",{"type":32,"tag":87,"props":378,"children":379},{"style":121},[380],{"type":37,"value":381}," }, ",{"type":32,"tag":87,"props":383,"children":384},{"style":94},[385],{"type":37,"value":386},"\u002F\u002F ISR, kesh na 1 chas\n",{"type":32,"tag":87,"props":388,"children":389},{"class":89,"line":145},[390,395,400,405,409],{"type":32,"tag":87,"props":391,"children":392},{"style":178},[393],{"type":37,"value":394},"    '\u002Fadmin\u002F**'",{"type":32,"tag":87,"props":396,"children":397},{"style":121},[398],{"type":37,"value":399},": { ssr: ",{"type":32,"tag":87,"props":401,"children":402},{"style":154},[403],{"type":37,"value":404},"false",{"type":32,"tag":87,"props":406,"children":407},{"style":121},[408],{"type":37,"value":381},{"type":32,"tag":87,"props":410,"children":411},{"style":94},[412],{"type":37,"value":413},"\u002F\u002F SPA rezhim\n",{"type":32,"tag":87,"props":415,"children":416},{"class":89,"line":165},[417,422,427,431,436,440],{"type":32,"tag":87,"props":418,"children":419},{"style":178},[420],{"type":37,"value":421},"    '\u002Fapi\u002F**'",{"type":32,"tag":87,"props":423,"children":424},{"style":121},[425],{"type":37,"value":426},": { cors: ",{"type":32,"tag":87,"props":428,"children":429},{"style":154},[430],{"type":37,"value":157},{"type":32,"tag":87,"props":432,"children":433},{"style":121},[434],{"type":37,"value":435},", prerender: ",{"type":32,"tag":87,"props":437,"children":438},{"style":154},[439],{"type":37,"value":404},{"type":32,"tag":87,"props":441,"children":442},{"style":121},[443],{"type":37,"value":444}," }\n",{"type":32,"tag":87,"props":446,"children":447},{"class":89,"line":174},[448],{"type":32,"tag":87,"props":449,"children":450},{"style":121},[451],{"type":37,"value":233},{"type":32,"tag":87,"props":453,"children":454},{"class":89,"line":26},[455],{"type":32,"tag":87,"props":456,"children":457},{"style":121},[458],{"type":37,"value":242},{"type":32,"tag":33,"props":460,"children":461},{},[462,464,470,472,478],{"type":37,"value":463},"Nastrojka ",{"type":32,"tag":52,"props":465,"children":467},{"className":466},[],[468],{"type":37,"value":469},"swr: 3600",{"type":37,"value":471}," dlya ",{"type":32,"tag":52,"props":473,"children":475},{"className":474},[],[476],{"type":37,"value":477},"\u002Fproducts\u002F**",{"type":37,"value":479},": pervyj zapros rendiruetsya cherez SSR, sleduyushhie zaprosy v tecenie 1 chasa vozvrashhhayut keshovannuyu versiyu. Posle 3600 sekund stranica pererendiruetsya v fone. Eto kritichno dlya e-kommerca — kogda dobavlyayutsya novye tovary, ne nuzhna polnaya perestrojka, a tol'ko inkremental'noe obnovlenie.",{"type":32,"tag":33,"props":481,"children":482},{},[483,485,491,493,498],{"type":37,"value":484},"Kompromiss: ",{"type":32,"tag":52,"props":486,"children":488},{"className":487},[],[489],{"type":37,"value":490},"swr",{"type":37,"value":492}," trebует edge runtime, poetomu vy privyazany k Vercel\u002FCloudflare. Na samorazmeshhyonnom Nginx eto nedoступno. No pri razvertyvanii na Cloudflare Workers, ",{"type":32,"tag":52,"props":494,"children":496},{"className":495},[],[497],{"type":37,"value":490},{"type":37,"value":499}," rabotaet cherez vstroennyj cache API bez dopolnitel'noj konfiguraci.",{"type":32,"tag":501,"props":502,"children":504},"h3",{"id":503},"inzhekciya-dinamicheskih-rut",[505],{"type":37,"value":506},"Inzhekciya Dinamicheskih Rut",{"type":32,"tag":33,"props":508,"children":509},{},[510,512,518],{"type":37,"value":511},"Dlya prerendera dinamicheskih rut, takih kak stranicy tovarov, ispol'zujte hook ",{"type":32,"tag":52,"props":513,"children":515},{"className":514},[],[516],{"type":37,"value":517},"nitro:config",{"type":37,"value":519}," dlya inzhekcii spiska rut vo vremya vypolneniya. Obychno eto dannye iz headless CMS ili e-kommerce API.",{"type":32,"tag":77,"props":521,"children":523},{"className":79,"code":522,"language":81,"meta":16,"style":16},"\u002F\u002F server\u002Fplugins\u002Fprerender.ts\nexport default defineNitroPlugin((nitroApp) => {\n  nitroApp.hooks.hook('prerender:routes', async (ctx) => {\n    const products = await $fetch('\u002Fapi\u002Fproducts')\n    products.forEach(product => {\n      ctx.routes.add(`\u002Fproducts\u002F${product.slug}`)\n    })\n  })\n})\n",[524],{"type":32,"tag":52,"props":525,"children":526},{"__ignoreMap":16},[527,535,577,632,674,705,750,758,766],{"type":32,"tag":87,"props":528,"children":529},{"class":89,"line":90},[530],{"type":32,"tag":87,"props":531,"children":532},{"style":94},[533],{"type":37,"value":534},"\u002F\u002F server\u002Fplugins\u002Fprerender.ts\n",{"type":32,"tag":87,"props":536,"children":537},{"class":89,"line":100},[538,542,546,551,556,562,567,572],{"type":32,"tag":87,"props":539,"children":540},{"style":104},[541],{"type":37,"value":107},{"type":32,"tag":87,"props":543,"children":544},{"style":104},[545],{"type":37,"value":112},{"type":32,"tag":87,"props":547,"children":548},{"style":115},[549],{"type":37,"value":550}," defineNitroPlugin",{"type":32,"tag":87,"props":552,"children":553},{"style":121},[554],{"type":37,"value":555},"((",{"type":32,"tag":87,"props":557,"children":559},{"style":558},"--shiki-default:#FFAB70",[560],{"type":37,"value":561},"nitroApp",{"type":32,"tag":87,"props":563,"children":564},{"style":121},[565],{"type":37,"value":566},") ",{"type":32,"tag":87,"props":568,"children":569},{"style":104},[570],{"type":37,"value":571},"=>",{"type":32,"tag":87,"props":573,"children":574},{"style":121},[575],{"type":37,"value":576}," {\n",{"type":32,"tag":87,"props":578,"children":579},{"class":89,"line":127},[580,585,590,595,600,605,610,615,620,624,628],{"type":32,"tag":87,"props":581,"children":582},{"style":121},[583],{"type":37,"value":584},"  nitroApp.hooks.",{"type":32,"tag":87,"props":586,"children":587},{"style":115},[588],{"type":37,"value":589},"hook",{"type":32,"tag":87,"props":591,"children":592},{"style":121},[593],{"type":37,"value":594},"(",{"type":32,"tag":87,"props":596,"children":597},{"style":178},[598],{"type":37,"value":599},"'prerender:routes'",{"type":32,"tag":87,"props":601,"children":602},{"style":121},[603],{"type":37,"value":604},", ",{"type":32,"tag":87,"props":606,"children":607},{"style":104},[608],{"type":37,"value":609},"async",{"type":32,"tag":87,"props":611,"children":612},{"style":121},[613],{"type":37,"value":614}," (",{"type":32,"tag":87,"props":616,"children":617},{"style":558},[618],{"type":37,"value":619},"ctx",{"type":32,"tag":87,"props":621,"children":622},{"style":121},[623],{"type":37,"value":566},{"type":32,"tag":87,"props":625,"children":626},{"style":104},[627],{"type":37,"value":571},{"type":32,"tag":87,"props":629,"children":630},{"style":121},[631],{"type":37,"value":576},{"type":32,"tag":87,"props":633,"children":634},{"class":89,"line":136},[635,640,645,650,655,660,664,669],{"type":32,"tag":87,"props":636,"children":637},{"style":104},[638],{"type":37,"value":639},"    const",{"type":32,"tag":87,"props":641,"children":642},{"style":154},[643],{"type":37,"value":644}," products",{"type":32,"tag":87,"props":646,"children":647},{"style":104},[648],{"type":37,"value":649}," =",{"type":32,"tag":87,"props":651,"children":652},{"style":104},[653],{"type":37,"value":654}," await",{"type":32,"tag":87,"props":656,"children":657},{"style":115},[658],{"type":37,"value":659}," $fetch",{"type":32,"tag":87,"props":661,"children":662},{"style":121},[663],{"type":37,"value":594},{"type":32,"tag":87,"props":665,"children":666},{"style":178},[667],{"type":37,"value":668},"'\u002Fapi\u002Fproducts'",{"type":32,"tag":87,"props":670,"children":671},{"style":121},[672],{"type":37,"value":673},")\n",{"type":32,"tag":87,"props":675,"children":676},{"class":89,"line":145},[677,682,687,691,696,701],{"type":32,"tag":87,"props":678,"children":679},{"style":121},[680],{"type":37,"value":681},"    products.",{"type":32,"tag":87,"props":683,"children":684},{"style":115},[685],{"type":37,"value":686},"forEach",{"type":32,"tag":87,"props":688,"children":689},{"style":121},[690],{"type":37,"value":594},{"type":32,"tag":87,"props":692,"children":693},{"style":558},[694],{"type":37,"value":695},"product",{"type":32,"tag":87,"props":697,"children":698},{"style":104},[699],{"type":37,"value":700}," =>",{"type":32,"tag":87,"props":702,"children":703},{"style":121},[704],{"type":37,"value":576},{"type":32,"tag":87,"props":706,"children":707},{"class":89,"line":165},[708,713,718,722,727,731,736,741,746],{"type":32,"tag":87,"props":709,"children":710},{"style":121},[711],{"type":37,"value":712},"      ctx.routes.",{"type":32,"tag":87,"props":714,"children":715},{"style":115},[716],{"type":37,"value":717},"add",{"type":32,"tag":87,"props":719,"children":720},{"style":121},[721],{"type":37,"value":594},{"type":32,"tag":87,"props":723,"children":724},{"style":178},[725],{"type":37,"value":726},"`\u002Fproducts\u002F${",{"type":32,"tag":87,"props":728,"children":729},{"style":121},[730],{"type":37,"value":695},{"type":32,"tag":87,"props":732,"children":733},{"style":178},[734],{"type":37,"value":735},".",{"type":32,"tag":87,"props":737,"children":738},{"style":121},[739],{"type":37,"value":740},"slug",{"type":32,"tag":87,"props":742,"children":743},{"style":178},[744],{"type":37,"value":745},"}`",{"type":32,"tag":87,"props":747,"children":748},{"style":121},[749],{"type":37,"value":673},{"type":32,"tag":87,"props":751,"children":752},{"class":89,"line":174},[753],{"type":32,"tag":87,"props":754,"children":755},{"style":121},[756],{"type":37,"value":757},"    })\n",{"type":32,"tag":87,"props":759,"children":760},{"class":89,"line":26},[761],{"type":32,"tag":87,"props":762,"children":763},{"style":121},[764],{"type":37,"value":765},"  })\n",{"type":32,"tag":87,"props":767,"children":768},{"class":89,"line":200},[769],{"type":32,"tag":87,"props":770,"children":771},{"style":121},[772],{"type":37,"value":242},{"type":32,"tag":33,"props":774,"children":775},{},[776],{"type":37,"value":777},"Pri ètom podkhode API Shopify Storefront zaprashivaetsya vo vremya sborki, dlya kazhdogo tovara sozdaetsya marshrut. Na sajte s 1200 tovarami ètot metod sniziл vremya sborki s 12 minut do 4,8 minut (blagodarya batch-zaprosam i parallel'nomu renderiyu).",{"type":32,"tag":40,"props":779,"children":781},{"id":780},"produktivnost-sborki-i-optimizaciya-payload",[782],{"type":37,"value":783},"Produktivnost' Sborki i Optimizaciya Payload",{"type":32,"tag":33,"props":785,"children":786},{},[787,789,795,797,803],{"type":37,"value":788},"Komanda ",{"type":32,"tag":52,"props":790,"children":792},{"className":791},[],[793],{"type":37,"value":794},"nuxi generate",{"type":37,"value":796}," po umolchaniyu ispol'zuet 4 parallel'nyh rabochih. Esli u vas bol'she yadder CPU, povysit' mozhno cherez peremennuyu okruzheniya ",{"type":32,"tag":52,"props":798,"children":800},{"className":799},[],[801],{"type":37,"value":802},"NUXT_CONCURRENCY",{"type":37,"value":804},":",{"type":32,"tag":77,"props":806,"children":810},{"className":807,"code":808,"language":809,"meta":16,"style":16},"language-bash shiki shiki-themes github-dark","NUXT_CONCURRENCY=8 nuxi generate\n","bash",[811],{"type":32,"tag":52,"props":812,"children":813},{"__ignoreMap":16},[814],{"type":32,"tag":87,"props":815,"children":816},{"class":89,"line":90},[817,821,826,831,836],{"type":32,"tag":87,"props":818,"children":819},{"style":121},[820],{"type":37,"value":802},{"type":32,"tag":87,"props":822,"children":823},{"style":104},[824],{"type":37,"value":825},"=",{"type":32,"tag":87,"props":827,"children":828},{"style":178},[829],{"type":37,"value":830},"8",{"type":32,"tag":87,"props":832,"children":833},{"style":115},[834],{"type":37,"value":835}," nuxi",{"type":32,"tag":87,"props":837,"children":838},{"style":178},[839],{"type":37,"value":840}," generate\n",{"type":32,"tag":33,"props":842,"children":843},{},[844],{"type":37,"value":845},"Na mashine s 16 yadri povyshenie do 8 snizilo vremya sborki na 35% (8,2 minuty → 5,3 minuty). No uvelichilas' potreblenie pamyati: kazhdyj worker zajmayot ~200MB. 8 raboчих × 200MB = 1,6GB. Ètot limit vazhen dlya CI\u002FCD pipeline.",{"type":32,"tag":33,"props":847,"children":848},{},[849,851,857],{"type":37,"value":850},"Dlya optimizacii razmera payload vklyuchite ",{"type":32,"tag":52,"props":852,"children":854},{"className":853},[],[855],{"type":37,"value":856},"experimental.payloadExtraction",{"type":37,"value":858}," v Nuxt 3. Ètot parametr vyplivayut JSON-dannye kazhdoj stranicy v otdel'nyj fajl, pojtomu pri gidracii zagruzhaetsya tol'ko neobhodimyj payload.",{"type":32,"tag":77,"props":860,"children":862},{"className":79,"code":861,"language":81,"meta":16,"style":16},"export default defineNuxtConfig({\n  experimental: {\n    payloadExtraction: true\n  }\n})\n",[863],{"type":32,"tag":52,"props":864,"children":865},{"__ignoreMap":16},[866,885,893,906,913],{"type":32,"tag":87,"props":867,"children":868},{"class":89,"line":90},[869,873,877,881],{"type":32,"tag":87,"props":870,"children":871},{"style":104},[872],{"type":37,"value":107},{"type":32,"tag":87,"props":874,"children":875},{"style":104},[876],{"type":37,"value":112},{"type":32,"tag":87,"props":878,"children":879},{"style":115},[880],{"type":37,"value":118},{"type":32,"tag":87,"props":882,"children":883},{"style":121},[884],{"type":37,"value":124},{"type":32,"tag":87,"props":886,"children":887},{"class":89,"line":100},[888],{"type":32,"tag":87,"props":889,"children":890},{"style":121},[891],{"type":37,"value":892},"  experimental: {\n",{"type":32,"tag":87,"props":894,"children":895},{"class":89,"line":127},[896,901],{"type":32,"tag":87,"props":897,"children":898},{"style":121},[899],{"type":37,"value":900},"    payloadExtraction: ",{"type":32,"tag":87,"props":902,"children":903},{"style":154},[904],{"type":37,"value":905},"true\n",{"type":32,"tag":87,"props":907,"children":908},{"class":89,"line":136},[909],{"type":32,"tag":87,"props":910,"children":911},{"style":121},[912],{"type":37,"value":233},{"type":32,"tag":87,"props":914,"children":915},{"class":89,"line":145},[916],{"type":32,"tag":87,"props":917,"children":918},{"style":121},[919],{"type":37,"value":242},{"type":32,"tag":33,"props":921,"children":922},{},[923],{"type":37,"value":924},"Vliyanie: srednyj JavaScript bundle na stranicu sniziлsya s 42KB na 38KB, nachal'nyj payload s 18KB na 11KB. Osobenno dlya mobil'nyh pol'zovatelej uluchshetsya vremya Time to Interactive (TTI). Na izmeryonnom e-kommerc sajte: TTI 3,2s → 2,7s (simulyaciya 3G svyazi).",{"type":32,"tag":501,"props":926,"children":928},{"id":927},"inkrementalnaya-sborka-i-kesh-strategiya",[929],{"type":37,"value":930},"Inkremental'naya Sborka i Kesh-Strategiya",{"type":32,"tag":33,"props":932,"children":933},{},[934],{"type":37,"value":935},"V production'e polnaya perestrojka pri kazhdoj zalivke — dorogostoyaschaya praktika. V Nuxt 3 net oficial'noj podderzhki inkremental'noj sborki, no mozhno sozdať DIY resheniya na osnove cache-sloya Nitro. Princip: keshuyte rendirovannye HTML v S3\u002FRedis, obnaruzhivajte izmenyonnye marshrute i pererendiruyte tol'ko ikh.",{"type":32,"tag":77,"props":937,"children":939},{"className":79,"code":938,"language":81,"meta":16,"style":16},"\u002F\u002F server\u002Fplugins\u002Fcache.ts\nimport { createStorage } from 'unstorage'\nimport redisDriver from 'unstorage\u002Fdrivers\u002Fredis'\n\nconst storage = createStorage({\n  driver: redisDriver({\n    base: 'nuxt-prerender',\n    host: process.env.REDIS_HOST\n  })\n})\n\nexport default defineNitroPlugin((nitroApp) => {\n  nitroApp.hooks.hook('prerender:route', async (ctx) => {\n    const cacheKey = `route:${ctx.route}`\n    const cached = await storage.getItem(cacheKey)\n    \n    if (cached && ctx.hash === cached.hash) {\n      ctx.skip = true \u002F\u002F попадание v kesh, promenut' rendering\n    }\n  })\n})\n",[940],{"type":32,"tag":52,"props":941,"children":942},{"__ignoreMap":16},[943,951,974,995,1004,1030,1047,1064,1077,1084,1091,1098,1133,1181,1221,1257,1266,1300,1323,1331,1339],{"type":32,"tag":87,"props":944,"children":945},{"class":89,"line":90},[946],{"type":32,"tag":87,"props":947,"children":948},{"style":94},[949],{"type":37,"value":950},"\u002F\u002F server\u002Fplugins\u002Fcache.ts\n",{"type":32,"tag":87,"props":952,"children":953},{"class":89,"line":100},[954,959,964,969],{"type":32,"tag":87,"props":955,"children":956},{"style":104},[957],{"type":37,"value":958},"import",{"type":32,"tag":87,"props":960,"children":961},{"style":121},[962],{"type":37,"value":963}," { createStorage } ",{"type":32,"tag":87,"props":965,"children":966},{"style":104},[967],{"type":37,"value":968},"from",{"type":32,"tag":87,"props":970,"children":971},{"style":178},[972],{"type":37,"value":973}," 'unstorage'\n",{"type":32,"tag":87,"props":975,"children":976},{"class":89,"line":127},[977,981,986,990],{"type":32,"tag":87,"props":978,"children":979},{"style":104},[980],{"type":37,"value":958},{"type":32,"tag":87,"props":982,"children":983},{"style":121},[984],{"type":37,"value":985}," redisDriver ",{"type":32,"tag":87,"props":987,"children":988},{"style":104},[989],{"type":37,"value":968},{"type":32,"tag":87,"props":991,"children":992},{"style":178},[993],{"type":37,"value":994}," 'unstorage\u002Fdrivers\u002Fredis'\n",{"type":32,"tag":87,"props":996,"children":997},{"class":89,"line":136},[998],{"type":32,"tag":87,"props":999,"children":1001},{"emptyLinePlaceholder":1000},true,[1002],{"type":37,"value":1003},"\n",{"type":32,"tag":87,"props":1005,"children":1006},{"class":89,"line":145},[1007,1012,1017,1021,1026],{"type":32,"tag":87,"props":1008,"children":1009},{"style":104},[1010],{"type":37,"value":1011},"const",{"type":32,"tag":87,"props":1013,"children":1014},{"style":154},[1015],{"type":37,"value":1016}," storage",{"type":32,"tag":87,"props":1018,"children":1019},{"style":104},[1020],{"type":37,"value":649},{"type":32,"tag":87,"props":1022,"children":1023},{"style":115},[1024],{"type":37,"value":1025}," createStorage",{"type":32,"tag":87,"props":1027,"children":1028},{"style":121},[1029],{"type":37,"value":124},{"type":32,"tag":87,"props":1031,"children":1032},{"class":89,"line":165},[1033,1038,1043],{"type":32,"tag":87,"props":1034,"children":1035},{"style":121},[1036],{"type":37,"value":1037},"  driver: ",{"type":32,"tag":87,"props":1039,"children":1040},{"style":115},[1041],{"type":37,"value":1042},"redisDriver",{"type":32,"tag":87,"props":1044,"children":1045},{"style":121},[1046],{"type":37,"value":124},{"type":32,"tag":87,"props":1048,"children":1049},{"class":89,"line":174},[1050,1055,1060],{"type":32,"tag":87,"props":1051,"children":1052},{"style":121},[1053],{"type":37,"value":1054},"    base: ",{"type":32,"tag":87,"props":1056,"children":1057},{"style":178},[1058],{"type":37,"value":1059},"'nuxt-prerender'",{"type":32,"tag":87,"props":1061,"children":1062},{"style":121},[1063],{"type":37,"value":162},{"type":32,"tag":87,"props":1065,"children":1066},{"class":89,"line":26},[1067,1072],{"type":32,"tag":87,"props":1068,"children":1069},{"style":121},[1070],{"type":37,"value":1071},"    host: process.env.",{"type":32,"tag":87,"props":1073,"children":1074},{"style":154},[1075],{"type":37,"value":1076},"REDIS_HOST\n",{"type":32,"tag":87,"props":1078,"children":1079},{"class":89,"line":200},[1080],{"type":32,"tag":87,"props":1081,"children":1082},{"style":121},[1083],{"type":37,"value":765},{"type":32,"tag":87,"props":1085,"children":1086},{"class":89,"line":209},[1087],{"type":32,"tag":87,"props":1088,"children":1089},{"style":121},[1090],{"type":37,"value":242},{"type":32,"tag":87,"props":1092,"children":1093},{"class":89,"line":218},[1094],{"type":32,"tag":87,"props":1095,"children":1096},{"emptyLinePlaceholder":1000},[1097],{"type":37,"value":1003},{"type":32,"tag":87,"props":1099,"children":1100},{"class":89,"line":227},[1101,1105,1109,1113,1117,1121,1125,1129],{"type":32,"tag":87,"props":1102,"children":1103},{"style":104},[1104],{"type":37,"value":107},{"type":32,"tag":87,"props":1106,"children":1107},{"style":104},[1108],{"type":37,"value":112},{"type":32,"tag":87,"props":1110,"children":1111},{"style":115},[1112],{"type":37,"value":550},{"type":32,"tag":87,"props":1114,"children":1115},{"style":121},[1116],{"type":37,"value":555},{"type":32,"tag":87,"props":1118,"children":1119},{"style":558},[1120],{"type":37,"value":561},{"type":32,"tag":87,"props":1122,"children":1123},{"style":121},[1124],{"type":37,"value":566},{"type":32,"tag":87,"props":1126,"children":1127},{"style":104},[1128],{"type":37,"value":571},{"type":32,"tag":87,"props":1130,"children":1131},{"style":121},[1132],{"type":37,"value":576},{"type":32,"tag":87,"props":1134,"children":1135},{"class":89,"line":236},[1136,1140,1144,1148,1153,1157,1161,1165,1169,1173,1177],{"type":32,"tag":87,"props":1137,"children":1138},{"style":121},[1139],{"type":37,"value":584},{"type":32,"tag":87,"props":1141,"children":1142},{"style":115},[1143],{"type":37,"value":589},{"type":32,"tag":87,"props":1145,"children":1146},{"style":121},[1147],{"type":37,"value":594},{"type":32,"tag":87,"props":1149,"children":1150},{"style":178},[1151],{"type":37,"value":1152},"'prerender:route'",{"type":32,"tag":87,"props":1154,"children":1155},{"style":121},[1156],{"type":37,"value":604},{"type":32,"tag":87,"props":1158,"children":1159},{"style":104},[1160],{"type":37,"value":609},{"type":32,"tag":87,"props":1162,"children":1163},{"style":121},[1164],{"type":37,"value":614},{"type":32,"tag":87,"props":1166,"children":1167},{"style":558},[1168],{"type":37,"value":619},{"type":32,"tag":87,"props":1170,"children":1171},{"style":121},[1172],{"type":37,"value":566},{"type":32,"tag":87,"props":1174,"children":1175},{"style":104},[1176],{"type":37,"value":571},{"type":32,"tag":87,"props":1178,"children":1179},{"style":121},[1180],{"type":37,"value":576},{"type":32,"tag":87,"props":1182,"children":1184},{"class":89,"line":1183},14,[1185,1189,1194,1198,1203,1207,1211,1216],{"type":32,"tag":87,"props":1186,"children":1187},{"style":104},[1188],{"type":37,"value":639},{"type":32,"tag":87,"props":1190,"children":1191},{"style":154},[1192],{"type":37,"value":1193}," cacheKey",{"type":32,"tag":87,"props":1195,"children":1196},{"style":104},[1197],{"type":37,"value":649},{"type":32,"tag":87,"props":1199,"children":1200},{"style":178},[1201],{"type":37,"value":1202}," `route:${",{"type":32,"tag":87,"props":1204,"children":1205},{"style":121},[1206],{"type":37,"value":619},{"type":32,"tag":87,"props":1208,"children":1209},{"style":178},[1210],{"type":37,"value":735},{"type":32,"tag":87,"props":1212,"children":1213},{"style":121},[1214],{"type":37,"value":1215},"route",{"type":32,"tag":87,"props":1217,"children":1218},{"style":178},[1219],{"type":37,"value":1220},"}`\n",{"type":32,"tag":87,"props":1222,"children":1224},{"class":89,"line":1223},15,[1225,1229,1234,1238,1242,1247,1252],{"type":32,"tag":87,"props":1226,"children":1227},{"style":104},[1228],{"type":37,"value":639},{"type":32,"tag":87,"props":1230,"children":1231},{"style":154},[1232],{"type":37,"value":1233}," cached",{"type":32,"tag":87,"props":1235,"children":1236},{"style":104},[1237],{"type":37,"value":649},{"type":32,"tag":87,"props":1239,"children":1240},{"style":104},[1241],{"type":37,"value":654},{"type":32,"tag":87,"props":1243,"children":1244},{"style":121},[1245],{"type":37,"value":1246}," storage.",{"type":32,"tag":87,"props":1248,"children":1249},{"style":115},[1250],{"type":37,"value":1251},"getItem",{"type":32,"tag":87,"props":1253,"children":1254},{"style":121},[1255],{"type":37,"value":1256},"(cacheKey)\n",{"type":32,"tag":87,"props":1258,"children":1260},{"class":89,"line":1259},16,[1261],{"type":32,"tag":87,"props":1262,"children":1263},{"style":121},[1264],{"type":37,"value":1265},"    \n",{"type":32,"tag":87,"props":1267,"children":1269},{"class":89,"line":1268},17,[1270,1275,1280,1285,1290,1295],{"type":32,"tag":87,"props":1271,"children":1272},{"style":104},[1273],{"type":37,"value":1274},"    if",{"type":32,"tag":87,"props":1276,"children":1277},{"style":121},[1278],{"type":37,"value":1279}," (cached ",{"type":32,"tag":87,"props":1281,"children":1282},{"style":104},[1283],{"type":37,"value":1284},"&&",{"type":32,"tag":87,"props":1286,"children":1287},{"style":121},[1288],{"type":37,"value":1289}," ctx.hash ",{"type":32,"tag":87,"props":1291,"children":1292},{"style":104},[1293],{"type":37,"value":1294},"===",{"type":32,"tag":87,"props":1296,"children":1297},{"style":121},[1298],{"type":37,"value":1299}," cached.hash) {\n",{"type":32,"tag":87,"props":1301,"children":1303},{"class":89,"line":1302},18,[1304,1309,1313,1318],{"type":32,"tag":87,"props":1305,"children":1306},{"style":121},[1307],{"type":37,"value":1308},"      ctx.skip ",{"type":32,"tag":87,"props":1310,"children":1311},{"style":104},[1312],{"type":37,"value":825},{"type":32,"tag":87,"props":1314,"children":1315},{"style":154},[1316],{"type":37,"value":1317}," true",{"type":32,"tag":87,"props":1319,"children":1320},{"style":94},[1321],{"type":37,"value":1322}," \u002F\u002F попадание v kesh, promenut' rendering\n",{"type":32,"tag":87,"props":1324,"children":1326},{"class":89,"line":1325},19,[1327],{"type":32,"tag":87,"props":1328,"children":1329},{"style":121},[1330],{"type":37,"value":224},{"type":32,"tag":87,"props":1332,"children":1334},{"class":89,"line":1333},20,[1335],{"type":32,"tag":87,"props":1336,"children":1337},{"style":121},[1338],{"type":37,"value":765},{"type":32,"tag":87,"props":1340,"children":1342},{"class":89,"line":1341},21,[1343],{"type":32,"tag":87,"props":1344,"children":1345},{"style":121},[1346],{"type":37,"value":242},{"type":32,"tag":33,"props":1348,"children":1349},{},[1350],{"type":37,"value":1351},"Pri ètom podkhode, esli izmenilos' tol'ko 23 marshrutov iz 500, vremya sborki snizilos' s 8,2 minut na 1,4 minuty. TTL keshya v Redis byl 7 dnej — ideal'no dlya redko menyayushhegosya soderžaniya, takim kak blog-stati. Kompromiss: logika invalidacii kesha stanovitsya slozhnoj, nuzhno sravnenie soderžaniya po git-keshfu.",{"type":32,"tag":40,"props":1353,"children":1355},{"id":1354},"razvertyvanie-na-edge-i-cdn-strategiya",[1356],{"type":37,"value":1357},"Razvertyvanie na Edge i CDN-Strategiya",{"type":32,"tag":33,"props":1359,"children":1360},{},[1361,1363,1369,1371,1376,1377,1382,1384,1390],{"type":37,"value":1362},"Staticheskij vyvod Nuxt 3 (",{"type":32,"tag":52,"props":1364,"children":1366},{"className":1365},[],[1367],{"type":37,"value":1368},"\u002F.output\u002Fpublic",{"type":37,"value":1370},") razvertyvayetsya prямo na Cloudflare Pages, Vercel ili Netlify. No esli ispol'zuyete ",{"type":32,"tag":52,"props":1372,"children":1374},{"className":1373},[],[1375],{"type":37,"value":490},{"type":37,"value":59},{"type":32,"tag":52,"props":1378,"children":1380},{"className":1379},[],[1381],{"type":37,"value":300},{"type":37,"value":1383},", nuzhno razvernut' kod servera (",{"type":32,"tag":52,"props":1385,"children":1387},{"className":1386},[],[1388],{"type":37,"value":1389},"\u002F.output\u002Fserver",{"type":37,"value":1391},") na edge.",{"type":32,"tag":33,"props":1393,"children":1394},{},[1395],{"type":37,"value":1396},"Komanda dlya Cloudflare Pages:",{"type":32,"tag":77,"props":1398,"children":1400},{"className":807,"code":1399,"language":809,"meta":16,"style":16},"nuxi generate\nwrangler pages deploy .output\u002Fpublic\n",[1401],{"type":32,"tag":52,"props":1402,"children":1403},{"__ignoreMap":16},[1404,1416],{"type":32,"tag":87,"props":1405,"children":1406},{"class":89,"line":90},[1407,1412],{"type":32,"tag":87,"props":1408,"children":1409},{"style":115},[1410],{"type":37,"value":1411},"nuxi",{"type":32,"tag":87,"props":1413,"children":1414},{"style":178},[1415],{"type":37,"value":840},{"type":32,"tag":87,"props":1417,"children":1418},{"class":89,"line":100},[1419,1424,1429,1434],{"type":32,"tag":87,"props":1420,"children":1421},{"style":115},[1422],{"type":37,"value":1423},"wrangler",{"type":32,"tag":87,"props":1425,"children":1426},{"style":178},[1427],{"type":37,"value":1428}," pages",{"type":32,"tag":87,"props":1430,"children":1431},{"style":178},[1432],{"type":37,"value":1433}," deploy",{"type":32,"tag":87,"props":1435,"children":1436},{"style":178},[1437],{"type":37,"value":1438}," .output\u002Fpublic\n",{"type":32,"tag":33,"props":1440,"children":1441},{},[1442,1444,1449,1451,1456,1458,1464,1466,1472,1474,1479],{"type":37,"value":1443},"Esli v ",{"type":32,"tag":52,"props":1445,"children":1447},{"className":1446},[],[1448],{"type":37,"value":300},{"type":37,"value":1450}," est' ",{"type":32,"tag":52,"props":1452,"children":1454},{"className":1453},[],[1455],{"type":37,"value":490},{"type":37,"value":1457}," ili ",{"type":32,"tag":52,"props":1459,"children":1461},{"className":1460},[],[1462],{"type":37,"value":1463},"ssr: true",{"type":37,"value":1465},", trebuetsya bundle Cloudflare Workers. V ètom sluchae zapustite ",{"type":32,"tag":52,"props":1467,"children":1469},{"className":1468},[],[1470],{"type":37,"value":1471},"nuxt build",{"type":37,"value":1473}," dlya gibridnogo vyvoda, potom razvernut' ",{"type":32,"tag":52,"props":1475,"children":1477},{"className":1476},[],[1478],{"type":37,"value":1389},{"type":37,"value":1480}," na Cloudflare Workers. No ètо uzhe ne SSG, a edge SSR — vremya sborki ne padает, no cache-strategiya bolee dinamichna.",{"type":32,"tag":33,"props":1482,"children":1483},{},[1484,1486,1491],{"type":37,"value":1485},"Benchmark: SSG + Cloudflare CDN → TTFB 120ms (Frankfurt edge), SSR + edge keshing → TTFB 280ms. Raznica: SSG rendiruet kazhdyj marshrut zaranee, SSR rendiruet pri pervom zaprose. Dlya e-kommerca ideal'no SSG + ",{"type":32,"tag":52,"props":1487,"children":1489},{"className":1488},[],[1490],{"type":37,"value":490},{"type":37,"value":1492}," hybrid: redko menyayushhiesya stranicy pererendiryutsya, detali tovarov ostaюtsya fresh pri ISR.",{"type":32,"tag":501,"props":1494,"children":1496},{"id":1495},"arhitektura-build-pipeline",[1497],{"type":37,"value":1498},"Arhitektura Build Pipeline",{"type":32,"tag":33,"props":1500,"children":1501},{},[1502],{"type":37,"value":1503},"V production snizheniyu vremeni sborki sposobuet multi-stage pipeline: (1) sborka staticheskih aktivov, (2) parallel'nyj rendering prerenderiruemyh rut, (3) razvertyvanie na edge. Primer na GitHub Actions:",{"type":32,"tag":77,"props":1505,"children":1509},{"className":1506,"code":1507,"language":1508,"meta":16,"style":16},"language-yaml shiki shiki-themes github-dark","# .github\u002Fworkflows\u002Fdeploy.yml\njobs:\n  build:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions\u002Fcheckout@v4\n      - run: npm ci\n      - run: NUXT_CONCURRENCY=8 nuxi generate\n      - uses: cloudflare\u002Fwrangler-action@v3\n        with:\n          apiToken: ${{ secrets.CF_API_TOKEN }}\n          command: pages deploy .output\u002Fpublic\n","yaml",[1510],{"type":32,"tag":52,"props":1511,"children":1512},{"__ignoreMap":16},[1513,1521,1535,1547,1565,1577,1599,1620,1639,1659,1671,1688],{"type":32,"tag":87,"props":1514,"children":1515},{"class":89,"line":90},[1516],{"type":32,"tag":87,"props":1517,"children":1518},{"style":94},[1519],{"type":37,"value":1520},"# .github\u002Fworkflows\u002Fdeploy.yml\n",{"type":32,"tag":87,"props":1522,"children":1523},{"class":89,"line":100},[1524,1530],{"type":32,"tag":87,"props":1525,"children":1527},{"style":1526},"--shiki-default:#85E89D",[1528],{"type":37,"value":1529},"jobs",{"type":32,"tag":87,"props":1531,"children":1532},{"style":121},[1533],{"type":37,"value":1534},":\n",{"type":32,"tag":87,"props":1536,"children":1537},{"class":89,"line":127},[1538,1543],{"type":32,"tag":87,"props":1539,"children":1540},{"style":1526},[1541],{"type":37,"value":1542},"  build",{"type":32,"tag":87,"props":1544,"children":1545},{"style":121},[1546],{"type":37,"value":1534},{"type":32,"tag":87,"props":1548,"children":1549},{"class":89,"line":136},[1550,1555,1560],{"type":32,"tag":87,"props":1551,"children":1552},{"style":1526},[1553],{"type":37,"value":1554},"    runs-on",{"type":32,"tag":87,"props":1556,"children":1557},{"style":121},[1558],{"type":37,"value":1559},": ",{"type":32,"tag":87,"props":1561,"children":1562},{"style":178},[1563],{"type":37,"value":1564},"ubuntu-latest\n",{"type":32,"tag":87,"props":1566,"children":1567},{"class":89,"line":145},[1568,1573],{"type":32,"tag":87,"props":1569,"children":1570},{"style":1526},[1571],{"type":37,"value":1572},"    steps",{"type":32,"tag":87,"props":1574,"children":1575},{"style":121},[1576],{"type":37,"value":1534},{"type":32,"tag":87,"props":1578,"children":1579},{"class":89,"line":165},[1580,1585,1590,1594],{"type":32,"tag":87,"props":1581,"children":1582},{"style":121},[1583],{"type":37,"value":1584},"      - ",{"type":32,"tag":87,"props":1586,"children":1587},{"style":1526},[1588],{"type":37,"value":1589},"uses",{"type":32,"tag":87,"props":1591,"children":1592},{"style":121},[1593],{"type":37,"value":1559},{"type":32,"tag":87,"props":1595,"children":1596},{"style":178},[1597],{"type":37,"value":1598},"actions\u002Fcheckout@v4\n",{"type":32,"tag":87,"props":1600,"children":1601},{"class":89,"line":174},[1602,1606,1611,1615],{"type":32,"tag":87,"props":1603,"children":1604},{"style":121},[1605],{"type":37,"value":1584},{"type":32,"tag":87,"props":1607,"children":1608},{"style":1526},[1609],{"type":37,"value":1610},"run",{"type":32,"tag":87,"props":1612,"children":1613},{"style":121},[1614],{"type":37,"value":1559},{"type":32,"tag":87,"props":1616,"children":1617},{"style":178},[1618],{"type":37,"value":1619},"npm ci\n",{"type":32,"tag":87,"props":1621,"children":1622},{"class":89,"line":26},[1623,1627,1631,1635],{"type":32,"tag":87,"props":1624,"children":1625},{"style":121},[1626],{"type":37,"value":1584},{"type":32,"tag":87,"props":1628,"children":1629},{"style":1526},[1630],{"type":37,"value":1610},{"type":32,"tag":87,"props":1632,"children":1633},{"style":121},[1634],{"type":37,"value":1559},{"type":32,"tag":87,"props":1636,"children":1637},{"style":178},[1638],{"type":37,"value":808},{"type":32,"tag":87,"props":1640,"children":1641},{"class":89,"line":200},[1642,1646,1650,1654],{"type":32,"tag":87,"props":1643,"children":1644},{"style":121},[1645],{"type":37,"value":1584},{"type":32,"tag":87,"props":1647,"children":1648},{"style":1526},[1649],{"type":37,"value":1589},{"type":32,"tag":87,"props":1651,"children":1652},{"style":121},[1653],{"type":37,"value":1559},{"type":32,"tag":87,"props":1655,"children":1656},{"style":178},[1657],{"type":37,"value":1658},"cloudflare\u002Fwrangler-action@v3\n",{"type":32,"tag":87,"props":1660,"children":1661},{"class":89,"line":209},[1662,1667],{"type":32,"tag":87,"props":1663,"children":1664},{"style":1526},[1665],{"type":37,"value":1666},"        with",{"type":32,"tag":87,"props":1668,"children":1669},{"style":121},[1670],{"type":37,"value":1534},{"type":32,"tag":87,"props":1672,"children":1673},{"class":89,"line":218},[1674,1679,1683],{"type":32,"tag":87,"props":1675,"children":1676},{"style":1526},[1677],{"type":37,"value":1678},"          apiToken",{"type":32,"tag":87,"props":1680,"children":1681},{"style":121},[1682],{"type":37,"value":1559},{"type":32,"tag":87,"props":1684,"children":1685},{"style":178},[1686],{"type":37,"value":1687},"${{ secrets.CF_API_TOKEN }}\n",{"type":32,"tag":87,"props":1689,"children":1690},{"class":89,"line":227},[1691,1696,1700],{"type":32,"tag":87,"props":1692,"children":1693},{"style":1526},[1694],{"type":37,"value":1695},"          command",{"type":32,"tag":87,"props":1697,"children":1698},{"style":121},[1699],{"type":37,"value":1559},{"type":32,"tag":87,"props":1701,"children":1702},{"style":178},[1703],{"type":37,"value":1704},"pages deploy .output\u002Fpublic\n",{"type":32,"tag":33,"props":1706,"children":1707},{},[1708],{"type":37,"value":1709},"Ètot workflow na sajte s 1200 maršrutami zajmayot 4,2 minuty (ustanovka 1,1min, sborka 2,6min, razvertyvanie 0,5min). Spasibo vstroennoj funkcii inkremental'noj zagruzki Cloudflare — zagruzhaюtsya tol'ko izmenyonnye fajly, čto sniziлo vremя razvertыvaniya na 60%.",{"type":32,"tag":40,"props":1711,"children":1713},{"id":1712},"gibridnyj-podkhod-i-kriterii-resheniya",[1714],{"type":37,"value":1715},"Gibridnyj Podkhod i Kriterii Resheniya",{"type":32,"tag":33,"props":1717,"children":1718},{},[1719,1721,1730],{"type":37,"value":1720},"SSG dlya vsego sajta ne vsegda optimal'no. V Roibase dlya ",{"type":32,"tag":1722,"props":1723,"children":1727},"a",{"href":1724,"rel":1725},"https:\u002F\u002Fwww.roibase.com.tr\u002Fru\u002Fheadless",[1726],"nofollow",[1728],{"type":37,"value":1729},"Headless Commerce",{"type":37,"value":1731}," projektov ispol'zuetsya sleduyushhee pravilo: landing page + katalog kategorij → SSG (render pri sborke), stranicy detaljej tovarov → ISR (render pri pervom zaprose + kesh na 1 chas), checkout → SPA (tol'ko klient, bez servera). Pri ètom vremya sborki ostayotsya 3,5 minuty, a dinamicheskoe soderžhaniye ostayotsya svežim.",{"type":32,"tag":33,"props":1733,"children":1734},{},[1735],{"type":37,"value":1736},"Matrica reshenij:",{"type":32,"tag":1738,"props":1739,"children":1740},"table",{},[1741,1765],{"type":32,"tag":1742,"props":1743,"children":1744},"thead",{},[1745],{"type":32,"tag":1746,"props":1747,"children":1748},"tr",{},[1749,1755,1760],{"type":32,"tag":1750,"props":1751,"children":1752},"th",{},[1753],{"type":37,"value":1754},"Tip stranicy",{"type":32,"tag":1750,"props":1756,"children":1757},{},[1758],{"type":37,"value":1759},"Strategiya",{"type":32,"tag":1750,"props":1761,"children":1762},{},[1763],{"type":37,"value":1764},"Prichina",{"type":32,"tag":1766,"props":1767,"children":1768},"tbody",{},[1769,1788,1806,1824,1842],{"type":32,"tag":1746,"props":1770,"children":1771},{},[1772,1778,1783],{"type":32,"tag":1773,"props":1774,"children":1775},"td",{},[1776],{"type":37,"value":1777},"Landing, o nas",{"type":32,"tag":1773,"props":1779,"children":1780},{},[1781],{"type":37,"value":1782},"SSG",{"type":32,"tag":1773,"props":1784,"children":1785},{},[1786],{"type":37,"value":1787},"Staticheskoe soderžhaniye, SEO vazhen",{"type":32,"tag":1746,"props":1789,"children":1790},{},[1791,1796,1801],{"type":32,"tag":1773,"props":1792,"children":1793},{},[1794],{"type":37,"value":1795},"Blog-stat'ya",{"type":32,"tag":1773,"props":1797,"children":1798},{},[1799],{"type":37,"value":1800},"SSG + ISR",{"type":32,"tag":1773,"props":1802,"children":1803},{},[1804],{"type":37,"value":1805},"Pri dobavlenii novoj stat'i — inkremental",{"type":32,"tag":1746,"props":1807,"children":1808},{},[1809,1814,1819],{"type":32,"tag":1773,"props":1810,"children":1811},{},[1812],{"type":37,"value":1813},"Katalog tovarov",{"type":32,"tag":1773,"props":1815,"children":1816},{},[1817],{"type":37,"value":1818},"ISR (swr: 1800)",{"type":32,"tag":1773,"props":1820,"children":1821},{},[1822],{"type":37,"value":1823},"Zapasy\u002Fceny obnovlyayutsya kazhdye 30min",{"type":32,"tag":1746,"props":1825,"children":1826},{},[1827,1832,1837],{"type":32,"tag":1773,"props":1828,"children":1829},{},[1830],{"type":37,"value":1831},"Detalj tovara",{"type":32,"tag":1773,"props":1833,"children":1834},{},[1835],{"type":37,"value":1836},"ISR (swr: 3600)",{"type":32,"tag":1773,"props":1838,"children":1839},{},[1840],{"type":37,"value":1841},"SEO potrebna, no dannye dinamichny",{"type":32,"tag":1746,"props":1843,"children":1844},{},[1845,1850,1855],{"type":32,"tag":1773,"props":1846,"children":1847},{},[1848],{"type":37,"value":1849},"Korzina, checkout",{"type":32,"tag":1773,"props":1851,"children":1852},{},[1853],{"type":37,"value":1854},"SPA (ssr: false)",{"type":32,"tag":1773,"props":1856,"children":1857},{},[1858],{"type":37,"value":1859},"Tol'ko klient-storona, trebuetsya autentifikaciya",{"type":32,"tag":33,"props":1861,"children":1862},{},[1863],{"type":37,"value":1864},"Kompromiss: ISR trebует привязки k edge runtime. Na samorazmeshhyonnom nginx ètogo ne sdelat'. Besplatnyj plan Cloudflare Workers — 100k zaprosy v den', dlya malykh sajtov dostаточno, dlya bol'shogo e-kommerca — Paid plan ($5 za 10M zaprosy).",{"type":32,"tag":40,"props":1866,"children":1868},{"id":1867},"zaklyuchenie-i-primenenie",[1869],{"type":37,"value":1870},"Zaklyuchenie i Primenenie",{"type":32,"tag":33,"props":1872,"children":1873},{},[1874,1876,1881],{"type":37,"value":1875},"SSG v Nuxt 3 s pravilnymi route rules + payload optimization + parallel'nym rendering daet dramaticheskoe uluchshenie. Real'nye cifry: 12-minut sborka → 3,5 minuty, razvertyvanie 5 minut → 2 minuty, edge TTFB 280ms → 120ms. No ètо trebuet otkazyisya ot \"pererendir vsekh rut\" i perejti k gibridnoj arhitekture ISR + SPA. Pri reshenii uchityvajte potrebnost' freshness soderžhaniya, chastotu sborki i limitacii edge-platformy. Esli v production postroit' cache-sloň dlyа inkremental'noj sborki, mozhno sniziťCI\u002FCD rashody na 80% — no ètо dobaviт complexity invalidacii kesha. Nachnite s prostoj ",{"type":32,"tag":52,"props":1877,"children":1879},{"className":1878},[],[1880],{"type":37,"value":490},{"type":37,"value":1882}," strategii, a kogda vremya sborki stanovitsya problem — pere`dite na inkremental'nye sborki.",{"type":32,"tag":1884,"props":1885,"children":1886},"style",{},[1887],{"type":37,"value":1888},"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":127,"depth":127,"links":1890},[1891,1892,1895,1898,1901,1902],{"id":42,"depth":100,"text":45},{"id":286,"depth":100,"text":289,"children":1893},[1894],{"id":503,"depth":127,"text":506},{"id":780,"depth":100,"text":783,"children":1896},[1897],{"id":927,"depth":127,"text":930},{"id":1354,"depth":100,"text":1357,"children":1899},[1900],{"id":1495,"depth":127,"text":1498},{"id":1712,"depth":100,"text":1715},{"id":1867,"depth":100,"text":1870},"markdown","content:ru:tech:ssg-strategii-i-optimizaciya-sborki-dlya-nuxt-3.md","content","ru\u002Ftech\u002Fssg-strategii-i-optimizaciya-sborki-dlya-nuxt-3.md","ru\u002Ftech\u002Fssg-strategii-i-optimizaciya-sborki-dlya-nuxt-3","md",1782079495242]