[{"data":1,"prerenderedAt":2406},["ShallowReactive",2],{"article-alternates":3,"article-\u002Fes\u002Ftech\u002Fnuxt-3-cloudflare-pages-lcp-2-segundos":13},{"i18nKey":4,"paths":5},"tech-001-2026-06",{"de":6,"en":7,"es":8,"fr":9,"it":10,"ru":11,"tr":12},"\u002Fde\u002Ftech\u002Fnuxt-3-cloudflare-pages-lcp-verbesserung","\u002Fen\u002Ftech\u002Fnuxt-3-cloudflare-pages-lcp-optimization","\u002Fes\u002Ftech\u002Fnuxt-3-cloudflare-pages-lcp-2-segundos","\u002Ffr\u002Ftech\u002Fnuxt-3-cloudflare-pages-10s-lcp-vers-2s","\u002Fit\u002Ftech\u002Fnuxt-3-cloudflare-pages-lcp-ottimizzazione","\u002Fru\u002Ftech\u002Fnuxt-3-cloudflare-pages-lcp-optimizacija","\u002Ftr\u002Ftech\u002Fnuxt-3-cloudflare-pages-10s-lcpden-2sye",{"_path":8,"_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":2400,"_id":2401,"_source":2402,"_file":2403,"_stem":2404,"_extension":2405},"tech",false,"","Nuxt 3 + Cloudflare Pages: De 10s LCP a 2s","Fuentes auto-alojadas, lazy hydration, content-visibility y edge caching redujeron el Largest Contentful Paint en un 80%. Benchmarks y código.","2026-06-16",[21,22,23,24,25],"nuxt-3","cloudflare-pages","web-performance","core-web-vitals","edge-caching",8,"Roibase",{"type":29,"children":30,"toc":2388},"root",[31,48,55,68,101,114,143,156,350,363,368,374,379,400,484,489,833,838,851,858,870,957,969,975,988,1069,1080,1085,1192,1210,1318,1334,1340,1353,1361,1401,1406,1417,1423,1428,1703,1708,1714,1719,2106,2111,2183,2195,2319,2324,2330,2343,2367,2372,2377,2382],{"type":32,"tag":33,"props":34,"children":35},"element","p",{},[36,39,46],{"type":37,"value":38},"text","Un proyecto de e-commerce Nuxt 3 desplegado en Cloudflare Pages mostraba LCP de 10.2s en PageSpeed Insights. Google Fonts, hydration del lado del cliente, carga above-the-fold y headers de caché CDN eran los cuellos de botella clásicos. Con auto-hosting de fuentes con subsetting, API lazy hydration de Vue 3, CSS ",{"type":32,"tag":40,"props":41,"children":43},"code",{"className":42},[],[44],{"type":37,"value":45},"content-visibility",{"type":37,"value":47}," y ajustes de TTL de caché edge de Cloudflare, redujimos LCP a 2.1s. Este artículo detalla las cuatro intervenciones técnicas y los resultados de benchmark.",{"type":32,"tag":49,"props":50,"children":52},"h2",{"id":51},"font-subsetting-auto-alojado-900ms-en-fcp",[53],{"type":37,"value":54},"Font Subsetting Auto-Alojado: -900ms en FCP",{"type":32,"tag":33,"props":56,"children":57},{},[58,60,66],{"type":37,"value":59},"El archivo CSS de Google Fonts era una solicitud render-blocking de 320ms. Después de descargar la variable font WOFF2, el First Contentful Paint llegaba a 3.8s. Instalamos el paquete ",{"type":32,"tag":40,"props":61,"children":63},{"className":62},[],[64],{"type":37,"value":65},"@fontsource",{"type":37,"value":67}," y seleccionamos solo el subset Latin + rango de pesos 400-700:",{"type":32,"tag":69,"props":70,"children":74},"pre",{"code":71,"language":72,"meta":16,"className":73,"style":16},"npm install @fontsource-variable\u002Finter\n","bash","language-bash shiki shiki-themes github-dark",[75],{"type":32,"tag":40,"props":76,"children":77},{"__ignoreMap":16},[78],{"type":32,"tag":79,"props":80,"children":83},"span",{"class":81,"line":82},"line",1,[84,90,96],{"type":32,"tag":79,"props":85,"children":87},{"style":86},"--shiki-default:#B392F0",[88],{"type":37,"value":89},"npm",{"type":32,"tag":79,"props":91,"children":93},{"style":92},"--shiki-default:#9ECBFF",[94],{"type":37,"value":95}," install",{"type":32,"tag":79,"props":97,"children":98},{"style":92},[99],{"type":37,"value":100}," @fontsource-variable\u002Finter\n",{"type":32,"tag":33,"props":102,"children":103},{},[104,106,112],{"type":37,"value":105},"Import en ",{"type":32,"tag":40,"props":107,"children":109},{"className":108},[],[110],{"type":37,"value":111},"app.vue",{"type":37,"value":113},":",{"type":32,"tag":69,"props":115,"children":119},{"code":116,"language":117,"meta":16,"className":118,"style":16},"import '@fontsource-variable\u002Finter\u002Fwght.css';\n","javascript","language-javascript shiki shiki-themes github-dark",[120],{"type":32,"tag":40,"props":121,"children":122},{"__ignoreMap":16},[123],{"type":32,"tag":79,"props":124,"children":125},{"class":81,"line":82},[126,132,137],{"type":32,"tag":79,"props":127,"children":129},{"style":128},"--shiki-default:#F97583",[130],{"type":37,"value":131},"import",{"type":32,"tag":79,"props":133,"children":134},{"style":92},[135],{"type":37,"value":136}," '@fontsource-variable\u002Finter\u002Fwght.css'",{"type":32,"tag":79,"props":138,"children":140},{"style":139},"--shiki-default:#E1E4E8",[141],{"type":37,"value":142},";\n",{"type":32,"tag":33,"props":144,"children":145},{},[146,148,154],{"type":37,"value":147},"Configuración en ",{"type":32,"tag":40,"props":149,"children":151},{"className":150},[],[152],{"type":37,"value":153},"nuxt.config.ts",{"type":37,"value":155}," con ajuste de font-display:",{"type":32,"tag":69,"props":157,"children":161},{"code":158,"language":159,"meta":16,"className":160,"style":16},"export default defineNuxtConfig({\n  css: ['@fontsource-variable\u002Finter\u002Fwght.css'],\n  vite: {\n    css: {\n      postcss: {\n        plugins: [\n          require('postcss-preset-env')({\n            features: { 'custom-properties': false }\n          })\n        ]\n      }\n    }\n  }\n});\n","typescript","language-typescript shiki shiki-themes github-dark",[162],{"type":32,"tag":40,"props":163,"children":164},{"__ignoreMap":16},[165,188,207,216,225,234,243,267,296,305,314,323,332,341],{"type":32,"tag":79,"props":166,"children":167},{"class":81,"line":82},[168,173,178,183],{"type":32,"tag":79,"props":169,"children":170},{"style":128},[171],{"type":37,"value":172},"export",{"type":32,"tag":79,"props":174,"children":175},{"style":128},[176],{"type":37,"value":177}," default",{"type":32,"tag":79,"props":179,"children":180},{"style":86},[181],{"type":37,"value":182}," defineNuxtConfig",{"type":32,"tag":79,"props":184,"children":185},{"style":139},[186],{"type":37,"value":187},"({\n",{"type":32,"tag":79,"props":189,"children":191},{"class":81,"line":190},2,[192,197,202],{"type":32,"tag":79,"props":193,"children":194},{"style":139},[195],{"type":37,"value":196},"  css: [",{"type":32,"tag":79,"props":198,"children":199},{"style":92},[200],{"type":37,"value":201},"'@fontsource-variable\u002Finter\u002Fwght.css'",{"type":32,"tag":79,"props":203,"children":204},{"style":139},[205],{"type":37,"value":206},"],\n",{"type":32,"tag":79,"props":208,"children":210},{"class":81,"line":209},3,[211],{"type":32,"tag":79,"props":212,"children":213},{"style":139},[214],{"type":37,"value":215},"  vite: {\n",{"type":32,"tag":79,"props":217,"children":219},{"class":81,"line":218},4,[220],{"type":32,"tag":79,"props":221,"children":222},{"style":139},[223],{"type":37,"value":224},"    css: {\n",{"type":32,"tag":79,"props":226,"children":228},{"class":81,"line":227},5,[229],{"type":32,"tag":79,"props":230,"children":231},{"style":139},[232],{"type":37,"value":233},"      postcss: {\n",{"type":32,"tag":79,"props":235,"children":237},{"class":81,"line":236},6,[238],{"type":32,"tag":79,"props":239,"children":240},{"style":139},[241],{"type":37,"value":242},"        plugins: [\n",{"type":32,"tag":79,"props":244,"children":246},{"class":81,"line":245},7,[247,252,257,262],{"type":32,"tag":79,"props":248,"children":249},{"style":86},[250],{"type":37,"value":251},"          require",{"type":32,"tag":79,"props":253,"children":254},{"style":139},[255],{"type":37,"value":256},"(",{"type":32,"tag":79,"props":258,"children":259},{"style":92},[260],{"type":37,"value":261},"'postcss-preset-env'",{"type":32,"tag":79,"props":263,"children":264},{"style":139},[265],{"type":37,"value":266},")({\n",{"type":32,"tag":79,"props":268,"children":269},{"class":81,"line":26},[270,275,280,285,291],{"type":32,"tag":79,"props":271,"children":272},{"style":139},[273],{"type":37,"value":274},"            features: { ",{"type":32,"tag":79,"props":276,"children":277},{"style":92},[278],{"type":37,"value":279},"'custom-properties'",{"type":32,"tag":79,"props":281,"children":282},{"style":139},[283],{"type":37,"value":284},": ",{"type":32,"tag":79,"props":286,"children":288},{"style":287},"--shiki-default:#79B8FF",[289],{"type":37,"value":290},"false",{"type":32,"tag":79,"props":292,"children":293},{"style":139},[294],{"type":37,"value":295}," }\n",{"type":32,"tag":79,"props":297,"children":299},{"class":81,"line":298},9,[300],{"type":32,"tag":79,"props":301,"children":302},{"style":139},[303],{"type":37,"value":304},"          })\n",{"type":32,"tag":79,"props":306,"children":308},{"class":81,"line":307},10,[309],{"type":32,"tag":79,"props":310,"children":311},{"style":139},[312],{"type":37,"value":313},"        ]\n",{"type":32,"tag":79,"props":315,"children":317},{"class":81,"line":316},11,[318],{"type":32,"tag":79,"props":319,"children":320},{"style":139},[321],{"type":37,"value":322},"      }\n",{"type":32,"tag":79,"props":324,"children":326},{"class":81,"line":325},12,[327],{"type":32,"tag":79,"props":328,"children":329},{"style":139},[330],{"type":37,"value":331},"    }\n",{"type":32,"tag":79,"props":333,"children":335},{"class":81,"line":334},13,[336],{"type":32,"tag":79,"props":337,"children":338},{"style":139},[339],{"type":37,"value":340},"  }\n",{"type":32,"tag":79,"props":342,"children":344},{"class":81,"line":343},14,[345],{"type":32,"tag":79,"props":346,"children":347},{"style":139},[348],{"type":37,"value":349},"});\n",{"type":32,"tag":33,"props":351,"children":352},{},[353,355,361],{"type":37,"value":354},"Resultado: Archivo WOFF2 de 24KB, servido inline en la primera solicitud. FCP: 3.8s → 2.9s. Tiempo render-blocking: 320ms → 0ms. Utilizamos ",{"type":32,"tag":40,"props":356,"children":358},{"className":357},[],[359],{"type":37,"value":360},"wght.css",{"type":37,"value":362}," para mantener los axes de variable font en lugar de archivos de peso estático.",{"type":32,"tag":33,"props":364,"children":365},{},[366],{"type":37,"value":367},"El CDN de Google Fonts tiene muchas edge locations, pero DNS lookup + TLS handshake agregaban 200-300ms para cada visitante. Con auto-hosting, la velocidad de servicio desde el servidor de origen es la misma en el edge de Cloudflare Pages, pero eliminamos el salto DNS adicional.",{"type":32,"tag":49,"props":369,"children":371},{"id":370},"lazy-hydration-tbt-2190ms-200ms",[372],{"type":37,"value":373},"Lazy Hydration: TBT 2190ms → 200ms",{"type":32,"tag":33,"props":375,"children":376},{},[377],{"type":37,"value":378},"Nuxt 3 hydrata todos los componentes del lado del cliente por defecto. La página de listado de productos tenía 48 tarjetas, cada una requería 120KB de JavaScript para parsear el sistema de reactividad de Vue. Total Blocking Time llegaba a 2190ms — el usuario no podía hacer scroll durante 2 segundos.",{"type":32,"tag":33,"props":380,"children":381},{},[382,384,390,392,398],{"type":37,"value":383},"Utilizamos ",{"type":32,"tag":40,"props":385,"children":387},{"className":386},[],[388],{"type":37,"value":389},"defineAsyncComponent",{"type":37,"value":391}," + ",{"type":32,"tag":40,"props":393,"children":395},{"className":394},[],[396],{"type":37,"value":397},"hydration:lazy",{"type":37,"value":399}," de Vue 3.5+ para lazy hydration de componentes below-the-fold:",{"type":32,"tag":69,"props":401,"children":403},{"code":402,"language":117,"meta":16,"className":118,"style":16},"\u002F\u002F components\u002FProductCard.vue\n\u003Cscript setup>\ndefineOptions({\n  hydration: 'lazy'\n});\n\u003C\u002Fscript>\n",[404],{"type":32,"tag":40,"props":405,"children":406},{"__ignoreMap":16},[407,416,440,448,461,468],{"type":32,"tag":79,"props":408,"children":409},{"class":81,"line":82},[410],{"type":32,"tag":79,"props":411,"children":413},{"style":412},"--shiki-default:#6A737D",[414],{"type":37,"value":415},"\u002F\u002F components\u002FProductCard.vue\n",{"type":32,"tag":79,"props":417,"children":418},{"class":81,"line":190},[419,424,430,435],{"type":32,"tag":79,"props":420,"children":421},{"style":139},[422],{"type":37,"value":423},"\u003C",{"type":32,"tag":79,"props":425,"children":427},{"style":426},"--shiki-default:#85E89D",[428],{"type":37,"value":429},"script",{"type":32,"tag":79,"props":431,"children":432},{"style":86},[433],{"type":37,"value":434}," setup",{"type":32,"tag":79,"props":436,"children":437},{"style":139},[438],{"type":37,"value":439},">\n",{"type":32,"tag":79,"props":441,"children":442},{"class":81,"line":209},[443],{"type":32,"tag":79,"props":444,"children":445},{"style":139},[446],{"type":37,"value":447},"defineOptions({\n",{"type":32,"tag":79,"props":449,"children":450},{"class":81,"line":218},[451,456],{"type":32,"tag":79,"props":452,"children":453},{"style":139},[454],{"type":37,"value":455},"  hydration: ",{"type":32,"tag":79,"props":457,"children":458},{"style":92},[459],{"type":37,"value":460},"'lazy'\n",{"type":32,"tag":79,"props":462,"children":463},{"class":81,"line":227},[464],{"type":32,"tag":79,"props":465,"children":466},{"style":139},[467],{"type":37,"value":349},{"type":32,"tag":79,"props":469,"children":470},{"class":81,"line":236},[471,476,480],{"type":32,"tag":79,"props":472,"children":473},{"style":139},[474],{"type":37,"value":475},"\u003C\u002F",{"type":32,"tag":79,"props":477,"children":478},{"style":426},[479],{"type":37,"value":429},{"type":32,"tag":79,"props":481,"children":482},{"style":139},[483],{"type":37,"value":439},{"type":32,"tag":33,"props":485,"children":486},{},[487],{"type":37,"value":488},"Con Intersection Observer para hydration cuando entran en viewport:",{"type":32,"tag":69,"props":490,"children":492},{"code":491,"language":117,"meta":16,"className":118,"style":16},"\u002F\u002F plugins\u002Flazy-hydration.client.ts\nexport default defineNuxtPlugin((nuxtApp) => {\n  nuxtApp.vueApp.mixin({\n    mounted() {\n      if (this.$options.hydration === 'lazy') {\n        const observer = new IntersectionObserver((entries) => {\n          entries.forEach((entry) => {\n            if (entry.isIntersecting) {\n              this.$forceUpdate();\n              observer.disconnect();\n            }\n          });\n        });\n        observer.observe(this.$el);\n      }\n    }\n  });\n});\n",[493],{"type":32,"tag":40,"props":494,"children":495},{"__ignoreMap":16},[496,504,546,563,576,614,663,697,710,733,750,758,766,774,800,808,816,825],{"type":32,"tag":79,"props":497,"children":498},{"class":81,"line":82},[499],{"type":32,"tag":79,"props":500,"children":501},{"style":412},[502],{"type":37,"value":503},"\u002F\u002F plugins\u002Flazy-hydration.client.ts\n",{"type":32,"tag":79,"props":505,"children":506},{"class":81,"line":190},[507,511,515,520,525,531,536,541],{"type":32,"tag":79,"props":508,"children":509},{"style":128},[510],{"type":37,"value":172},{"type":32,"tag":79,"props":512,"children":513},{"style":128},[514],{"type":37,"value":177},{"type":32,"tag":79,"props":516,"children":517},{"style":86},[518],{"type":37,"value":519}," defineNuxtPlugin",{"type":32,"tag":79,"props":521,"children":522},{"style":139},[523],{"type":37,"value":524},"((",{"type":32,"tag":79,"props":526,"children":528},{"style":527},"--shiki-default:#FFAB70",[529],{"type":37,"value":530},"nuxtApp",{"type":32,"tag":79,"props":532,"children":533},{"style":139},[534],{"type":37,"value":535},") ",{"type":32,"tag":79,"props":537,"children":538},{"style":128},[539],{"type":37,"value":540},"=>",{"type":32,"tag":79,"props":542,"children":543},{"style":139},[544],{"type":37,"value":545}," {\n",{"type":32,"tag":79,"props":547,"children":548},{"class":81,"line":209},[549,554,559],{"type":32,"tag":79,"props":550,"children":551},{"style":139},[552],{"type":37,"value":553},"  nuxtApp.vueApp.",{"type":32,"tag":79,"props":555,"children":556},{"style":86},[557],{"type":37,"value":558},"mixin",{"type":32,"tag":79,"props":560,"children":561},{"style":139},[562],{"type":37,"value":187},{"type":32,"tag":79,"props":564,"children":565},{"class":81,"line":218},[566,571],{"type":32,"tag":79,"props":567,"children":568},{"style":86},[569],{"type":37,"value":570},"    mounted",{"type":32,"tag":79,"props":572,"children":573},{"style":139},[574],{"type":37,"value":575},"() {\n",{"type":32,"tag":79,"props":577,"children":578},{"class":81,"line":227},[579,584,589,594,599,604,609],{"type":32,"tag":79,"props":580,"children":581},{"style":128},[582],{"type":37,"value":583},"      if",{"type":32,"tag":79,"props":585,"children":586},{"style":139},[587],{"type":37,"value":588}," (",{"type":32,"tag":79,"props":590,"children":591},{"style":287},[592],{"type":37,"value":593},"this",{"type":32,"tag":79,"props":595,"children":596},{"style":139},[597],{"type":37,"value":598},".$options.hydration ",{"type":32,"tag":79,"props":600,"children":601},{"style":128},[602],{"type":37,"value":603},"===",{"type":32,"tag":79,"props":605,"children":606},{"style":92},[607],{"type":37,"value":608}," 'lazy'",{"type":32,"tag":79,"props":610,"children":611},{"style":139},[612],{"type":37,"value":613},") {\n",{"type":32,"tag":79,"props":615,"children":616},{"class":81,"line":236},[617,622,627,632,637,642,646,651,655,659],{"type":32,"tag":79,"props":618,"children":619},{"style":128},[620],{"type":37,"value":621},"        const",{"type":32,"tag":79,"props":623,"children":624},{"style":287},[625],{"type":37,"value":626}," observer",{"type":32,"tag":79,"props":628,"children":629},{"style":128},[630],{"type":37,"value":631}," =",{"type":32,"tag":79,"props":633,"children":634},{"style":128},[635],{"type":37,"value":636}," new",{"type":32,"tag":79,"props":638,"children":639},{"style":86},[640],{"type":37,"value":641}," IntersectionObserver",{"type":32,"tag":79,"props":643,"children":644},{"style":139},[645],{"type":37,"value":524},{"type":32,"tag":79,"props":647,"children":648},{"style":527},[649],{"type":37,"value":650},"entries",{"type":32,"tag":79,"props":652,"children":653},{"style":139},[654],{"type":37,"value":535},{"type":32,"tag":79,"props":656,"children":657},{"style":128},[658],{"type":37,"value":540},{"type":32,"tag":79,"props":660,"children":661},{"style":139},[662],{"type":37,"value":545},{"type":32,"tag":79,"props":664,"children":665},{"class":81,"line":245},[666,671,676,680,685,689,693],{"type":32,"tag":79,"props":667,"children":668},{"style":139},[669],{"type":37,"value":670},"          entries.",{"type":32,"tag":79,"props":672,"children":673},{"style":86},[674],{"type":37,"value":675},"forEach",{"type":32,"tag":79,"props":677,"children":678},{"style":139},[679],{"type":37,"value":524},{"type":32,"tag":79,"props":681,"children":682},{"style":527},[683],{"type":37,"value":684},"entry",{"type":32,"tag":79,"props":686,"children":687},{"style":139},[688],{"type":37,"value":535},{"type":32,"tag":79,"props":690,"children":691},{"style":128},[692],{"type":37,"value":540},{"type":32,"tag":79,"props":694,"children":695},{"style":139},[696],{"type":37,"value":545},{"type":32,"tag":79,"props":698,"children":699},{"class":81,"line":26},[700,705],{"type":32,"tag":79,"props":701,"children":702},{"style":128},[703],{"type":37,"value":704},"            if",{"type":32,"tag":79,"props":706,"children":707},{"style":139},[708],{"type":37,"value":709}," (entry.isIntersecting) {\n",{"type":32,"tag":79,"props":711,"children":712},{"class":81,"line":298},[713,718,723,728],{"type":32,"tag":79,"props":714,"children":715},{"style":287},[716],{"type":37,"value":717},"              this",{"type":32,"tag":79,"props":719,"children":720},{"style":139},[721],{"type":37,"value":722},".",{"type":32,"tag":79,"props":724,"children":725},{"style":86},[726],{"type":37,"value":727},"$forceUpdate",{"type":32,"tag":79,"props":729,"children":730},{"style":139},[731],{"type":37,"value":732},"();\n",{"type":32,"tag":79,"props":734,"children":735},{"class":81,"line":307},[736,741,746],{"type":32,"tag":79,"props":737,"children":738},{"style":139},[739],{"type":37,"value":740},"              observer.",{"type":32,"tag":79,"props":742,"children":743},{"style":86},[744],{"type":37,"value":745},"disconnect",{"type":32,"tag":79,"props":747,"children":748},{"style":139},[749],{"type":37,"value":732},{"type":32,"tag":79,"props":751,"children":752},{"class":81,"line":316},[753],{"type":32,"tag":79,"props":754,"children":755},{"style":139},[756],{"type":37,"value":757},"            }\n",{"type":32,"tag":79,"props":759,"children":760},{"class":81,"line":325},[761],{"type":32,"tag":79,"props":762,"children":763},{"style":139},[764],{"type":37,"value":765},"          });\n",{"type":32,"tag":79,"props":767,"children":768},{"class":81,"line":334},[769],{"type":32,"tag":79,"props":770,"children":771},{"style":139},[772],{"type":37,"value":773},"        });\n",{"type":32,"tag":79,"props":775,"children":776},{"class":81,"line":343},[777,782,787,791,795],{"type":32,"tag":79,"props":778,"children":779},{"style":139},[780],{"type":37,"value":781},"        observer.",{"type":32,"tag":79,"props":783,"children":784},{"style":86},[785],{"type":37,"value":786},"observe",{"type":32,"tag":79,"props":788,"children":789},{"style":139},[790],{"type":37,"value":256},{"type":32,"tag":79,"props":792,"children":793},{"style":287},[794],{"type":37,"value":593},{"type":32,"tag":79,"props":796,"children":797},{"style":139},[798],{"type":37,"value":799},".$el);\n",{"type":32,"tag":79,"props":801,"children":803},{"class":81,"line":802},15,[804],{"type":32,"tag":79,"props":805,"children":806},{"style":139},[807],{"type":37,"value":322},{"type":32,"tag":79,"props":809,"children":811},{"class":81,"line":810},16,[812],{"type":32,"tag":79,"props":813,"children":814},{"style":139},[815],{"type":37,"value":331},{"type":32,"tag":79,"props":817,"children":819},{"class":81,"line":818},17,[820],{"type":32,"tag":79,"props":821,"children":822},{"style":139},[823],{"type":37,"value":824},"  });\n",{"type":32,"tag":79,"props":826,"children":828},{"class":81,"line":827},18,[829],{"type":32,"tag":79,"props":830,"children":831},{"style":139},[832],{"type":37,"value":349},{"type":32,"tag":33,"props":834,"children":835},{},[836],{"type":37,"value":837},"Hero above-the-fold + primeras 6 productos hydration inmediata, el resto lazy. Bundle size: 480KB → 280KB inicial, 200KB lazy chunk. TBT: 2190ms → 200ms. El usuario puede hacer scroll en 1 segundo.",{"type":32,"tag":33,"props":839,"children":840},{},[841,843,849],{"type":37,"value":842},"Trade-off: Retraso en attach de event listener. Mantuvimos ",{"type":32,"tag":40,"props":844,"children":846},{"className":845},[],[847],{"type":37,"value":848},"hydration: 'immediate'",{"type":37,"value":850}," para componentes con handlers (botón Add to Cart). Para contenido scroll-triggered, lazy es ideal.",{"type":32,"tag":852,"props":853,"children":855},"h3",{"id":854},"built-in-lazy-component-de-nuxt",[856],{"type":37,"value":857},"Built-in Lazy Component de Nuxt",{"type":32,"tag":33,"props":859,"children":860},{},[861,863,869],{"type":37,"value":862},"Nuxt 3.0+ incluye el prefijo ",{"type":32,"tag":40,"props":864,"children":866},{"className":865},[],[867],{"type":37,"value":868},"\u003CLazyComponentName>",{"type":37,"value":113},{"type":32,"tag":69,"props":871,"children":875},{"code":872,"language":873,"meta":16,"className":874,"style":16},"\u003Ctemplate>\n  \u003CLazyProductCard v-for=\"product in products\" :key=\"product.id\" \u002F>\n\u003C\u002Ftemplate>\n","vue","language-vue shiki shiki-themes github-dark",[876],{"type":32,"tag":40,"props":877,"children":878},{"__ignoreMap":16},[879,895,942],{"type":32,"tag":79,"props":880,"children":881},{"class":81,"line":82},[882,886,891],{"type":32,"tag":79,"props":883,"children":884},{"style":139},[885],{"type":37,"value":423},{"type":32,"tag":79,"props":887,"children":888},{"style":426},[889],{"type":37,"value":890},"template",{"type":32,"tag":79,"props":892,"children":893},{"style":139},[894],{"type":37,"value":439},{"type":32,"tag":79,"props":896,"children":897},{"class":81,"line":190},[898,903,908,913,918,923,928,932,937],{"type":32,"tag":79,"props":899,"children":900},{"style":139},[901],{"type":37,"value":902},"  \u003C",{"type":32,"tag":79,"props":904,"children":905},{"style":426},[906],{"type":37,"value":907},"LazyProductCard",{"type":32,"tag":79,"props":909,"children":910},{"style":86},[911],{"type":37,"value":912}," v-for",{"type":32,"tag":79,"props":914,"children":915},{"style":139},[916],{"type":37,"value":917},"=",{"type":32,"tag":79,"props":919,"children":920},{"style":92},[921],{"type":37,"value":922},"\"product in products\"",{"type":32,"tag":79,"props":924,"children":925},{"style":86},[926],{"type":37,"value":927}," :key",{"type":32,"tag":79,"props":929,"children":930},{"style":139},[931],{"type":37,"value":917},{"type":32,"tag":79,"props":933,"children":934},{"style":92},[935],{"type":37,"value":936},"\"product.id\"",{"type":32,"tag":79,"props":938,"children":939},{"style":139},[940],{"type":37,"value":941}," \u002F>\n",{"type":32,"tag":79,"props":943,"children":944},{"class":81,"line":209},[945,949,953],{"type":32,"tag":79,"props":946,"children":947},{"style":139},[948],{"type":37,"value":475},{"type":32,"tag":79,"props":950,"children":951},{"style":426},[952],{"type":37,"value":890},{"type":32,"tag":79,"props":954,"children":955},{"style":139},[956],{"type":37,"value":439},{"type":32,"tag":33,"props":958,"children":959},{},[960,962,968],{"type":37,"value":961},"Sin embargo, este método no renderiza server-side, solo mount del lado del cliente. En nuestro setup necesitábamos SSR para SEO, por eso elegimos el método ",{"type":32,"tag":40,"props":963,"children":965},{"className":964},[],[966],{"type":37,"value":967},"defineOptions",{"type":37,"value":722},{"type":32,"tag":49,"props":970,"children":972},{"id":971},"css-content-visibility-14s-de-lcp",[973],{"type":37,"value":974},"CSS content-visibility: +1.4s de LCP",{"type":32,"tag":33,"props":976,"children":977},{},[978,980,986],{"type":37,"value":979},"El grid de 48 tarjetas causaba layout shift. El navegador renderizaba cada tarjeta y calculaba CLS, retrasando LCP. Usamos ",{"type":32,"tag":40,"props":981,"children":983},{"className":982},[],[984],{"type":37,"value":985},"content-visibility: auto",{"type":37,"value":987}," para quitar contenido off-screen del ciclo de renderizado:",{"type":32,"tag":69,"props":989,"children":993},{"code":990,"language":991,"meta":16,"className":992,"style":16},".product-card {\n  content-visibility: auto;\n  contain-intrinsic-size: 0 360px;\n}\n","css","language-css shiki shiki-themes github-dark",[994],{"type":32,"tag":40,"props":995,"children":996},{"__ignoreMap":16},[997,1009,1030,1061],{"type":32,"tag":79,"props":998,"children":999},{"class":81,"line":82},[1000,1005],{"type":32,"tag":79,"props":1001,"children":1002},{"style":86},[1003],{"type":37,"value":1004},".product-card",{"type":32,"tag":79,"props":1006,"children":1007},{"style":139},[1008],{"type":37,"value":545},{"type":32,"tag":79,"props":1010,"children":1011},{"class":81,"line":190},[1012,1017,1021,1026],{"type":32,"tag":79,"props":1013,"children":1014},{"style":287},[1015],{"type":37,"value":1016},"  content-visibility",{"type":32,"tag":79,"props":1018,"children":1019},{"style":139},[1020],{"type":37,"value":284},{"type":32,"tag":79,"props":1022,"children":1023},{"style":287},[1024],{"type":37,"value":1025},"auto",{"type":32,"tag":79,"props":1027,"children":1028},{"style":139},[1029],{"type":37,"value":142},{"type":32,"tag":79,"props":1031,"children":1032},{"class":81,"line":209},[1033,1038,1042,1047,1052,1057],{"type":32,"tag":79,"props":1034,"children":1035},{"style":287},[1036],{"type":37,"value":1037},"  contain-intrinsic-size",{"type":32,"tag":79,"props":1039,"children":1040},{"style":139},[1041],{"type":37,"value":284},{"type":32,"tag":79,"props":1043,"children":1044},{"style":287},[1045],{"type":37,"value":1046},"0",{"type":32,"tag":79,"props":1048,"children":1049},{"style":287},[1050],{"type":37,"value":1051}," 360",{"type":32,"tag":79,"props":1053,"children":1054},{"style":128},[1055],{"type":37,"value":1056},"px",{"type":32,"tag":79,"props":1058,"children":1059},{"style":139},[1060],{"type":37,"value":142},{"type":32,"tag":79,"props":1062,"children":1063},{"class":81,"line":218},[1064],{"type":32,"tag":79,"props":1065,"children":1066},{"style":139},[1067],{"type":37,"value":1068},"}\n",{"type":32,"tag":33,"props":1070,"children":1071},{},[1072,1078],{"type":32,"tag":40,"props":1073,"children":1075},{"className":1074},[],[1076],{"type":37,"value":1077},"contain-intrinsic-size",{"type":37,"value":1079}," le dice al navegador \"este elemento tiene 360px de altura\", manteniendo altura placeholder cuando está fuera de viewport. Layout shift CLS: 0.18 → 0.02.",{"type":32,"tag":33,"props":1081,"children":1082},{},[1083],{"type":37,"value":1084},"Benchmark (Lighthouse 10.4, throttled 4G):",{"type":32,"tag":1086,"props":1087,"children":1088},"table",{},[1089,1118],{"type":32,"tag":1090,"props":1091,"children":1092},"thead",{},[1093],{"type":32,"tag":1094,"props":1095,"children":1096},"tr",{},[1097,1103,1108,1113],{"type":32,"tag":1098,"props":1099,"children":1100},"th",{},[1101],{"type":37,"value":1102},"Métrica",{"type":32,"tag":1098,"props":1104,"children":1105},{},[1106],{"type":37,"value":1107},"Antes",{"type":32,"tag":1098,"props":1109,"children":1110},{},[1111],{"type":37,"value":1112},"Después",{"type":32,"tag":1098,"props":1114,"children":1115},{},[1116],{"type":37,"value":1117},"Delta",{"type":32,"tag":1119,"props":1120,"children":1121},"tbody",{},[1122,1146,1169],{"type":32,"tag":1094,"props":1123,"children":1124},{},[1125,1131,1136,1141],{"type":32,"tag":1126,"props":1127,"children":1128},"td",{},[1129],{"type":37,"value":1130},"LCP",{"type":32,"tag":1126,"props":1132,"children":1133},{},[1134],{"type":37,"value":1135},"10.2s",{"type":32,"tag":1126,"props":1137,"children":1138},{},[1139],{"type":37,"value":1140},"2.1s",{"type":32,"tag":1126,"props":1142,"children":1143},{},[1144],{"type":37,"value":1145},"-8.1s",{"type":32,"tag":1094,"props":1147,"children":1148},{},[1149,1154,1159,1164],{"type":32,"tag":1126,"props":1150,"children":1151},{},[1152],{"type":37,"value":1153},"CLS",{"type":32,"tag":1126,"props":1155,"children":1156},{},[1157],{"type":37,"value":1158},"0.18",{"type":32,"tag":1126,"props":1160,"children":1161},{},[1162],{"type":37,"value":1163},"0.02",{"type":32,"tag":1126,"props":1165,"children":1166},{},[1167],{"type":37,"value":1168},"-0.16",{"type":32,"tag":1094,"props":1170,"children":1171},{},[1172,1177,1182,1187],{"type":32,"tag":1126,"props":1173,"children":1174},{},[1175],{"type":37,"value":1176},"TBT",{"type":32,"tag":1126,"props":1178,"children":1179},{},[1180],{"type":37,"value":1181},"2190ms",{"type":32,"tag":1126,"props":1183,"children":1184},{},[1185],{"type":37,"value":1186},"200ms",{"type":32,"tag":1126,"props":1188,"children":1189},{},[1190],{"type":37,"value":1191},"-1990ms",{"type":32,"tag":33,"props":1193,"children":1194},{},[1195,1200,1202,1208],{"type":32,"tag":40,"props":1196,"children":1198},{"className":1197},[],[1199],{"type":37,"value":45},{"type":37,"value":1201}," tiene soporte en Safari 17+, con fallback a renderizado normal en iOS 16. Usamos ",{"type":32,"tag":40,"props":1203,"children":1205},{"className":1204},[],[1206],{"type":37,"value":1207},"@supports",{"type":37,"value":1209}," para progressive enhancement:",{"type":32,"tag":69,"props":1211,"children":1213},{"code":1212,"language":991,"meta":16,"className":992,"style":16},"@supports (content-visibility: auto) {\n  .product-card {\n    content-visibility: auto;\n    contain-intrinsic-size: 0 360px;\n  }\n}\n",[1214],{"type":32,"tag":40,"props":1215,"children":1216},{"__ignoreMap":16},[1217,1244,1256,1276,1304,1311],{"type":32,"tag":79,"props":1218,"children":1219},{"class":81,"line":82},[1220,1224,1228,1232,1236,1240],{"type":32,"tag":79,"props":1221,"children":1222},{"style":128},[1223],{"type":37,"value":1207},{"type":32,"tag":79,"props":1225,"children":1226},{"style":139},[1227],{"type":37,"value":588},{"type":32,"tag":79,"props":1229,"children":1230},{"style":287},[1231],{"type":37,"value":45},{"type":32,"tag":79,"props":1233,"children":1234},{"style":139},[1235],{"type":37,"value":284},{"type":32,"tag":79,"props":1237,"children":1238},{"style":287},[1239],{"type":37,"value":1025},{"type":32,"tag":79,"props":1241,"children":1242},{"style":139},[1243],{"type":37,"value":613},{"type":32,"tag":79,"props":1245,"children":1246},{"class":81,"line":190},[1247,1252],{"type":32,"tag":79,"props":1248,"children":1249},{"style":86},[1250],{"type":37,"value":1251},"  .product-card",{"type":32,"tag":79,"props":1253,"children":1254},{"style":139},[1255],{"type":37,"value":545},{"type":32,"tag":79,"props":1257,"children":1258},{"class":81,"line":209},[1259,1264,1268,1272],{"type":32,"tag":79,"props":1260,"children":1261},{"style":287},[1262],{"type":37,"value":1263},"    content-visibility",{"type":32,"tag":79,"props":1265,"children":1266},{"style":139},[1267],{"type":37,"value":284},{"type":32,"tag":79,"props":1269,"children":1270},{"style":287},[1271],{"type":37,"value":1025},{"type":32,"tag":79,"props":1273,"children":1274},{"style":139},[1275],{"type":37,"value":142},{"type":32,"tag":79,"props":1277,"children":1278},{"class":81,"line":218},[1279,1284,1288,1292,1296,1300],{"type":32,"tag":79,"props":1280,"children":1281},{"style":287},[1282],{"type":37,"value":1283},"    contain-intrinsic-size",{"type":32,"tag":79,"props":1285,"children":1286},{"style":139},[1287],{"type":37,"value":284},{"type":32,"tag":79,"props":1289,"children":1290},{"style":287},[1291],{"type":37,"value":1046},{"type":32,"tag":79,"props":1293,"children":1294},{"style":287},[1295],{"type":37,"value":1051},{"type":32,"tag":79,"props":1297,"children":1298},{"style":128},[1299],{"type":37,"value":1056},{"type":32,"tag":79,"props":1301,"children":1302},{"style":139},[1303],{"type":37,"value":142},{"type":32,"tag":79,"props":1305,"children":1306},{"class":81,"line":227},[1307],{"type":32,"tag":79,"props":1308,"children":1309},{"style":139},[1310],{"type":37,"value":340},{"type":32,"tag":79,"props":1312,"children":1313},{"class":81,"line":236},[1314],{"type":32,"tag":79,"props":1315,"children":1316},{"style":139},[1317],{"type":37,"value":1068},{"type":32,"tag":33,"props":1319,"children":1320},{},[1321,1323,1332],{"type":37,"value":1322},"Este enfoque es crítico en el proceso de ",{"type":32,"tag":1324,"props":1325,"children":1329},"a",{"href":1326,"rel":1327},"https:\u002F\u002Fwww.roibase.com.tr\u002Fes\u002Fui-ux",[1328],"nofollow",[1330],{"type":37,"value":1331},"UI\u002FUX",{"type":37,"value":1333}," para estabilidad de layout. La experiencia del usuario se vuelve independiente del costo de renderizado de contenido off-screen.",{"type":32,"tag":49,"props":1335,"children":1337},{"id":1336},"optimización-de-ttl-de-caché-edge-de-cloudflare-pages",[1338],{"type":37,"value":1339},"Optimización de TTL de Caché Edge de Cloudflare Pages",{"type":32,"tag":33,"props":1341,"children":1342},{},[1343,1345,1351],{"type":37,"value":1344},"El TTL de caché edge por defecto de Cloudflare Pages es 2 horas. Los precios se actualizan cada 15 minutos, pero assets visuales (imágenes, fuentes) son estáticos durante 7 días. Usamos el archivo ",{"type":32,"tag":40,"props":1346,"children":1348},{"className":1347},[],[1349],{"type":37,"value":1350},"_headers",{"type":37,"value":1352}," para control granular de caché:",{"type":32,"tag":69,"props":1354,"children":1356},{"code":1355},"# _headers\n\u002Fassets\u002F*\n  Cache-Control: public, max-age=604800, immutable\n\n\u002F_nuxt\u002F*\n  Cache-Control: public, max-age=31536000, immutable\n\n\u002Fapi\u002F*\n  Cache-Control: public, s-maxage=900, stale-while-revalidate=60\n\n\u002F*\n  Cache-Control: public, max-age=0, s-maxage=3600, stale-while-revalidate=300\n",[1357],{"type":32,"tag":40,"props":1358,"children":1359},{"__ignoreMap":16},[1360],{"type":37,"value":1355},{"type":32,"tag":1362,"props":1363,"children":1364},"ul",{},[1365,1385,1396],{"type":32,"tag":1366,"props":1367,"children":1368},"li",{},[1369,1375,1377,1383],{"type":32,"tag":40,"props":1370,"children":1372},{"className":1371},[],[1373],{"type":37,"value":1374},"\u002Fassets\u002F*",{"type":37,"value":1376}," y ",{"type":32,"tag":40,"props":1378,"children":1380},{"className":1379},[],[1381],{"type":37,"value":1382},"\u002F_nuxt\u002F*",{"type":37,"value":1384},": 1 año immutable (con fingerprint hash, URL cambia cuando hay cambios)",{"type":32,"tag":1366,"props":1386,"children":1387},{},[1388,1394],{"type":32,"tag":40,"props":1389,"children":1391},{"className":1390},[],[1392],{"type":37,"value":1393},"\u002Fapi\u002F*",{"type":37,"value":1395},": 15 minutos caché edge, 60 segundos stale-while-revalidate (si origin falla, servir data vieja)",{"type":32,"tag":1366,"props":1397,"children":1398},{},[1399],{"type":37,"value":1400},"HTML raíz: 1 hora caché edge, 5 minutos stale-while-revalidate",{"type":32,"tag":33,"props":1402,"children":1403},{},[1404],{"type":37,"value":1405},"TTFB desde edge location 40ms, desde origin 280ms. Hit rate de caché: 89% → 96%. TTFB mediana: 280ms → 45ms.",{"type":32,"tag":33,"props":1407,"children":1408},{},[1409,1415],{"type":32,"tag":40,"props":1410,"children":1412},{"className":1411},[],[1413],{"type":37,"value":1414},"stale-while-revalidate",{"type":37,"value":1416}," es crítico para usuarios: Si origin está actualizando, servir caché viejo, obtener nuevo dato en background. Usuario no espera.",{"type":32,"tag":852,"props":1418,"children":1420},{"id":1419},"purga-dinámica-de-caché-con-cloudflare-kv",[1421],{"type":37,"value":1422},"Purga Dinámica de Caché con Cloudflare KV",{"type":32,"tag":33,"props":1424,"children":1425},{},[1426],{"type":37,"value":1427},"En lugar de purgar todo el caché en actualización de precios, usamos Cloudflare KV + Workers para invalidación selectiva:",{"type":32,"tag":69,"props":1429,"children":1431},{"code":1430,"language":117,"meta":16,"className":118,"style":16},"\u002F\u002F workers\u002Fcache-purge.js\nexport default {\n  async fetch(request, env) {\n    const url = new URL(request.url);\n    const productId = url.searchParams.get('id');\n    \n    const cacheKey = `product:${productId}`;\n    await env.CACHE_KV.delete(cacheKey);\n    \n    return new Response('Cache purged', { status: 200 });\n  }\n};\n",[1432],{"type":32,"tag":40,"props":1433,"children":1434},{"__ignoreMap":16},[1435,1443,1458,1494,1525,1565,1573,1608,1640,1647,1688,1695],{"type":32,"tag":79,"props":1436,"children":1437},{"class":81,"line":82},[1438],{"type":32,"tag":79,"props":1439,"children":1440},{"style":412},[1441],{"type":37,"value":1442},"\u002F\u002F workers\u002Fcache-purge.js\n",{"type":32,"tag":79,"props":1444,"children":1445},{"class":81,"line":190},[1446,1450,1454],{"type":32,"tag":79,"props":1447,"children":1448},{"style":128},[1449],{"type":37,"value":172},{"type":32,"tag":79,"props":1451,"children":1452},{"style":128},[1453],{"type":37,"value":177},{"type":32,"tag":79,"props":1455,"children":1456},{"style":139},[1457],{"type":37,"value":545},{"type":32,"tag":79,"props":1459,"children":1460},{"class":81,"line":209},[1461,1466,1471,1475,1480,1485,1490],{"type":32,"tag":79,"props":1462,"children":1463},{"style":128},[1464],{"type":37,"value":1465},"  async",{"type":32,"tag":79,"props":1467,"children":1468},{"style":86},[1469],{"type":37,"value":1470}," fetch",{"type":32,"tag":79,"props":1472,"children":1473},{"style":139},[1474],{"type":37,"value":256},{"type":32,"tag":79,"props":1476,"children":1477},{"style":527},[1478],{"type":37,"value":1479},"request",{"type":32,"tag":79,"props":1481,"children":1482},{"style":139},[1483],{"type":37,"value":1484},", ",{"type":32,"tag":79,"props":1486,"children":1487},{"style":527},[1488],{"type":37,"value":1489},"env",{"type":32,"tag":79,"props":1491,"children":1492},{"style":139},[1493],{"type":37,"value":613},{"type":32,"tag":79,"props":1495,"children":1496},{"class":81,"line":218},[1497,1502,1507,1511,1515,1520],{"type":32,"tag":79,"props":1498,"children":1499},{"style":128},[1500],{"type":37,"value":1501},"    const",{"type":32,"tag":79,"props":1503,"children":1504},{"style":287},[1505],{"type":37,"value":1506}," url",{"type":32,"tag":79,"props":1508,"children":1509},{"style":128},[1510],{"type":37,"value":631},{"type":32,"tag":79,"props":1512,"children":1513},{"style":128},[1514],{"type":37,"value":636},{"type":32,"tag":79,"props":1516,"children":1517},{"style":86},[1518],{"type":37,"value":1519}," URL",{"type":32,"tag":79,"props":1521,"children":1522},{"style":139},[1523],{"type":37,"value":1524},"(request.url);\n",{"type":32,"tag":79,"props":1526,"children":1527},{"class":81,"line":227},[1528,1532,1537,1541,1546,1551,1555,1560],{"type":32,"tag":79,"props":1529,"children":1530},{"style":128},[1531],{"type":37,"value":1501},{"type":32,"tag":79,"props":1533,"children":1534},{"style":287},[1535],{"type":37,"value":1536}," productId",{"type":32,"tag":79,"props":1538,"children":1539},{"style":128},[1540],{"type":37,"value":631},{"type":32,"tag":79,"props":1542,"children":1543},{"style":139},[1544],{"type":37,"value":1545}," url.searchParams.",{"type":32,"tag":79,"props":1547,"children":1548},{"style":86},[1549],{"type":37,"value":1550},"get",{"type":32,"tag":79,"props":1552,"children":1553},{"style":139},[1554],{"type":37,"value":256},{"type":32,"tag":79,"props":1556,"children":1557},{"style":92},[1558],{"type":37,"value":1559},"'id'",{"type":32,"tag":79,"props":1561,"children":1562},{"style":139},[1563],{"type":37,"value":1564},");\n",{"type":32,"tag":79,"props":1566,"children":1567},{"class":81,"line":236},[1568],{"type":32,"tag":79,"props":1569,"children":1570},{"style":139},[1571],{"type":37,"value":1572},"    \n",{"type":32,"tag":79,"props":1574,"children":1575},{"class":81,"line":245},[1576,1580,1585,1589,1594,1599,1604],{"type":32,"tag":79,"props":1577,"children":1578},{"style":128},[1579],{"type":37,"value":1501},{"type":32,"tag":79,"props":1581,"children":1582},{"style":287},[1583],{"type":37,"value":1584}," cacheKey",{"type":32,"tag":79,"props":1586,"children":1587},{"style":128},[1588],{"type":37,"value":631},{"type":32,"tag":79,"props":1590,"children":1591},{"style":92},[1592],{"type":37,"value":1593}," `product:${",{"type":32,"tag":79,"props":1595,"children":1596},{"style":139},[1597],{"type":37,"value":1598},"productId",{"type":32,"tag":79,"props":1600,"children":1601},{"style":92},[1602],{"type":37,"value":1603},"}`",{"type":32,"tag":79,"props":1605,"children":1606},{"style":139},[1607],{"type":37,"value":142},{"type":32,"tag":79,"props":1609,"children":1610},{"class":81,"line":26},[1611,1616,1621,1626,1630,1635],{"type":32,"tag":79,"props":1612,"children":1613},{"style":128},[1614],{"type":37,"value":1615},"    await",{"type":32,"tag":79,"props":1617,"children":1618},{"style":139},[1619],{"type":37,"value":1620}," env.",{"type":32,"tag":79,"props":1622,"children":1623},{"style":287},[1624],{"type":37,"value":1625},"CACHE_KV",{"type":32,"tag":79,"props":1627,"children":1628},{"style":139},[1629],{"type":37,"value":722},{"type":32,"tag":79,"props":1631,"children":1632},{"style":86},[1633],{"type":37,"value":1634},"delete",{"type":32,"tag":79,"props":1636,"children":1637},{"style":139},[1638],{"type":37,"value":1639},"(cacheKey);\n",{"type":32,"tag":79,"props":1641,"children":1642},{"class":81,"line":298},[1643],{"type":32,"tag":79,"props":1644,"children":1645},{"style":139},[1646],{"type":37,"value":1572},{"type":32,"tag":79,"props":1648,"children":1649},{"class":81,"line":307},[1650,1655,1659,1664,1668,1673,1678,1683],{"type":32,"tag":79,"props":1651,"children":1652},{"style":128},[1653],{"type":37,"value":1654},"    return",{"type":32,"tag":79,"props":1656,"children":1657},{"style":128},[1658],{"type":37,"value":636},{"type":32,"tag":79,"props":1660,"children":1661},{"style":86},[1662],{"type":37,"value":1663}," Response",{"type":32,"tag":79,"props":1665,"children":1666},{"style":139},[1667],{"type":37,"value":256},{"type":32,"tag":79,"props":1669,"children":1670},{"style":92},[1671],{"type":37,"value":1672},"'Cache purged'",{"type":32,"tag":79,"props":1674,"children":1675},{"style":139},[1676],{"type":37,"value":1677},", { status: ",{"type":32,"tag":79,"props":1679,"children":1680},{"style":287},[1681],{"type":37,"value":1682},"200",{"type":32,"tag":79,"props":1684,"children":1685},{"style":139},[1686],{"type":37,"value":1687}," });\n",{"type":32,"tag":79,"props":1689,"children":1690},{"class":81,"line":316},[1691],{"type":32,"tag":79,"props":1692,"children":1693},{"style":139},[1694],{"type":37,"value":340},{"type":32,"tag":79,"props":1696,"children":1697},{"class":81,"line":325},[1698],{"type":32,"tag":79,"props":1699,"children":1700},{"style":139},[1701],{"type":37,"value":1702},"};\n",{"type":32,"tag":33,"props":1704,"children":1705},{},[1706],{"type":37,"value":1707},"Actualización de precio en panel admin → webhook → Cloudflare Worker → KV delete. TTL de caché edge se mantiene, solo productos modificados se invalidan.",{"type":32,"tag":49,"props":1709,"children":1711},{"id":1710},"monitoreo-de-rendimiento-y-prevención-de-regresiones",[1712],{"type":37,"value":1713},"Monitoreo de Rendimiento y Prevención de Regresiones",{"type":32,"tag":33,"props":1715,"children":1716},{},[1717],{"type":37,"value":1718},"Para RUM (Real User Monitoring) usamos Cloudflare Web Analytics + beacon personalizado de Navigation Timing:",{"type":32,"tag":69,"props":1720,"children":1722},{"code":1721,"language":117,"meta":16,"className":118,"style":16},"\u002F\u002F plugins\u002Fanalytics.client.ts\nexport default defineNuxtPlugin(() => {\n  if (typeof window !== 'undefined') {\n    window.addEventListener('load', () => {\n      const perfData = performance.getEntriesByType('navigation')[0];\n      const lcp = performance.getEntriesByType('largest-contentful-paint')[0];\n      \n      fetch('\u002Fapi\u002Fperf', {\n        method: 'POST',\n        body: JSON.stringify({\n          ttfb: perfData.responseStart - perfData.requestStart,\n          fcp: perfData.domContentLoadedEventEnd - perfData.fetchStart,\n          lcp: lcp?.renderTime || 0,\n          pathname: window.location.pathname\n        })\n      });\n    });\n  }\n});\n",[1723],{"type":32,"tag":40,"props":1724,"children":1725},{"__ignoreMap":16},[1726,1734,1762,1798,1833,1883,1928,1936,1958,1976,2002,2020,2037,2059,2067,2075,2083,2091,2098],{"type":32,"tag":79,"props":1727,"children":1728},{"class":81,"line":82},[1729],{"type":32,"tag":79,"props":1730,"children":1731},{"style":412},[1732],{"type":37,"value":1733},"\u002F\u002F plugins\u002Fanalytics.client.ts\n",{"type":32,"tag":79,"props":1735,"children":1736},{"class":81,"line":190},[1737,1741,1745,1749,1754,1758],{"type":32,"tag":79,"props":1738,"children":1739},{"style":128},[1740],{"type":37,"value":172},{"type":32,"tag":79,"props":1742,"children":1743},{"style":128},[1744],{"type":37,"value":177},{"type":32,"tag":79,"props":1746,"children":1747},{"style":86},[1748],{"type":37,"value":519},{"type":32,"tag":79,"props":1750,"children":1751},{"style":139},[1752],{"type":37,"value":1753},"(() ",{"type":32,"tag":79,"props":1755,"children":1756},{"style":128},[1757],{"type":37,"value":540},{"type":32,"tag":79,"props":1759,"children":1760},{"style":139},[1761],{"type":37,"value":545},{"type":32,"tag":79,"props":1763,"children":1764},{"class":81,"line":209},[1765,1770,1774,1779,1784,1789,1794],{"type":32,"tag":79,"props":1766,"children":1767},{"style":128},[1768],{"type":37,"value":1769},"  if",{"type":32,"tag":79,"props":1771,"children":1772},{"style":139},[1773],{"type":37,"value":588},{"type":32,"tag":79,"props":1775,"children":1776},{"style":128},[1777],{"type":37,"value":1778},"typeof",{"type":32,"tag":79,"props":1780,"children":1781},{"style":139},[1782],{"type":37,"value":1783}," window ",{"type":32,"tag":79,"props":1785,"children":1786},{"style":128},[1787],{"type":37,"value":1788},"!==",{"type":32,"tag":79,"props":1790,"children":1791},{"style":92},[1792],{"type":37,"value":1793}," 'undefined'",{"type":32,"tag":79,"props":1795,"children":1796},{"style":139},[1797],{"type":37,"value":613},{"type":32,"tag":79,"props":1799,"children":1800},{"class":81,"line":218},[1801,1806,1811,1815,1820,1825,1829],{"type":32,"tag":79,"props":1802,"children":1803},{"style":139},[1804],{"type":37,"value":1805},"    window.",{"type":32,"tag":79,"props":1807,"children":1808},{"style":86},[1809],{"type":37,"value":1810},"addEventListener",{"type":32,"tag":79,"props":1812,"children":1813},{"style":139},[1814],{"type":37,"value":256},{"type":32,"tag":79,"props":1816,"children":1817},{"style":92},[1818],{"type":37,"value":1819},"'load'",{"type":32,"tag":79,"props":1821,"children":1822},{"style":139},[1823],{"type":37,"value":1824},", () ",{"type":32,"tag":79,"props":1826,"children":1827},{"style":128},[1828],{"type":37,"value":540},{"type":32,"tag":79,"props":1830,"children":1831},{"style":139},[1832],{"type":37,"value":545},{"type":32,"tag":79,"props":1834,"children":1835},{"class":81,"line":227},[1836,1841,1846,1850,1855,1860,1864,1869,1874,1878],{"type":32,"tag":79,"props":1837,"children":1838},{"style":128},[1839],{"type":37,"value":1840},"      const",{"type":32,"tag":79,"props":1842,"children":1843},{"style":287},[1844],{"type":37,"value":1845}," perfData",{"type":32,"tag":79,"props":1847,"children":1848},{"style":128},[1849],{"type":37,"value":631},{"type":32,"tag":79,"props":1851,"children":1852},{"style":139},[1853],{"type":37,"value":1854}," performance.",{"type":32,"tag":79,"props":1856,"children":1857},{"style":86},[1858],{"type":37,"value":1859},"getEntriesByType",{"type":32,"tag":79,"props":1861,"children":1862},{"style":139},[1863],{"type":37,"value":256},{"type":32,"tag":79,"props":1865,"children":1866},{"style":92},[1867],{"type":37,"value":1868},"'navigation'",{"type":32,"tag":79,"props":1870,"children":1871},{"style":139},[1872],{"type":37,"value":1873},")[",{"type":32,"tag":79,"props":1875,"children":1876},{"style":287},[1877],{"type":37,"value":1046},{"type":32,"tag":79,"props":1879,"children":1880},{"style":139},[1881],{"type":37,"value":1882},"];\n",{"type":32,"tag":79,"props":1884,"children":1885},{"class":81,"line":236},[1886,1890,1895,1899,1903,1907,1911,1916,1920,1924],{"type":32,"tag":79,"props":1887,"children":1888},{"style":128},[1889],{"type":37,"value":1840},{"type":32,"tag":79,"props":1891,"children":1892},{"style":287},[1893],{"type":37,"value":1894}," lcp",{"type":32,"tag":79,"props":1896,"children":1897},{"style":128},[1898],{"type":37,"value":631},{"type":32,"tag":79,"props":1900,"children":1901},{"style":139},[1902],{"type":37,"value":1854},{"type":32,"tag":79,"props":1904,"children":1905},{"style":86},[1906],{"type":37,"value":1859},{"type":32,"tag":79,"props":1908,"children":1909},{"style":139},[1910],{"type":37,"value":256},{"type":32,"tag":79,"props":1912,"children":1913},{"style":92},[1914],{"type":37,"value":1915},"'largest-contentful-paint'",{"type":32,"tag":79,"props":1917,"children":1918},{"style":139},[1919],{"type":37,"value":1873},{"type":32,"tag":79,"props":1921,"children":1922},{"style":287},[1923],{"type":37,"value":1046},{"type":32,"tag":79,"props":1925,"children":1926},{"style":139},[1927],{"type":37,"value":1882},{"type":32,"tag":79,"props":1929,"children":1930},{"class":81,"line":245},[1931],{"type":32,"tag":79,"props":1932,"children":1933},{"style":139},[1934],{"type":37,"value":1935},"      \n",{"type":32,"tag":79,"props":1937,"children":1938},{"class":81,"line":26},[1939,1944,1948,1953],{"type":32,"tag":79,"props":1940,"children":1941},{"style":86},[1942],{"type":37,"value":1943},"      fetch",{"type":32,"tag":79,"props":1945,"children":1946},{"style":139},[1947],{"type":37,"value":256},{"type":32,"tag":79,"props":1949,"children":1950},{"style":92},[1951],{"type":37,"value":1952},"'\u002Fapi\u002Fperf'",{"type":32,"tag":79,"props":1954,"children":1955},{"style":139},[1956],{"type":37,"value":1957},", {\n",{"type":32,"tag":79,"props":1959,"children":1960},{"class":81,"line":298},[1961,1966,1971],{"type":32,"tag":79,"props":1962,"children":1963},{"style":139},[1964],{"type":37,"value":1965},"        method: ",{"type":32,"tag":79,"props":1967,"children":1968},{"style":92},[1969],{"type":37,"value":1970},"'POST'",{"type":32,"tag":79,"props":1972,"children":1973},{"style":139},[1974],{"type":37,"value":1975},",\n",{"type":32,"tag":79,"props":1977,"children":1978},{"class":81,"line":307},[1979,1984,1989,1993,1998],{"type":32,"tag":79,"props":1980,"children":1981},{"style":139},[1982],{"type":37,"value":1983},"        body: ",{"type":32,"tag":79,"props":1985,"children":1986},{"style":287},[1987],{"type":37,"value":1988},"JSON",{"type":32,"tag":79,"props":1990,"children":1991},{"style":139},[1992],{"type":37,"value":722},{"type":32,"tag":79,"props":1994,"children":1995},{"style":86},[1996],{"type":37,"value":1997},"stringify",{"type":32,"tag":79,"props":1999,"children":2000},{"style":139},[2001],{"type":37,"value":187},{"type":32,"tag":79,"props":2003,"children":2004},{"class":81,"line":316},[2005,2010,2015],{"type":32,"tag":79,"props":2006,"children":2007},{"style":139},[2008],{"type":37,"value":2009},"          ttfb: perfData.responseStart ",{"type":32,"tag":79,"props":2011,"children":2012},{"style":128},[2013],{"type":37,"value":2014},"-",{"type":32,"tag":79,"props":2016,"children":2017},{"style":139},[2018],{"type":37,"value":2019}," perfData.requestStart,\n",{"type":32,"tag":79,"props":2021,"children":2022},{"class":81,"line":325},[2023,2028,2032],{"type":32,"tag":79,"props":2024,"children":2025},{"style":139},[2026],{"type":37,"value":2027},"          fcp: perfData.domContentLoadedEventEnd ",{"type":32,"tag":79,"props":2029,"children":2030},{"style":128},[2031],{"type":37,"value":2014},{"type":32,"tag":79,"props":2033,"children":2034},{"style":139},[2035],{"type":37,"value":2036}," perfData.fetchStart,\n",{"type":32,"tag":79,"props":2038,"children":2039},{"class":81,"line":334},[2040,2045,2050,2055],{"type":32,"tag":79,"props":2041,"children":2042},{"style":139},[2043],{"type":37,"value":2044},"          lcp: lcp?.renderTime ",{"type":32,"tag":79,"props":2046,"children":2047},{"style":128},[2048],{"type":37,"value":2049},"||",{"type":32,"tag":79,"props":2051,"children":2052},{"style":287},[2053],{"type":37,"value":2054}," 0",{"type":32,"tag":79,"props":2056,"children":2057},{"style":139},[2058],{"type":37,"value":1975},{"type":32,"tag":79,"props":2060,"children":2061},{"class":81,"line":343},[2062],{"type":32,"tag":79,"props":2063,"children":2064},{"style":139},[2065],{"type":37,"value":2066},"          pathname: window.location.pathname\n",{"type":32,"tag":79,"props":2068,"children":2069},{"class":81,"line":802},[2070],{"type":32,"tag":79,"props":2071,"children":2072},{"style":139},[2073],{"type":37,"value":2074},"        })\n",{"type":32,"tag":79,"props":2076,"children":2077},{"class":81,"line":810},[2078],{"type":32,"tag":79,"props":2079,"children":2080},{"style":139},[2081],{"type":37,"value":2082},"      });\n",{"type":32,"tag":79,"props":2084,"children":2085},{"class":81,"line":818},[2086],{"type":32,"tag":79,"props":2087,"children":2088},{"style":139},[2089],{"type":37,"value":2090},"    });\n",{"type":32,"tag":79,"props":2092,"children":2093},{"class":81,"line":827},[2094],{"type":32,"tag":79,"props":2095,"children":2096},{"style":139},[2097],{"type":37,"value":340},{"type":32,"tag":79,"props":2099,"children":2101},{"class":81,"line":2100},19,[2102],{"type":32,"tag":79,"props":2103,"children":2104},{"style":139},[2105],{"type":37,"value":349},{"type":32,"tag":33,"props":2107,"children":2108},{},[2109],{"type":37,"value":2110},"Seguimiento P75 LCP diario en BigQuery. Si supera threshold de 2.5s, alerta en Slack. Pipeline CI\u002FCD con Lighthouse CI para verificar regressions:",{"type":32,"tag":69,"props":2112,"children":2116},{"code":2113,"language":2114,"meta":16,"className":2115,"style":16},"# .github\u002Fworkflows\u002Flighthouse.yml\n- name: Lighthouse CI\n  run: |\n    npm install -g @lhci\u002Fcli\n    lhci autorun --config=.\u002Flighthouserc.json\n","yaml","language-yaml shiki shiki-themes github-dark",[2117],{"type":32,"tag":40,"props":2118,"children":2119},{"__ignoreMap":16},[2120,2128,2150,2167,2175],{"type":32,"tag":79,"props":2121,"children":2122},{"class":81,"line":82},[2123],{"type":32,"tag":79,"props":2124,"children":2125},{"style":412},[2126],{"type":37,"value":2127},"# .github\u002Fworkflows\u002Flighthouse.yml\n",{"type":32,"tag":79,"props":2129,"children":2130},{"class":81,"line":190},[2131,2136,2141,2145],{"type":32,"tag":79,"props":2132,"children":2133},{"style":139},[2134],{"type":37,"value":2135},"- ",{"type":32,"tag":79,"props":2137,"children":2138},{"style":426},[2139],{"type":37,"value":2140},"name",{"type":32,"tag":79,"props":2142,"children":2143},{"style":139},[2144],{"type":37,"value":284},{"type":32,"tag":79,"props":2146,"children":2147},{"style":92},[2148],{"type":37,"value":2149},"Lighthouse CI\n",{"type":32,"tag":79,"props":2151,"children":2152},{"class":81,"line":209},[2153,2158,2162],{"type":32,"tag":79,"props":2154,"children":2155},{"style":426},[2156],{"type":37,"value":2157},"  run",{"type":32,"tag":79,"props":2159,"children":2160},{"style":139},[2161],{"type":37,"value":284},{"type":32,"tag":79,"props":2163,"children":2164},{"style":128},[2165],{"type":37,"value":2166},"|\n",{"type":32,"tag":79,"props":2168,"children":2169},{"class":81,"line":218},[2170],{"type":32,"tag":79,"props":2171,"children":2172},{"style":92},[2173],{"type":37,"value":2174},"    npm install -g @lhci\u002Fcli\n",{"type":32,"tag":79,"props":2176,"children":2177},{"class":81,"line":227},[2178],{"type":32,"tag":79,"props":2179,"children":2180},{"style":92},[2181],{"type":37,"value":2182},"    lhci autorun --config=.\u002Flighthouserc.json\n",{"type":32,"tag":33,"props":2184,"children":2185},{},[2186,2188,2194],{"type":37,"value":2187},"Assertion de LCP en ",{"type":32,"tag":40,"props":2189,"children":2191},{"className":2190},[],[2192],{"type":37,"value":2193},"lighthouserc.json",{"type":37,"value":113},{"type":32,"tag":69,"props":2196,"children":2200},{"code":2197,"language":2198,"meta":16,"className":2199,"style":16},"{\n  \"ci\": {\n    \"assert\": {\n      \"assertions\": {\n        \"largest-contentful-paint\": [\"error\", { \"maxNumericValue\": 2500 }]\n      }\n    }\n  }\n}\n","json","language-json shiki shiki-themes github-dark",[2201],{"type":32,"tag":40,"props":2202,"children":2203},{"__ignoreMap":16},[2204,2212,2225,2237,2249,2291,2298,2305,2312],{"type":32,"tag":79,"props":2205,"children":2206},{"class":81,"line":82},[2207],{"type":32,"tag":79,"props":2208,"children":2209},{"style":139},[2210],{"type":37,"value":2211},"{\n",{"type":32,"tag":79,"props":2213,"children":2214},{"class":81,"line":190},[2215,2220],{"type":32,"tag":79,"props":2216,"children":2217},{"style":287},[2218],{"type":37,"value":2219},"  \"ci\"",{"type":32,"tag":79,"props":2221,"children":2222},{"style":139},[2223],{"type":37,"value":2224},": {\n",{"type":32,"tag":79,"props":2226,"children":2227},{"class":81,"line":209},[2228,2233],{"type":32,"tag":79,"props":2229,"children":2230},{"style":287},[2231],{"type":37,"value":2232},"    \"assert\"",{"type":32,"tag":79,"props":2234,"children":2235},{"style":139},[2236],{"type":37,"value":2224},{"type":32,"tag":79,"props":2238,"children":2239},{"class":81,"line":218},[2240,2245],{"type":32,"tag":79,"props":2241,"children":2242},{"style":287},[2243],{"type":37,"value":2244},"      \"assertions\"",{"type":32,"tag":79,"props":2246,"children":2247},{"style":139},[2248],{"type":37,"value":2224},{"type":32,"tag":79,"props":2250,"children":2251},{"class":81,"line":227},[2252,2257,2262,2267,2272,2277,2281,2286],{"type":32,"tag":79,"props":2253,"children":2254},{"style":287},[2255],{"type":37,"value":2256},"        \"largest-contentful-paint\"",{"type":32,"tag":79,"props":2258,"children":2259},{"style":139},[2260],{"type":37,"value":2261},": [",{"type":32,"tag":79,"props":2263,"children":2264},{"style":92},[2265],{"type":37,"value":2266},"\"error\"",{"type":32,"tag":79,"props":2268,"children":2269},{"style":139},[2270],{"type":37,"value":2271},", { ",{"type":32,"tag":79,"props":2273,"children":2274},{"style":287},[2275],{"type":37,"value":2276},"\"maxNumericValue\"",{"type":32,"tag":79,"props":2278,"children":2279},{"style":139},[2280],{"type":37,"value":284},{"type":32,"tag":79,"props":2282,"children":2283},{"style":287},[2284],{"type":37,"value":2285},"2500",{"type":32,"tag":79,"props":2287,"children":2288},{"style":139},[2289],{"type":37,"value":2290}," }]\n",{"type":32,"tag":79,"props":2292,"children":2293},{"class":81,"line":236},[2294],{"type":32,"tag":79,"props":2295,"children":2296},{"style":139},[2297],{"type":37,"value":322},{"type":32,"tag":79,"props":2299,"children":2300},{"class":81,"line":245},[2301],{"type":32,"tag":79,"props":2302,"children":2303},{"style":139},[2304],{"type":37,"value":331},{"type":32,"tag":79,"props":2306,"children":2307},{"class":81,"line":26},[2308],{"type":32,"tag":79,"props":2309,"children":2310},{"style":139},[2311],{"type":37,"value":340},{"type":32,"tag":79,"props":2313,"children":2314},{"class":81,"line":298},[2315],{"type":32,"tag":79,"props":2316,"children":2317},{"style":139},[2318],{"type":37,"value":1068},{"type":32,"tag":33,"props":2320,"children":2321},{},[2322],{"type":37,"value":2323},"Si LCP supera 2.5s antes del deploy, el build falla. Regresiones se previenen en production.",{"type":32,"tag":49,"props":2325,"children":2327},{"id":2326},"trade-offs-y-edge-cases",[2328],{"type":37,"value":2329},"Trade-offs y Edge Cases",{"type":32,"tag":33,"props":2331,"children":2332},{},[2333,2335,2341],{"type":37,"value":2334},"Lazy hydration depende de scroll position. Si el usuario hace scroll rápido, retraso de hydration puede afectar interactividad. Mitigación: ",{"type":32,"tag":40,"props":2336,"children":2338},{"className":2337},[],[2339],{"type":37,"value":2340},"rootMargin: '100px'",{"type":37,"value":2342}," en Intersection Observer, trigger 100px antes de entrar en viewport.",{"type":32,"tag":33,"props":2344,"children":2345},{},[2346,2351,2353,2359,2361,2366],{"type":32,"tag":40,"props":2347,"children":2349},{"className":2348},[],[2350],{"type":37,"value":45},{"type":37,"value":2352}," en grid layouts puede causar cambio de column count y aumento de CLS. Requerimos ",{"type":32,"tag":40,"props":2354,"children":2356},{"className":2355},[],[2357],{"type":37,"value":2358},"grid-template-columns",{"type":37,"value":2360}," fija + combinación ",{"type":32,"tag":40,"props":2362,"children":2364},{"className":2363},[],[2365],{"type":37,"value":1077},{"type":37,"value":722},{"type":32,"tag":33,"props":2368,"children":2369},{},[2370],{"type":37,"value":2371},"Riesgo de inconsistencia de precios con stale-while-revalidate: Usuario A ve precio viejo, usuario B precio nuevo. Decisión según requirement business: Para e-commerce, 60 segundos de ventana stale es aceptable; para fintech, no.",{"type":32,"tag":33,"props":2373,"children":2374},{},[2375],{"type":37,"value":2376},"Control de licencia de fuentes auto-alojadas requerido. Google Fonts usa SIL Open Font License (libre), pero fuentes comerciales necesitan verificar acuerdo de licencia.",{"type":32,"tag":33,"props":2378,"children":2379},{},[2380],{"type":37,"value":2381},"Estas cuatro intervenciones mejoraron LCP en 80%. El sistema de reactividad de Vue 3 de Nuxt 3 es ideal para lazy hydration. La red edge de Cloudflare Pages es suficiente como CDN, pero para contenido dinámico la combinación KV + Workers proporciona granularidad de caché. RUM + Lighthouse CI en production es obligatorio para prevención de regressions.",{"type":32,"tag":2383,"props":2384,"children":2385},"style",{},[2386],{"type":37,"value":2387},"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":209,"depth":209,"links":2389},[2390,2391,2394,2395,2398,2399],{"id":51,"depth":190,"text":54},{"id":370,"depth":190,"text":373,"children":2392},[2393],{"id":854,"depth":209,"text":857},{"id":971,"depth":190,"text":974},{"id":1336,"depth":190,"text":1339,"children":2396},[2397],{"id":1419,"depth":209,"text":1422},{"id":1710,"depth":190,"text":1713},{"id":2326,"depth":190,"text":2329},"markdown","content:es:tech:nuxt-3-cloudflare-pages-lcp-2-segundos.md","content","es\u002Ftech\u002Fnuxt-3-cloudflare-pages-lcp-2-segundos.md","es\u002Ftech\u002Fnuxt-3-cloudflare-pages-lcp-2-segundos","md",1782079490406]