[{"data":1,"prerenderedAt":2449},["ShallowReactive",2],{"article-alternates":3,"article-\u002Fes\u002Ftech\u002Fdisminuir-latencia-personalizacion-40ms-edge-ssr":13},{"i18nKey":4,"paths":5},"tech-003-2026-06",{"de":6,"en":7,"es":8,"fr":9,"it":10,"ru":11,"tr":12},"\u002Fde\u002Ftech\u002Fedge-ssr-personalisierung-latenz-40ms","\u002Fen\u002Ftech\u002Fedge-ssr-personalization-latency","\u002Fes\u002Ftech\u002Fedge-ssr-personalizacion-latencia-40ms","\u002Ffr\u002Ftech\u002Fedge-ssr-personnalisation-latence-40ms","\u002Fit\u002Ftech\u002Fridurre-latenza-personalizzazione-40ms-edge-ssr","\u002Fru\u002Ftech\u002Fedge-ssr-personalizasyon-40ms","\u002Ftr\u002Ftech\u002Fedge-ssr-ile-personalizasyon-latencysini-40msye-dusurmek",{"_path":14,"_dir":15,"_draft":16,"_partial":16,"_locale":17,"title":18,"description":19,"publishedAt":20,"modifiedAt":20,"category":15,"i18nKey":4,"tags":21,"readingTime":27,"author":28,"body":29,"_type":2443,"_id":2444,"_source":2445,"_file":2446,"_stem":2447,"_extension":2448},"\u002Fes\u002Ftech\u002Fdisminuir-latencia-personalizacion-40ms-edge-ssr","tech",false,"","Reducir latencia de personalización a 40ms con Edge SSR","Con Cloudflare Workers y Vercel Edge, el SSR en edge reduce personalización de 250ms a 40ms. Arquitectura KV, ejemplos de código y análisis de tradeoffs.","2026-06-21",[22,23,24,25,26],"edge-computing","ssr","personalizacion","cloudflare-workers","vercel-edge",9,"Roibase",{"type":30,"children":31,"toc":2433},"root",[32,40,47,52,57,172,177,182,189,194,817,829,842,848,868,1295,1311,1482,1487,1493,1498,1566,1578,1583,1756,1761,1767,1772,1914,1919,1924,2051,2056,2062,2067,2241,2254,2259,2301,2306,2422,2427],{"type":33,"tag":34,"props":35,"children":36},"element","p",{},[37],{"type":38,"value":39},"text","En tiendas de comercio electrónico modernas, la personalización ya no es un diferenciador — es una expectativa. Pero los usuarios no quieren esperar 250ms cada vez que hacen clic. La arquitectura SSR tradicional (server-side rendering) introduce latencia de 150-300ms en promedio entre usuario y servidor origen: búsqueda DNS, handshake TCP, negociación TLS, tiempo de procesamiento en origen. Edge SSR reduce este retraso a 40-60ms combinando proximidad geográfica y almacenamiento KV global. Plataformas como Cloudflare Workers y Vercel Edge Functions ofrecen runtimes edge — nuestro trabajo es trasladar la lógica de personalización allí y construir el almacén KV correctamente.",{"type":33,"tag":41,"props":42,"children":44},"h2",{"id":43},"diferencia-de-latencia-edge-ssr-vs-ssr-de-origen",[45],{"type":38,"value":46},"Diferencia de latencia: Edge SSR vs. SSR de origen",{"type":33,"tag":34,"props":48,"children":49},{},[50],{"type":38,"value":51},"En SSR tradicional, la solicitud sigue esta ruta: usuario → CDN (miss de caché) → servidor origen (consulta de DB + rendering) → respuesta. Tiempo total promedio: 250ms, percentil 95: 450ms. En Edge SSR, la solicitud termina en la ubicación edge: usuario → worker edge (búsqueda KV + rendering) → respuesta. Promedio: 40ms, percentil 95: 80ms.",{"type":33,"tag":34,"props":53,"children":54},{},[55],{"type":38,"value":56},"Fuentes de latencia:",{"type":33,"tag":58,"props":59,"children":60},"table",{},[61,85],{"type":33,"tag":62,"props":63,"children":64},"thead",{},[65],{"type":33,"tag":66,"props":67,"children":68},"tr",{},[69,75,80],{"type":33,"tag":70,"props":71,"children":72},"th",{},[73],{"type":38,"value":74},"Paso",{"type":33,"tag":70,"props":76,"children":77},{},[78],{"type":38,"value":79},"SSR de origen",{"type":33,"tag":70,"props":81,"children":82},{},[83],{"type":38,"value":84},"Edge SSR",{"type":33,"tag":86,"props":87,"children":88},"tbody",{},[89,108,126,144],{"type":33,"tag":66,"props":90,"children":91},{},[92,98,103],{"type":33,"tag":93,"props":94,"children":95},"td",{},[96],{"type":38,"value":97},"DNS + TLS",{"type":33,"tag":93,"props":99,"children":100},{},[101],{"type":38,"value":102},"50ms",{"type":33,"tag":93,"props":104,"children":105},{},[106],{"type":38,"value":107},"15ms (proximidad edge)",{"type":33,"tag":66,"props":109,"children":110},{},[111,116,121],{"type":33,"tag":93,"props":112,"children":113},{},[114],{"type":38,"value":115},"Network RTT",{"type":33,"tag":93,"props":117,"children":118},{},[119],{"type":38,"value":120},"120ms (intercontinental)",{"type":33,"tag":93,"props":122,"children":123},{},[124],{"type":38,"value":125},"10ms (distancia a edge)",{"type":33,"tag":66,"props":127,"children":128},{},[129,134,139],{"type":33,"tag":93,"props":130,"children":131},{},[132],{"type":38,"value":133},"Compute",{"type":33,"tag":93,"props":135,"children":136},{},[137],{"type":38,"value":138},"80ms (origen)",{"type":33,"tag":93,"props":140,"children":141},{},[142],{"type":38,"value":143},"15ms (V8 isolate)",{"type":33,"tag":66,"props":145,"children":146},{},[147,156,164],{"type":33,"tag":93,"props":148,"children":149},{},[150],{"type":33,"tag":151,"props":152,"children":153},"strong",{},[154],{"type":38,"value":155},"Total",{"type":33,"tag":93,"props":157,"children":158},{},[159],{"type":33,"tag":151,"props":160,"children":161},{},[162],{"type":38,"value":163},"250ms",{"type":33,"tag":93,"props":165,"children":166},{},[167],{"type":33,"tag":151,"props":168,"children":169},{},[170],{"type":38,"value":171},"40ms",{"type":33,"tag":34,"props":173,"children":174},{},[175],{"type":38,"value":176},"Esta reducción del 84% afecta directamente a LCP (Largest Contentful Paint) y CLS (Cumulative Layout Shift). Según el informe Core Web Vitals 2025 de Google, cada 100ms de mejora en LCP genera un aumento del 3.5% en tasa de rebote — ganar 210ms significa una mejora de conversión del 7.3% (cálculo: 210\u002F100 × 3.5).",{"type":33,"tag":34,"props":178,"children":179},{},[180],{"type":38,"value":181},"Tradeoff: el runtime edge no es Node.js sino un V8 isolate — no puedes usar módulos nativos, sistema de archivos ni procesos secundarios. La lógica de personalización debe ser completamente stateless y ligera.",{"type":33,"tag":183,"props":184,"children":186},"h3",{"id":185},"arquitectura-edge-ssr-con-cloudflare-workers",[187],{"type":38,"value":188},"Arquitectura Edge SSR con Cloudflare Workers",{"type":33,"tag":34,"props":190,"children":191},{},[192],{"type":38,"value":193},"Cloudflare Workers enruta cada solicitud a una de las 300+ ubicaciones edge en su red global. La solicitud se procesa en edge de esta forma:",{"type":33,"tag":195,"props":196,"children":200},"pre",{"className":197,"code":198,"language":199,"meta":17,"style":17},"language-javascript shiki shiki-themes github-dark","\u002F\u002F worker.js — Cloudflare Workers\nexport default {\n  async fetch(request, env) {\n    const url = new URL(request.url);\n    const userId = request.headers.get('x-user-id'); \u002F\u002F parseado desde JWT\n\n    \u002F\u002F Obtener segmento de usuario de KV\n    const segment = await env.USER_SEGMENTS.get(userId);\n    const prefs = segment ? JSON.parse(segment) : { tier: 'free' };\n\n    \u002F\u002F Renderizar HTML personalizado\n    const html = renderHTML(prefs, url.pathname);\n\n    return new Response(html, {\n      headers: {\n        'content-type': 'text\u002Fhtml;charset=UTF-8',\n        'cache-control': 'public, s-maxage=60', \u002F\u002F caché edge 60s\n      },\n    });\n  },\n};\n\nfunction renderHTML(prefs, path) {\n  const hero = prefs.tier === 'premium'\n    ? '\u003Ch1>Contenido Premium\u003C\u002Fh1>'\n    : '\u003Ch1>Contenido Gratuito\u003C\u002Fh1>';\n  return `\u003C!DOCTYPE html>\u003Chtml>\u003Cbody>${hero}\u003Cp>Ruta: ${path}\u003C\u002Fp>\u003C\u002Fbody>\u003C\u002Fhtml>`;\n}\n","javascript",[201],{"type":33,"tag":202,"props":203,"children":204},"code",{"__ignoreMap":17},[205,217,238,279,314,361,371,380,426,491,499,508,535,543,566,575,599,626,635,644,653,662,670,705,738,752,771,808],{"type":33,"tag":206,"props":207,"children":210},"span",{"class":208,"line":209},"line",1,[211],{"type":33,"tag":206,"props":212,"children":214},{"style":213},"--shiki-default:#6A737D",[215],{"type":38,"value":216},"\u002F\u002F worker.js — Cloudflare Workers\n",{"type":33,"tag":206,"props":218,"children":220},{"class":208,"line":219},2,[221,227,232],{"type":33,"tag":206,"props":222,"children":224},{"style":223},"--shiki-default:#F97583",[225],{"type":38,"value":226},"export",{"type":33,"tag":206,"props":228,"children":229},{"style":223},[230],{"type":38,"value":231}," default",{"type":33,"tag":206,"props":233,"children":235},{"style":234},"--shiki-default:#E1E4E8",[236],{"type":38,"value":237}," {\n",{"type":33,"tag":206,"props":239,"children":241},{"class":208,"line":240},3,[242,247,253,258,264,269,274],{"type":33,"tag":206,"props":243,"children":244},{"style":223},[245],{"type":38,"value":246},"  async",{"type":33,"tag":206,"props":248,"children":250},{"style":249},"--shiki-default:#B392F0",[251],{"type":38,"value":252}," fetch",{"type":33,"tag":206,"props":254,"children":255},{"style":234},[256],{"type":38,"value":257},"(",{"type":33,"tag":206,"props":259,"children":261},{"style":260},"--shiki-default:#FFAB70",[262],{"type":38,"value":263},"request",{"type":33,"tag":206,"props":265,"children":266},{"style":234},[267],{"type":38,"value":268},", ",{"type":33,"tag":206,"props":270,"children":271},{"style":260},[272],{"type":38,"value":273},"env",{"type":33,"tag":206,"props":275,"children":276},{"style":234},[277],{"type":38,"value":278},") {\n",{"type":33,"tag":206,"props":280,"children":282},{"class":208,"line":281},4,[283,288,294,299,304,309],{"type":33,"tag":206,"props":284,"children":285},{"style":223},[286],{"type":38,"value":287},"    const",{"type":33,"tag":206,"props":289,"children":291},{"style":290},"--shiki-default:#79B8FF",[292],{"type":38,"value":293}," url",{"type":33,"tag":206,"props":295,"children":296},{"style":223},[297],{"type":38,"value":298}," =",{"type":33,"tag":206,"props":300,"children":301},{"style":223},[302],{"type":38,"value":303}," new",{"type":33,"tag":206,"props":305,"children":306},{"style":249},[307],{"type":38,"value":308}," URL",{"type":33,"tag":206,"props":310,"children":311},{"style":234},[312],{"type":38,"value":313},"(request.url);\n",{"type":33,"tag":206,"props":315,"children":317},{"class":208,"line":316},5,[318,322,327,331,336,341,345,351,356],{"type":33,"tag":206,"props":319,"children":320},{"style":223},[321],{"type":38,"value":287},{"type":33,"tag":206,"props":323,"children":324},{"style":290},[325],{"type":38,"value":326}," userId",{"type":33,"tag":206,"props":328,"children":329},{"style":223},[330],{"type":38,"value":298},{"type":33,"tag":206,"props":332,"children":333},{"style":234},[334],{"type":38,"value":335}," request.headers.",{"type":33,"tag":206,"props":337,"children":338},{"style":249},[339],{"type":38,"value":340},"get",{"type":33,"tag":206,"props":342,"children":343},{"style":234},[344],{"type":38,"value":257},{"type":33,"tag":206,"props":346,"children":348},{"style":347},"--shiki-default:#9ECBFF",[349],{"type":38,"value":350},"'x-user-id'",{"type":33,"tag":206,"props":352,"children":353},{"style":234},[354],{"type":38,"value":355},"); ",{"type":33,"tag":206,"props":357,"children":358},{"style":213},[359],{"type":38,"value":360},"\u002F\u002F parseado desde JWT\n",{"type":33,"tag":206,"props":362,"children":364},{"class":208,"line":363},6,[365],{"type":33,"tag":206,"props":366,"children":368},{"emptyLinePlaceholder":367},true,[369],{"type":38,"value":370},"\n",{"type":33,"tag":206,"props":372,"children":374},{"class":208,"line":373},7,[375],{"type":33,"tag":206,"props":376,"children":377},{"style":213},[378],{"type":38,"value":379},"    \u002F\u002F Obtener segmento de usuario de KV\n",{"type":33,"tag":206,"props":381,"children":383},{"class":208,"line":382},8,[384,388,393,397,402,407,412,417,421],{"type":33,"tag":206,"props":385,"children":386},{"style":223},[387],{"type":38,"value":287},{"type":33,"tag":206,"props":389,"children":390},{"style":290},[391],{"type":38,"value":392}," segment",{"type":33,"tag":206,"props":394,"children":395},{"style":223},[396],{"type":38,"value":298},{"type":33,"tag":206,"props":398,"children":399},{"style":223},[400],{"type":38,"value":401}," await",{"type":33,"tag":206,"props":403,"children":404},{"style":234},[405],{"type":38,"value":406}," env.",{"type":33,"tag":206,"props":408,"children":409},{"style":290},[410],{"type":38,"value":411},"USER_SEGMENTS",{"type":33,"tag":206,"props":413,"children":414},{"style":234},[415],{"type":38,"value":416},".",{"type":33,"tag":206,"props":418,"children":419},{"style":249},[420],{"type":38,"value":340},{"type":33,"tag":206,"props":422,"children":423},{"style":234},[424],{"type":38,"value":425},"(userId);\n",{"type":33,"tag":206,"props":427,"children":428},{"class":208,"line":27},[429,433,438,442,447,452,457,461,466,471,476,481,486],{"type":33,"tag":206,"props":430,"children":431},{"style":223},[432],{"type":38,"value":287},{"type":33,"tag":206,"props":434,"children":435},{"style":290},[436],{"type":38,"value":437}," prefs",{"type":33,"tag":206,"props":439,"children":440},{"style":223},[441],{"type":38,"value":298},{"type":33,"tag":206,"props":443,"children":444},{"style":234},[445],{"type":38,"value":446}," segment ",{"type":33,"tag":206,"props":448,"children":449},{"style":223},[450],{"type":38,"value":451},"?",{"type":33,"tag":206,"props":453,"children":454},{"style":290},[455],{"type":38,"value":456}," JSON",{"type":33,"tag":206,"props":458,"children":459},{"style":234},[460],{"type":38,"value":416},{"type":33,"tag":206,"props":462,"children":463},{"style":249},[464],{"type":38,"value":465},"parse",{"type":33,"tag":206,"props":467,"children":468},{"style":234},[469],{"type":38,"value":470},"(segment) ",{"type":33,"tag":206,"props":472,"children":473},{"style":223},[474],{"type":38,"value":475},":",{"type":33,"tag":206,"props":477,"children":478},{"style":234},[479],{"type":38,"value":480}," { tier: ",{"type":33,"tag":206,"props":482,"children":483},{"style":347},[484],{"type":38,"value":485},"'free'",{"type":33,"tag":206,"props":487,"children":488},{"style":234},[489],{"type":38,"value":490}," };\n",{"type":33,"tag":206,"props":492,"children":494},{"class":208,"line":493},10,[495],{"type":33,"tag":206,"props":496,"children":497},{"emptyLinePlaceholder":367},[498],{"type":38,"value":370},{"type":33,"tag":206,"props":500,"children":502},{"class":208,"line":501},11,[503],{"type":33,"tag":206,"props":504,"children":505},{"style":213},[506],{"type":38,"value":507},"    \u002F\u002F Renderizar HTML personalizado\n",{"type":33,"tag":206,"props":509,"children":511},{"class":208,"line":510},12,[512,516,521,525,530],{"type":33,"tag":206,"props":513,"children":514},{"style":223},[515],{"type":38,"value":287},{"type":33,"tag":206,"props":517,"children":518},{"style":290},[519],{"type":38,"value":520}," html",{"type":33,"tag":206,"props":522,"children":523},{"style":223},[524],{"type":38,"value":298},{"type":33,"tag":206,"props":526,"children":527},{"style":249},[528],{"type":38,"value":529}," renderHTML",{"type":33,"tag":206,"props":531,"children":532},{"style":234},[533],{"type":38,"value":534},"(prefs, url.pathname);\n",{"type":33,"tag":206,"props":536,"children":538},{"class":208,"line":537},13,[539],{"type":33,"tag":206,"props":540,"children":541},{"emptyLinePlaceholder":367},[542],{"type":38,"value":370},{"type":33,"tag":206,"props":544,"children":546},{"class":208,"line":545},14,[547,552,556,561],{"type":33,"tag":206,"props":548,"children":549},{"style":223},[550],{"type":38,"value":551},"    return",{"type":33,"tag":206,"props":553,"children":554},{"style":223},[555],{"type":38,"value":303},{"type":33,"tag":206,"props":557,"children":558},{"style":249},[559],{"type":38,"value":560}," Response",{"type":33,"tag":206,"props":562,"children":563},{"style":234},[564],{"type":38,"value":565},"(html, {\n",{"type":33,"tag":206,"props":567,"children":569},{"class":208,"line":568},15,[570],{"type":33,"tag":206,"props":571,"children":572},{"style":234},[573],{"type":38,"value":574},"      headers: {\n",{"type":33,"tag":206,"props":576,"children":578},{"class":208,"line":577},16,[579,584,589,594],{"type":33,"tag":206,"props":580,"children":581},{"style":347},[582],{"type":38,"value":583},"        'content-type'",{"type":33,"tag":206,"props":585,"children":586},{"style":234},[587],{"type":38,"value":588},": ",{"type":33,"tag":206,"props":590,"children":591},{"style":347},[592],{"type":38,"value":593},"'text\u002Fhtml;charset=UTF-8'",{"type":33,"tag":206,"props":595,"children":596},{"style":234},[597],{"type":38,"value":598},",\n",{"type":33,"tag":206,"props":600,"children":602},{"class":208,"line":601},17,[603,608,612,617,621],{"type":33,"tag":206,"props":604,"children":605},{"style":347},[606],{"type":38,"value":607},"        'cache-control'",{"type":33,"tag":206,"props":609,"children":610},{"style":234},[611],{"type":38,"value":588},{"type":33,"tag":206,"props":613,"children":614},{"style":347},[615],{"type":38,"value":616},"'public, s-maxage=60'",{"type":33,"tag":206,"props":618,"children":619},{"style":234},[620],{"type":38,"value":268},{"type":33,"tag":206,"props":622,"children":623},{"style":213},[624],{"type":38,"value":625},"\u002F\u002F caché edge 60s\n",{"type":33,"tag":206,"props":627,"children":629},{"class":208,"line":628},18,[630],{"type":33,"tag":206,"props":631,"children":632},{"style":234},[633],{"type":38,"value":634},"      },\n",{"type":33,"tag":206,"props":636,"children":638},{"class":208,"line":637},19,[639],{"type":33,"tag":206,"props":640,"children":641},{"style":234},[642],{"type":38,"value":643},"    });\n",{"type":33,"tag":206,"props":645,"children":647},{"class":208,"line":646},20,[648],{"type":33,"tag":206,"props":649,"children":650},{"style":234},[651],{"type":38,"value":652},"  },\n",{"type":33,"tag":206,"props":654,"children":656},{"class":208,"line":655},21,[657],{"type":33,"tag":206,"props":658,"children":659},{"style":234},[660],{"type":38,"value":661},"};\n",{"type":33,"tag":206,"props":663,"children":665},{"class":208,"line":664},22,[666],{"type":33,"tag":206,"props":667,"children":668},{"emptyLinePlaceholder":367},[669],{"type":38,"value":370},{"type":33,"tag":206,"props":671,"children":673},{"class":208,"line":672},23,[674,679,683,687,692,696,701],{"type":33,"tag":206,"props":675,"children":676},{"style":223},[677],{"type":38,"value":678},"function",{"type":33,"tag":206,"props":680,"children":681},{"style":249},[682],{"type":38,"value":529},{"type":33,"tag":206,"props":684,"children":685},{"style":234},[686],{"type":38,"value":257},{"type":33,"tag":206,"props":688,"children":689},{"style":260},[690],{"type":38,"value":691},"prefs",{"type":33,"tag":206,"props":693,"children":694},{"style":234},[695],{"type":38,"value":268},{"type":33,"tag":206,"props":697,"children":698},{"style":260},[699],{"type":38,"value":700},"path",{"type":33,"tag":206,"props":702,"children":703},{"style":234},[704],{"type":38,"value":278},{"type":33,"tag":206,"props":706,"children":708},{"class":208,"line":707},24,[709,714,719,723,728,733],{"type":33,"tag":206,"props":710,"children":711},{"style":223},[712],{"type":38,"value":713},"  const",{"type":33,"tag":206,"props":715,"children":716},{"style":290},[717],{"type":38,"value":718}," hero",{"type":33,"tag":206,"props":720,"children":721},{"style":223},[722],{"type":38,"value":298},{"type":33,"tag":206,"props":724,"children":725},{"style":234},[726],{"type":38,"value":727}," prefs.tier ",{"type":33,"tag":206,"props":729,"children":730},{"style":223},[731],{"type":38,"value":732},"===",{"type":33,"tag":206,"props":734,"children":735},{"style":347},[736],{"type":38,"value":737}," 'premium'\n",{"type":33,"tag":206,"props":739,"children":741},{"class":208,"line":740},25,[742,747],{"type":33,"tag":206,"props":743,"children":744},{"style":223},[745],{"type":38,"value":746},"    ?",{"type":33,"tag":206,"props":748,"children":749},{"style":347},[750],{"type":38,"value":751}," '\u003Ch1>Contenido Premium\u003C\u002Fh1>'\n",{"type":33,"tag":206,"props":753,"children":755},{"class":208,"line":754},26,[756,761,766],{"type":33,"tag":206,"props":757,"children":758},{"style":223},[759],{"type":38,"value":760},"    :",{"type":33,"tag":206,"props":762,"children":763},{"style":347},[764],{"type":38,"value":765}," '\u003Ch1>Contenido Gratuito\u003C\u002Fh1>'",{"type":33,"tag":206,"props":767,"children":768},{"style":234},[769],{"type":38,"value":770},";\n",{"type":33,"tag":206,"props":772,"children":774},{"class":208,"line":773},27,[775,780,785,790,795,799,804],{"type":33,"tag":206,"props":776,"children":777},{"style":223},[778],{"type":38,"value":779},"  return",{"type":33,"tag":206,"props":781,"children":782},{"style":347},[783],{"type":38,"value":784}," `\u003C!DOCTYPE html>\u003Chtml>\u003Cbody>${",{"type":33,"tag":206,"props":786,"children":787},{"style":234},[788],{"type":38,"value":789},"hero",{"type":33,"tag":206,"props":791,"children":792},{"style":347},[793],{"type":38,"value":794},"}\u003Cp>Ruta: ${",{"type":33,"tag":206,"props":796,"children":797},{"style":234},[798],{"type":38,"value":700},{"type":33,"tag":206,"props":800,"children":801},{"style":347},[802],{"type":38,"value":803},"}\u003C\u002Fp>\u003C\u002Fbody>\u003C\u002Fhtml>`",{"type":33,"tag":206,"props":805,"children":806},{"style":234},[807],{"type":38,"value":770},{"type":33,"tag":206,"props":809,"children":811},{"class":208,"line":810},28,[812],{"type":33,"tag":206,"props":813,"children":814},{"style":234},[815],{"type":38,"value":816},"}\n",{"type":33,"tag":34,"props":818,"children":819},{},[820,822,827],{"type":38,"value":821},"Este código obtiene el segmento de usuario de KV en cada solicitud desde el namespace ",{"type":33,"tag":202,"props":823,"children":825},{"className":824},[],[826],{"type":38,"value":411},{"type":38,"value":828},". La latencia de lectura de KV promedia 15ms globalmente (benchmark Cloudflare 2025). Como alternativa, puedes usar Durable Objects, pero para cargas de trabajo heavy-read, KV es más económico (KV: $0.50 por millón de lecturas, DO: $0.15 por millón de solicitudes + compute).",{"type":33,"tag":34,"props":830,"children":831},{},[832,834,840],{"type":38,"value":833},"El límite de tiempo CPU en Workers es 50ms — con rendering complejo puedes excederlo. La solución: pre-renderizar plantillas como HTML en KV, el worker solo hace reemplazos de cadenas. Por ejemplo, el worker reemplaza el placeholder ",{"type":33,"tag":202,"props":835,"children":837},{"className":836},[],[838],{"type":38,"value":839},"{USER_NAME}",{"type":38,"value":841}," mientras la plantilla vive en KV.",{"type":33,"tag":41,"props":843,"children":845},{"id":844},"integración-vercel-edge-functions-con-nextjs-middleware",[846],{"type":38,"value":847},"Integración Vercel Edge Functions con Next.js Middleware",{"type":33,"tag":34,"props":849,"children":850},{},[851,853,859,861,867],{"type":38,"value":852},"Vercel Edge Functions integra nativamente con Next.js 13+ — puedes interceptar solicitudes y personalizarlas usando el patrón middleware. En lugar de ",{"type":33,"tag":202,"props":854,"children":856},{"className":855},[],[857],{"type":38,"value":858},"getServerSideProps",{"type":38,"value":860},", usas ",{"type":33,"tag":202,"props":862,"children":864},{"className":863},[],[865],{"type":38,"value":866},"middleware.ts",{"type":38,"value":475},{"type":33,"tag":195,"props":869,"children":873},{"className":870,"code":871,"language":872,"meta":17,"style":17},"language-typescript shiki shiki-themes github-dark","\u002F\u002F middleware.ts — Vercel Edge\nimport { NextRequest, NextResponse } from 'next\u002Fserver';\n\nexport async function middleware(req: NextRequest) {\n  const userId = req.cookies.get('user_id')?.value;\n  if (!userId) return NextResponse.next();\n\n  \u002F\u002F Obtener segmento de Edge Config (KV de Vercel)\n  const segment = await fetch(`https:\u002F\u002Fedge-config.vercel.com\u002F${userId}`).then(r => r.json());\n\n  \u002F\u002F Agregar información de segmento a header, component de página lo lee\n  const response = NextResponse.next();\n  response.headers.set('x-user-segment', segment.tier);\n  return response;\n}\n\nexport const config = {\n  matcher: ['\u002Fproduct\u002F:path*', '\u002Fcategory\u002F:path*'],\n};\n","typescript",[874],{"type":33,"tag":202,"props":875,"children":876},{"__ignoreMap":17},[877,885,912,919,963,1001,1044,1051,1059,1140,1147,1155,1183,1210,1222,1229,1236,1261,1288],{"type":33,"tag":206,"props":878,"children":879},{"class":208,"line":209},[880],{"type":33,"tag":206,"props":881,"children":882},{"style":213},[883],{"type":38,"value":884},"\u002F\u002F middleware.ts — Vercel Edge\n",{"type":33,"tag":206,"props":886,"children":887},{"class":208,"line":219},[888,893,898,903,908],{"type":33,"tag":206,"props":889,"children":890},{"style":223},[891],{"type":38,"value":892},"import",{"type":33,"tag":206,"props":894,"children":895},{"style":234},[896],{"type":38,"value":897}," { NextRequest, NextResponse } ",{"type":33,"tag":206,"props":899,"children":900},{"style":223},[901],{"type":38,"value":902},"from",{"type":33,"tag":206,"props":904,"children":905},{"style":347},[906],{"type":38,"value":907}," 'next\u002Fserver'",{"type":33,"tag":206,"props":909,"children":910},{"style":234},[911],{"type":38,"value":770},{"type":33,"tag":206,"props":913,"children":914},{"class":208,"line":240},[915],{"type":33,"tag":206,"props":916,"children":917},{"emptyLinePlaceholder":367},[918],{"type":38,"value":370},{"type":33,"tag":206,"props":920,"children":921},{"class":208,"line":281},[922,926,931,936,941,945,950,954,959],{"type":33,"tag":206,"props":923,"children":924},{"style":223},[925],{"type":38,"value":226},{"type":33,"tag":206,"props":927,"children":928},{"style":223},[929],{"type":38,"value":930}," async",{"type":33,"tag":206,"props":932,"children":933},{"style":223},[934],{"type":38,"value":935}," function",{"type":33,"tag":206,"props":937,"children":938},{"style":249},[939],{"type":38,"value":940}," middleware",{"type":33,"tag":206,"props":942,"children":943},{"style":234},[944],{"type":38,"value":257},{"type":33,"tag":206,"props":946,"children":947},{"style":260},[948],{"type":38,"value":949},"req",{"type":33,"tag":206,"props":951,"children":952},{"style":223},[953],{"type":38,"value":475},{"type":33,"tag":206,"props":955,"children":956},{"style":249},[957],{"type":38,"value":958}," NextRequest",{"type":33,"tag":206,"props":960,"children":961},{"style":234},[962],{"type":38,"value":278},{"type":33,"tag":206,"props":964,"children":965},{"class":208,"line":316},[966,970,974,978,983,987,991,996],{"type":33,"tag":206,"props":967,"children":968},{"style":223},[969],{"type":38,"value":713},{"type":33,"tag":206,"props":971,"children":972},{"style":290},[973],{"type":38,"value":326},{"type":33,"tag":206,"props":975,"children":976},{"style":223},[977],{"type":38,"value":298},{"type":33,"tag":206,"props":979,"children":980},{"style":234},[981],{"type":38,"value":982}," req.cookies.",{"type":33,"tag":206,"props":984,"children":985},{"style":249},[986],{"type":38,"value":340},{"type":33,"tag":206,"props":988,"children":989},{"style":234},[990],{"type":38,"value":257},{"type":33,"tag":206,"props":992,"children":993},{"style":347},[994],{"type":38,"value":995},"'user_id'",{"type":33,"tag":206,"props":997,"children":998},{"style":234},[999],{"type":38,"value":1000},")?.value;\n",{"type":33,"tag":206,"props":1002,"children":1003},{"class":208,"line":363},[1004,1009,1014,1019,1024,1029,1034,1039],{"type":33,"tag":206,"props":1005,"children":1006},{"style":223},[1007],{"type":38,"value":1008},"  if",{"type":33,"tag":206,"props":1010,"children":1011},{"style":234},[1012],{"type":38,"value":1013}," (",{"type":33,"tag":206,"props":1015,"children":1016},{"style":223},[1017],{"type":38,"value":1018},"!",{"type":33,"tag":206,"props":1020,"children":1021},{"style":234},[1022],{"type":38,"value":1023},"userId) ",{"type":33,"tag":206,"props":1025,"children":1026},{"style":223},[1027],{"type":38,"value":1028},"return",{"type":33,"tag":206,"props":1030,"children":1031},{"style":234},[1032],{"type":38,"value":1033}," NextResponse.",{"type":33,"tag":206,"props":1035,"children":1036},{"style":249},[1037],{"type":38,"value":1038},"next",{"type":33,"tag":206,"props":1040,"children":1041},{"style":234},[1042],{"type":38,"value":1043},"();\n",{"type":33,"tag":206,"props":1045,"children":1046},{"class":208,"line":373},[1047],{"type":33,"tag":206,"props":1048,"children":1049},{"emptyLinePlaceholder":367},[1050],{"type":38,"value":370},{"type":33,"tag":206,"props":1052,"children":1053},{"class":208,"line":382},[1054],{"type":33,"tag":206,"props":1055,"children":1056},{"style":213},[1057],{"type":38,"value":1058},"  \u002F\u002F Obtener segmento de Edge Config (KV de Vercel)\n",{"type":33,"tag":206,"props":1060,"children":1061},{"class":208,"line":27},[1062,1066,1070,1074,1078,1082,1086,1091,1096,1101,1106,1111,1115,1120,1125,1130,1135],{"type":33,"tag":206,"props":1063,"children":1064},{"style":223},[1065],{"type":38,"value":713},{"type":33,"tag":206,"props":1067,"children":1068},{"style":290},[1069],{"type":38,"value":392},{"type":33,"tag":206,"props":1071,"children":1072},{"style":223},[1073],{"type":38,"value":298},{"type":33,"tag":206,"props":1075,"children":1076},{"style":223},[1077],{"type":38,"value":401},{"type":33,"tag":206,"props":1079,"children":1080},{"style":249},[1081],{"type":38,"value":252},{"type":33,"tag":206,"props":1083,"children":1084},{"style":234},[1085],{"type":38,"value":257},{"type":33,"tag":206,"props":1087,"children":1088},{"style":347},[1089],{"type":38,"value":1090},"`https:\u002F\u002Fedge-config.vercel.com\u002F${",{"type":33,"tag":206,"props":1092,"children":1093},{"style":234},[1094],{"type":38,"value":1095},"userId",{"type":33,"tag":206,"props":1097,"children":1098},{"style":347},[1099],{"type":38,"value":1100},"}`",{"type":33,"tag":206,"props":1102,"children":1103},{"style":234},[1104],{"type":38,"value":1105},").",{"type":33,"tag":206,"props":1107,"children":1108},{"style":249},[1109],{"type":38,"value":1110},"then",{"type":33,"tag":206,"props":1112,"children":1113},{"style":234},[1114],{"type":38,"value":257},{"type":33,"tag":206,"props":1116,"children":1117},{"style":260},[1118],{"type":38,"value":1119},"r",{"type":33,"tag":206,"props":1121,"children":1122},{"style":223},[1123],{"type":38,"value":1124}," =>",{"type":33,"tag":206,"props":1126,"children":1127},{"style":234},[1128],{"type":38,"value":1129}," r.",{"type":33,"tag":206,"props":1131,"children":1132},{"style":249},[1133],{"type":38,"value":1134},"json",{"type":33,"tag":206,"props":1136,"children":1137},{"style":234},[1138],{"type":38,"value":1139},"());\n",{"type":33,"tag":206,"props":1141,"children":1142},{"class":208,"line":493},[1143],{"type":33,"tag":206,"props":1144,"children":1145},{"emptyLinePlaceholder":367},[1146],{"type":38,"value":370},{"type":33,"tag":206,"props":1148,"children":1149},{"class":208,"line":501},[1150],{"type":33,"tag":206,"props":1151,"children":1152},{"style":213},[1153],{"type":38,"value":1154},"  \u002F\u002F Agregar información de segmento a header, component de página lo lee\n",{"type":33,"tag":206,"props":1156,"children":1157},{"class":208,"line":510},[1158,1162,1167,1171,1175,1179],{"type":33,"tag":206,"props":1159,"children":1160},{"style":223},[1161],{"type":38,"value":713},{"type":33,"tag":206,"props":1163,"children":1164},{"style":290},[1165],{"type":38,"value":1166}," response",{"type":33,"tag":206,"props":1168,"children":1169},{"style":223},[1170],{"type":38,"value":298},{"type":33,"tag":206,"props":1172,"children":1173},{"style":234},[1174],{"type":38,"value":1033},{"type":33,"tag":206,"props":1176,"children":1177},{"style":249},[1178],{"type":38,"value":1038},{"type":33,"tag":206,"props":1180,"children":1181},{"style":234},[1182],{"type":38,"value":1043},{"type":33,"tag":206,"props":1184,"children":1185},{"class":208,"line":537},[1186,1191,1196,1200,1205],{"type":33,"tag":206,"props":1187,"children":1188},{"style":234},[1189],{"type":38,"value":1190},"  response.headers.",{"type":33,"tag":206,"props":1192,"children":1193},{"style":249},[1194],{"type":38,"value":1195},"set",{"type":33,"tag":206,"props":1197,"children":1198},{"style":234},[1199],{"type":38,"value":257},{"type":33,"tag":206,"props":1201,"children":1202},{"style":347},[1203],{"type":38,"value":1204},"'x-user-segment'",{"type":33,"tag":206,"props":1206,"children":1207},{"style":234},[1208],{"type":38,"value":1209},", segment.tier);\n",{"type":33,"tag":206,"props":1211,"children":1212},{"class":208,"line":545},[1213,1217],{"type":33,"tag":206,"props":1214,"children":1215},{"style":223},[1216],{"type":38,"value":779},{"type":33,"tag":206,"props":1218,"children":1219},{"style":234},[1220],{"type":38,"value":1221}," response;\n",{"type":33,"tag":206,"props":1223,"children":1224},{"class":208,"line":568},[1225],{"type":33,"tag":206,"props":1226,"children":1227},{"style":234},[1228],{"type":38,"value":816},{"type":33,"tag":206,"props":1230,"children":1231},{"class":208,"line":577},[1232],{"type":33,"tag":206,"props":1233,"children":1234},{"emptyLinePlaceholder":367},[1235],{"type":38,"value":370},{"type":33,"tag":206,"props":1237,"children":1238},{"class":208,"line":601},[1239,1243,1248,1253,1257],{"type":33,"tag":206,"props":1240,"children":1241},{"style":223},[1242],{"type":38,"value":226},{"type":33,"tag":206,"props":1244,"children":1245},{"style":223},[1246],{"type":38,"value":1247}," const",{"type":33,"tag":206,"props":1249,"children":1250},{"style":290},[1251],{"type":38,"value":1252}," config",{"type":33,"tag":206,"props":1254,"children":1255},{"style":223},[1256],{"type":38,"value":298},{"type":33,"tag":206,"props":1258,"children":1259},{"style":234},[1260],{"type":38,"value":237},{"type":33,"tag":206,"props":1262,"children":1263},{"class":208,"line":628},[1264,1269,1274,1278,1283],{"type":33,"tag":206,"props":1265,"children":1266},{"style":234},[1267],{"type":38,"value":1268},"  matcher: [",{"type":33,"tag":206,"props":1270,"children":1271},{"style":347},[1272],{"type":38,"value":1273},"'\u002Fproduct\u002F:path*'",{"type":33,"tag":206,"props":1275,"children":1276},{"style":234},[1277],{"type":38,"value":268},{"type":33,"tag":206,"props":1279,"children":1280},{"style":347},[1281],{"type":38,"value":1282},"'\u002Fcategory\u002F:path*'",{"type":33,"tag":206,"props":1284,"children":1285},{"style":234},[1286],{"type":38,"value":1287},"],\n",{"type":33,"tag":206,"props":1289,"children":1290},{"class":208,"line":637},[1291],{"type":33,"tag":206,"props":1292,"children":1293},{"style":234},[1294],{"type":38,"value":661},{"type":33,"tag":34,"props":1296,"children":1297},{},[1298,1300,1309],{"type":38,"value":1299},"Este enfoque funciona bien para personalizaçar páginas de listado de productos en arquitecturas ",{"type":33,"tag":1301,"props":1302,"children":1306},"a",{"href":1303,"rel":1304},"https:\u002F\u002Fwww.roibase.com.tr\u002Fes\u002Fheadless",[1305],"nofollow",[1307],{"type":38,"value":1308},"headless commerce",{"type":38,"value":1310},". Por ejemplo, muestras a usuarios premium un ordenamiento de productos diferente. El componente page lo lee así:",{"type":33,"tag":195,"props":1312,"children":1316},{"className":1313,"code":1314,"language":1315,"meta":17,"style":17},"language-tsx shiki shiki-themes github-dark","\u002F\u002F app\u002Fproduct\u002F[id]\u002Fpage.tsx\nexport default async function ProductPage({ params, headers }) {\n  const segment = headers.get('x-user-segment');\n  const products = await fetchProducts(params.id, segment);\n  return \u003CProductList items={products} \u002F>;\n}\n","tsx",[1317],{"type":33,"tag":202,"props":1318,"children":1319},{"__ignoreMap":17},[1320,1328,1376,1413,1443,1475],{"type":33,"tag":206,"props":1321,"children":1322},{"class":208,"line":209},[1323],{"type":33,"tag":206,"props":1324,"children":1325},{"style":213},[1326],{"type":38,"value":1327},"\u002F\u002F app\u002Fproduct\u002F[id]\u002Fpage.tsx\n",{"type":33,"tag":206,"props":1329,"children":1330},{"class":208,"line":219},[1331,1335,1339,1343,1347,1352,1357,1362,1366,1371],{"type":33,"tag":206,"props":1332,"children":1333},{"style":223},[1334],{"type":38,"value":226},{"type":33,"tag":206,"props":1336,"children":1337},{"style":223},[1338],{"type":38,"value":231},{"type":33,"tag":206,"props":1340,"children":1341},{"style":223},[1342],{"type":38,"value":930},{"type":33,"tag":206,"props":1344,"children":1345},{"style":223},[1346],{"type":38,"value":935},{"type":33,"tag":206,"props":1348,"children":1349},{"style":249},[1350],{"type":38,"value":1351}," ProductPage",{"type":33,"tag":206,"props":1353,"children":1354},{"style":234},[1355],{"type":38,"value":1356},"({ ",{"type":33,"tag":206,"props":1358,"children":1359},{"style":260},[1360],{"type":38,"value":1361},"params",{"type":33,"tag":206,"props":1363,"children":1364},{"style":234},[1365],{"type":38,"value":268},{"type":33,"tag":206,"props":1367,"children":1368},{"style":260},[1369],{"type":38,"value":1370},"headers",{"type":33,"tag":206,"props":1372,"children":1373},{"style":234},[1374],{"type":38,"value":1375}," }) {\n",{"type":33,"tag":206,"props":1377,"children":1378},{"class":208,"line":240},[1379,1383,1387,1391,1396,1400,1404,1408],{"type":33,"tag":206,"props":1380,"children":1381},{"style":223},[1382],{"type":38,"value":713},{"type":33,"tag":206,"props":1384,"children":1385},{"style":290},[1386],{"type":38,"value":392},{"type":33,"tag":206,"props":1388,"children":1389},{"style":223},[1390],{"type":38,"value":298},{"type":33,"tag":206,"props":1392,"children":1393},{"style":234},[1394],{"type":38,"value":1395}," headers.",{"type":33,"tag":206,"props":1397,"children":1398},{"style":249},[1399],{"type":38,"value":340},{"type":33,"tag":206,"props":1401,"children":1402},{"style":234},[1403],{"type":38,"value":257},{"type":33,"tag":206,"props":1405,"children":1406},{"style":347},[1407],{"type":38,"value":1204},{"type":33,"tag":206,"props":1409,"children":1410},{"style":234},[1411],{"type":38,"value":1412},");\n",{"type":33,"tag":206,"props":1414,"children":1415},{"class":208,"line":281},[1416,1420,1425,1429,1433,1438],{"type":33,"tag":206,"props":1417,"children":1418},{"style":223},[1419],{"type":38,"value":713},{"type":33,"tag":206,"props":1421,"children":1422},{"style":290},[1423],{"type":38,"value":1424}," products",{"type":33,"tag":206,"props":1426,"children":1427},{"style":223},[1428],{"type":38,"value":298},{"type":33,"tag":206,"props":1430,"children":1431},{"style":223},[1432],{"type":38,"value":401},{"type":33,"tag":206,"props":1434,"children":1435},{"style":249},[1436],{"type":38,"value":1437}," fetchProducts",{"type":33,"tag":206,"props":1439,"children":1440},{"style":234},[1441],{"type":38,"value":1442},"(params.id, segment);\n",{"type":33,"tag":206,"props":1444,"children":1445},{"class":208,"line":316},[1446,1450,1455,1460,1465,1470],{"type":33,"tag":206,"props":1447,"children":1448},{"style":223},[1449],{"type":38,"value":779},{"type":33,"tag":206,"props":1451,"children":1452},{"style":234},[1453],{"type":38,"value":1454}," \u003C",{"type":33,"tag":206,"props":1456,"children":1457},{"style":290},[1458],{"type":38,"value":1459},"ProductList",{"type":33,"tag":206,"props":1461,"children":1462},{"style":249},[1463],{"type":38,"value":1464}," items",{"type":33,"tag":206,"props":1466,"children":1467},{"style":223},[1468],{"type":38,"value":1469},"=",{"type":33,"tag":206,"props":1471,"children":1472},{"style":234},[1473],{"type":38,"value":1474},"{products} \u002F>;\n",{"type":33,"tag":206,"props":1476,"children":1477},{"class":208,"line":363},[1478],{"type":33,"tag":206,"props":1479,"children":1480},{"style":234},[1481],{"type":38,"value":816},{"type":33,"tag":34,"props":1483,"children":1484},{},[1485],{"type":38,"value":1486},"Vercel Edge Config replica globalmente en 150ms — las actualizaciones de almacenamiento se propagan a los edges en ese tiempo. Tradeoff: Vercel Edge Config es 20% más lento que Cloudflare KV pero integra mejor con el ecosistema Next.js.",{"type":33,"tag":183,"props":1488,"children":1490},{"id":1489},"arquitectura-kv-store-estrategia-de-segmentación",[1491],{"type":38,"value":1492},"Arquitectura KV Store: Estrategia de Segmentación",{"type":33,"tag":34,"props":1494,"children":1495},{},[1496],{"type":38,"value":1497},"Los datos de personalización viven en KV en 3 capas:",{"type":33,"tag":1499,"props":1500,"children":1501},"ol",{},[1502,1527,1549],{"type":33,"tag":1503,"props":1504,"children":1505},"li",{},[1506,1511,1513,1519,1521],{"type":33,"tag":151,"props":1507,"children":1508},{},[1509],{"type":38,"value":1510},"Segmento de usuario:",{"type":38,"value":1512}," ",{"type":33,"tag":202,"props":1514,"children":1516},{"className":1515},[],[1517],{"type":38,"value":1518},"USER_SEGMENTS:{userId}",{"type":38,"value":1520}," → ",{"type":33,"tag":202,"props":1522,"children":1524},{"className":1523},[],[1525],{"type":38,"value":1526},"{\"tier\":\"premium\",\"region\":\"EU\"}",{"type":33,"tag":1503,"props":1528,"children":1529},{},[1530,1535,1536,1542,1543],{"type":33,"tag":151,"props":1531,"children":1532},{},[1533],{"type":38,"value":1534},"Config de segmento:",{"type":38,"value":1512},{"type":33,"tag":202,"props":1537,"children":1539},{"className":1538},[],[1540],{"type":38,"value":1541},"SEGMENT_CONFIG:{tier}",{"type":38,"value":1520},{"type":33,"tag":202,"props":1544,"children":1546},{"className":1545},[],[1547],{"type":38,"value":1548},"{\"discount\":0.2,\"hero\":\"premium.jpg\"}",{"type":33,"tag":1503,"props":1550,"children":1551},{},[1552,1557,1558,1564],{"type":33,"tag":151,"props":1553,"children":1554},{},[1555],{"type":38,"value":1556},"Plantilla de página:",{"type":38,"value":1512},{"type":33,"tag":202,"props":1559,"children":1561},{"className":1560},[],[1562],{"type":38,"value":1563},"PAGE_TPL:{page}:{tier}",{"type":38,"value":1565}," → fragmento HTML pre-renderizado",{"type":33,"tag":34,"props":1567,"children":1568},{},[1569,1571,1576],{"type":38,"value":1570},"Esta estructura significa que cuando cambia el segmento, solo ",{"type":33,"tag":202,"props":1572,"children":1574},{"className":1573},[],[1575],{"type":38,"value":411},{"type":38,"value":1577}," se actualiza — las plantillas permanecen en caché. Para 1 millón de usuarios, el costo de KV es: 1M usuarios × 1 lectura\u002Fsolicitud × $0.50 por millón de lecturas = $0.0000005 por solicitud. Una consulta de DB de origen cuesta 100 veces más.",{"type":33,"tag":34,"props":1579,"children":1580},{},[1581],{"type":38,"value":1582},"Estrategia TTL en KV:",{"type":33,"tag":195,"props":1584,"children":1586},{"className":197,"code":1585,"language":199,"meta":17,"style":17},"\u002F\u002F Segmento en caché 24 horas\nawait env.USER_SEGMENTS.put(userId, JSON.stringify(segment), {\n  expirationTtl: 86400,\n});\n\n\u002F\u002F Config en caché 1 hora (puede cambiar frecuentemente)\nawait env.SEGMENT_CONFIG.put(tier, JSON.stringify(config), {\n  expirationTtl: 3600,\n});\n",[1587],{"type":33,"tag":202,"props":1588,"children":1589},{"__ignoreMap":17},[1590,1598,1647,1664,1672,1679,1687,1733,1749],{"type":33,"tag":206,"props":1591,"children":1592},{"class":208,"line":209},[1593],{"type":33,"tag":206,"props":1594,"children":1595},{"style":213},[1596],{"type":38,"value":1597},"\u002F\u002F Segmento en caché 24 horas\n",{"type":33,"tag":206,"props":1599,"children":1600},{"class":208,"line":219},[1601,1606,1610,1614,1618,1623,1628,1633,1637,1642],{"type":33,"tag":206,"props":1602,"children":1603},{"style":223},[1604],{"type":38,"value":1605},"await",{"type":33,"tag":206,"props":1607,"children":1608},{"style":234},[1609],{"type":38,"value":406},{"type":33,"tag":206,"props":1611,"children":1612},{"style":290},[1613],{"type":38,"value":411},{"type":33,"tag":206,"props":1615,"children":1616},{"style":234},[1617],{"type":38,"value":416},{"type":33,"tag":206,"props":1619,"children":1620},{"style":249},[1621],{"type":38,"value":1622},"put",{"type":33,"tag":206,"props":1624,"children":1625},{"style":234},[1626],{"type":38,"value":1627},"(userId, ",{"type":33,"tag":206,"props":1629,"children":1630},{"style":290},[1631],{"type":38,"value":1632},"JSON",{"type":33,"tag":206,"props":1634,"children":1635},{"style":234},[1636],{"type":38,"value":416},{"type":33,"tag":206,"props":1638,"children":1639},{"style":249},[1640],{"type":38,"value":1641},"stringify",{"type":33,"tag":206,"props":1643,"children":1644},{"style":234},[1645],{"type":38,"value":1646},"(segment), {\n",{"type":33,"tag":206,"props":1648,"children":1649},{"class":208,"line":240},[1650,1655,1660],{"type":33,"tag":206,"props":1651,"children":1652},{"style":234},[1653],{"type":38,"value":1654},"  expirationTtl: ",{"type":33,"tag":206,"props":1656,"children":1657},{"style":290},[1658],{"type":38,"value":1659},"86400",{"type":33,"tag":206,"props":1661,"children":1662},{"style":234},[1663],{"type":38,"value":598},{"type":33,"tag":206,"props":1665,"children":1666},{"class":208,"line":281},[1667],{"type":33,"tag":206,"props":1668,"children":1669},{"style":234},[1670],{"type":38,"value":1671},"});\n",{"type":33,"tag":206,"props":1673,"children":1674},{"class":208,"line":316},[1675],{"type":33,"tag":206,"props":1676,"children":1677},{"emptyLinePlaceholder":367},[1678],{"type":38,"value":370},{"type":33,"tag":206,"props":1680,"children":1681},{"class":208,"line":363},[1682],{"type":33,"tag":206,"props":1683,"children":1684},{"style":213},[1685],{"type":38,"value":1686},"\u002F\u002F Config en caché 1 hora (puede cambiar frecuentemente)\n",{"type":33,"tag":206,"props":1688,"children":1689},{"class":208,"line":373},[1690,1694,1698,1703,1707,1711,1716,1720,1724,1728],{"type":33,"tag":206,"props":1691,"children":1692},{"style":223},[1693],{"type":38,"value":1605},{"type":33,"tag":206,"props":1695,"children":1696},{"style":234},[1697],{"type":38,"value":406},{"type":33,"tag":206,"props":1699,"children":1700},{"style":290},[1701],{"type":38,"value":1702},"SEGMENT_CONFIG",{"type":33,"tag":206,"props":1704,"children":1705},{"style":234},[1706],{"type":38,"value":416},{"type":33,"tag":206,"props":1708,"children":1709},{"style":249},[1710],{"type":38,"value":1622},{"type":33,"tag":206,"props":1712,"children":1713},{"style":234},[1714],{"type":38,"value":1715},"(tier, ",{"type":33,"tag":206,"props":1717,"children":1718},{"style":290},[1719],{"type":38,"value":1632},{"type":33,"tag":206,"props":1721,"children":1722},{"style":234},[1723],{"type":38,"value":416},{"type":33,"tag":206,"props":1725,"children":1726},{"style":249},[1727],{"type":38,"value":1641},{"type":33,"tag":206,"props":1729,"children":1730},{"style":234},[1731],{"type":38,"value":1732},"(config), {\n",{"type":33,"tag":206,"props":1734,"children":1735},{"class":208,"line":382},[1736,1740,1745],{"type":33,"tag":206,"props":1737,"children":1738},{"style":234},[1739],{"type":38,"value":1654},{"type":33,"tag":206,"props":1741,"children":1742},{"style":290},[1743],{"type":38,"value":1744},"3600",{"type":33,"tag":206,"props":1746,"children":1747},{"style":234},[1748],{"type":38,"value":598},{"type":33,"tag":206,"props":1750,"children":1751},{"class":208,"line":27},[1752],{"type":33,"tag":206,"props":1753,"children":1754},{"style":234},[1755],{"type":38,"value":1671},{"type":33,"tag":34,"props":1757,"children":1758},{},[1759],{"type":38,"value":1760},"Invalidación: cuando un usuario se actualiza (upgrade), envías una señal vía WebSocket o webhook al worker, que actualiza KV. Pero no es en tiempo real — acepta consistencia eventual (1-5 minutos de lag).",{"type":33,"tag":41,"props":1762,"children":1764},{"id":1763},"tradeoffs-de-rendering-static-vs-edge-ssr",[1765],{"type":38,"value":1766},"Tradeoffs de rendering: Static vs. Edge SSR",{"type":33,"tag":34,"props":1768,"children":1769},{},[1770],{"type":38,"value":1771},"Edge SSR no siempre es la mejor solución. Comparación:",{"type":33,"tag":58,"props":1773,"children":1774},{},[1775,1799],{"type":33,"tag":62,"props":1776,"children":1777},{},[1778],{"type":33,"tag":66,"props":1779,"children":1780},{},[1781,1786,1791,1795],{"type":33,"tag":70,"props":1782,"children":1783},{},[1784],{"type":38,"value":1785},"Métrica",{"type":33,"tag":70,"props":1787,"children":1788},{},[1789],{"type":38,"value":1790},"Static (ISR)",{"type":33,"tag":70,"props":1792,"children":1793},{},[1794],{"type":38,"value":84},{"type":33,"tag":70,"props":1796,"children":1797},{},[1798],{"type":38,"value":79},{"type":33,"tag":86,"props":1800,"children":1801},{},[1802,1823,1845,1868,1891],{"type":33,"tag":66,"props":1803,"children":1804},{},[1805,1810,1815,1819],{"type":33,"tag":93,"props":1806,"children":1807},{},[1808],{"type":38,"value":1809},"TTFB",{"type":33,"tag":93,"props":1811,"children":1812},{},[1813],{"type":38,"value":1814},"20ms",{"type":33,"tag":93,"props":1816,"children":1817},{},[1818],{"type":38,"value":171},{"type":33,"tag":93,"props":1820,"children":1821},{},[1822],{"type":38,"value":163},{"type":33,"tag":66,"props":1824,"children":1825},{},[1826,1831,1836,1841],{"type":33,"tag":93,"props":1827,"children":1828},{},[1829],{"type":38,"value":1830},"Personalización",{"type":33,"tag":93,"props":1832,"children":1833},{},[1834],{"type":38,"value":1835},"No",{"type":33,"tag":93,"props":1837,"children":1838},{},[1839],{"type":38,"value":1840},"Sí",{"type":33,"tag":93,"props":1842,"children":1843},{},[1844],{"type":38,"value":1840},{"type":33,"tag":66,"props":1846,"children":1847},{},[1848,1853,1858,1863],{"type":33,"tag":93,"props":1849,"children":1850},{},[1851],{"type":38,"value":1852},"Hit ratio de caché",{"type":33,"tag":93,"props":1854,"children":1855},{},[1856],{"type":38,"value":1857},"99%",{"type":33,"tag":93,"props":1859,"children":1860},{},[1861],{"type":38,"value":1862},"60%",{"type":33,"tag":93,"props":1864,"children":1865},{},[1866],{"type":38,"value":1867},"10%",{"type":33,"tag":66,"props":1869,"children":1870},{},[1871,1876,1881,1886],{"type":33,"tag":93,"props":1872,"children":1873},{},[1874],{"type":38,"value":1875},"Costo (1M solicitudes)",{"type":33,"tag":93,"props":1877,"children":1878},{},[1879],{"type":38,"value":1880},"$0.20",{"type":33,"tag":93,"props":1882,"children":1883},{},[1884],{"type":38,"value":1885},"$2.50",{"type":33,"tag":93,"props":1887,"children":1888},{},[1889],{"type":38,"value":1890},"$15",{"type":33,"tag":66,"props":1892,"children":1893},{},[1894,1899,1904,1909],{"type":33,"tag":93,"props":1895,"children":1896},{},[1897],{"type":38,"value":1898},"Complejidad",{"type":33,"tag":93,"props":1900,"children":1901},{},[1902],{"type":38,"value":1903},"Baja",{"type":33,"tag":93,"props":1905,"children":1906},{},[1907],{"type":38,"value":1908},"Media",{"type":33,"tag":93,"props":1910,"children":1911},{},[1912],{"type":38,"value":1913},"Alta",{"type":33,"tag":34,"props":1915,"children":1916},{},[1917],{"type":38,"value":1918},"ISR logra 99% hit ratio pero sin personalización. Edge SSR fragmenta el caché por segmento de usuario — cada segmento crea una clave de caché separada, reduciendo el ratio de hits.",{"type":33,"tag":34,"props":1920,"children":1921},{},[1922],{"type":38,"value":1923},"Enfoque híbrido: layout estático, componentes personalizados en edge renderizados e inyectados side-by-side. Por ejemplo, grid de productos estático, \"Recomendado para ti\" vía Edge SSR:",{"type":33,"tag":195,"props":1925,"children":1927},{"className":197,"code":1926,"language":199,"meta":17,"style":17},"\u002F\u002F Híbrido: HTML estático + sección personalizada inyectada en edge\nconst staticHTML = await env.STATIC_PAGES.get(pathname);\nconst personalizedSection = await renderPersonalizedRecommendations(userId);\nconst finalHTML = staticHTML.replace('\u003C!--INJECT-->', personalizedSection);\n",[1928],{"type":33,"tag":202,"props":1929,"children":1930},{"__ignoreMap":17},[1931,1939,1982,2011],{"type":33,"tag":206,"props":1932,"children":1933},{"class":208,"line":209},[1934],{"type":33,"tag":206,"props":1935,"children":1936},{"style":213},[1937],{"type":38,"value":1938},"\u002F\u002F Híbrido: HTML estático + sección personalizada inyectada en edge\n",{"type":33,"tag":206,"props":1940,"children":1941},{"class":208,"line":219},[1942,1947,1952,1956,1960,1964,1969,1973,1977],{"type":33,"tag":206,"props":1943,"children":1944},{"style":223},[1945],{"type":38,"value":1946},"const",{"type":33,"tag":206,"props":1948,"children":1949},{"style":290},[1950],{"type":38,"value":1951}," staticHTML",{"type":33,"tag":206,"props":1953,"children":1954},{"style":223},[1955],{"type":38,"value":298},{"type":33,"tag":206,"props":1957,"children":1958},{"style":223},[1959],{"type":38,"value":401},{"type":33,"tag":206,"props":1961,"children":1962},{"style":234},[1963],{"type":38,"value":406},{"type":33,"tag":206,"props":1965,"children":1966},{"style":290},[1967],{"type":38,"value":1968},"STATIC_PAGES",{"type":33,"tag":206,"props":1970,"children":1971},{"style":234},[1972],{"type":38,"value":416},{"type":33,"tag":206,"props":1974,"children":1975},{"style":249},[1976],{"type":38,"value":340},{"type":33,"tag":206,"props":1978,"children":1979},{"style":234},[1980],{"type":38,"value":1981},"(pathname);\n",{"type":33,"tag":206,"props":1983,"children":1984},{"class":208,"line":240},[1985,1989,1994,1998,2002,2007],{"type":33,"tag":206,"props":1986,"children":1987},{"style":223},[1988],{"type":38,"value":1946},{"type":33,"tag":206,"props":1990,"children":1991},{"style":290},[1992],{"type":38,"value":1993}," personalizedSection",{"type":33,"tag":206,"props":1995,"children":1996},{"style":223},[1997],{"type":38,"value":298},{"type":33,"tag":206,"props":1999,"children":2000},{"style":223},[2001],{"type":38,"value":401},{"type":33,"tag":206,"props":2003,"children":2004},{"style":249},[2005],{"type":38,"value":2006}," renderPersonalizedRecommendations",{"type":33,"tag":206,"props":2008,"children":2009},{"style":234},[2010],{"type":38,"value":425},{"type":33,"tag":206,"props":2012,"children":2013},{"class":208,"line":281},[2014,2018,2023,2027,2032,2037,2041,2046],{"type":33,"tag":206,"props":2015,"children":2016},{"style":223},[2017],{"type":38,"value":1946},{"type":33,"tag":206,"props":2019,"children":2020},{"style":290},[2021],{"type":38,"value":2022}," finalHTML",{"type":33,"tag":206,"props":2024,"children":2025},{"style":223},[2026],{"type":38,"value":298},{"type":33,"tag":206,"props":2028,"children":2029},{"style":234},[2030],{"type":38,"value":2031}," staticHTML.",{"type":33,"tag":206,"props":2033,"children":2034},{"style":249},[2035],{"type":38,"value":2036},"replace",{"type":33,"tag":206,"props":2038,"children":2039},{"style":234},[2040],{"type":38,"value":257},{"type":33,"tag":206,"props":2042,"children":2043},{"style":347},[2044],{"type":38,"value":2045},"'\u003C!--INJECT-->'",{"type":33,"tag":206,"props":2047,"children":2048},{"style":234},[2049],{"type":38,"value":2050},", personalizedSection);\n",{"type":33,"tag":34,"props":2052,"children":2053},{},[2054],{"type":38,"value":2055},"Este enfoque mantiene TTFB en 30ms mientras entrega personalización.",{"type":33,"tag":41,"props":2057,"children":2059},{"id":2058},"debugging-y-monitoreo-límites-del-runtime-edge",[2060],{"type":38,"value":2061},"Debugging y monitoreo: Límites del runtime edge",{"type":33,"tag":34,"props":2063,"children":2064},{},[2065],{"type":38,"value":2066},"Debuggear en edge runtime en production es difícil — logs dispersos, stack traces incompletos. Con Cloudflare Workers, puedes usar Tail Workers para crear un stream de logs en tiempo real:",{"type":33,"tag":195,"props":2068,"children":2070},{"className":197,"code":2069,"language":199,"meta":17,"style":17},"\u002F\u002F tail-worker.js\nexport default {\n  async tail(events) {\n    for (const event of events) {\n      console.log(JSON.stringify({\n        timestamp: event.timestamp,\n        outcome: event.outcome,\n        logs: event.logs,\n      }));\n    }\n  },\n};\n",[2071],{"type":33,"tag":202,"props":2072,"children":2073},{"__ignoreMap":17},[2074,2082,2097,2122,2153,2187,2195,2203,2211,2219,2227,2234],{"type":33,"tag":206,"props":2075,"children":2076},{"class":208,"line":209},[2077],{"type":33,"tag":206,"props":2078,"children":2079},{"style":213},[2080],{"type":38,"value":2081},"\u002F\u002F tail-worker.js\n",{"type":33,"tag":206,"props":2083,"children":2084},{"class":208,"line":219},[2085,2089,2093],{"type":33,"tag":206,"props":2086,"children":2087},{"style":223},[2088],{"type":38,"value":226},{"type":33,"tag":206,"props":2090,"children":2091},{"style":223},[2092],{"type":38,"value":231},{"type":33,"tag":206,"props":2094,"children":2095},{"style":234},[2096],{"type":38,"value":237},{"type":33,"tag":206,"props":2098,"children":2099},{"class":208,"line":240},[2100,2104,2109,2113,2118],{"type":33,"tag":206,"props":2101,"children":2102},{"style":223},[2103],{"type":38,"value":246},{"type":33,"tag":206,"props":2105,"children":2106},{"style":249},[2107],{"type":38,"value":2108}," tail",{"type":33,"tag":206,"props":2110,"children":2111},{"style":234},[2112],{"type":38,"value":257},{"type":33,"tag":206,"props":2114,"children":2115},{"style":260},[2116],{"type":38,"value":2117},"events",{"type":33,"tag":206,"props":2119,"children":2120},{"style":234},[2121],{"type":38,"value":278},{"type":33,"tag":206,"props":2123,"children":2124},{"class":208,"line":281},[2125,2130,2134,2138,2143,2148],{"type":33,"tag":206,"props":2126,"children":2127},{"style":223},[2128],{"type":38,"value":2129},"    for",{"type":33,"tag":206,"props":2131,"children":2132},{"style":234},[2133],{"type":38,"value":1013},{"type":33,"tag":206,"props":2135,"children":2136},{"style":223},[2137],{"type":38,"value":1946},{"type":33,"tag":206,"props":2139,"children":2140},{"style":290},[2141],{"type":38,"value":2142}," event",{"type":33,"tag":206,"props":2144,"children":2145},{"style":223},[2146],{"type":38,"value":2147}," of",{"type":33,"tag":206,"props":2149,"children":2150},{"style":234},[2151],{"type":38,"value":2152}," events) {\n",{"type":33,"tag":206,"props":2154,"children":2155},{"class":208,"line":316},[2156,2161,2166,2170,2174,2178,2182],{"type":33,"tag":206,"props":2157,"children":2158},{"style":234},[2159],{"type":38,"value":2160},"      console.",{"type":33,"tag":206,"props":2162,"children":2163},{"style":249},[2164],{"type":38,"value":2165},"log",{"type":33,"tag":206,"props":2167,"children":2168},{"style":234},[2169],{"type":38,"value":257},{"type":33,"tag":206,"props":2171,"children":2172},{"style":290},[2173],{"type":38,"value":1632},{"type":33,"tag":206,"props":2175,"children":2176},{"style":234},[2177],{"type":38,"value":416},{"type":33,"tag":206,"props":2179,"children":2180},{"style":249},[2181],{"type":38,"value":1641},{"type":33,"tag":206,"props":2183,"children":2184},{"style":234},[2185],{"type":38,"value":2186},"({\n",{"type":33,"tag":206,"props":2188,"children":2189},{"class":208,"line":363},[2190],{"type":33,"tag":206,"props":2191,"children":2192},{"style":234},[2193],{"type":38,"value":2194},"        timestamp: event.timestamp,\n",{"type":33,"tag":206,"props":2196,"children":2197},{"class":208,"line":373},[2198],{"type":33,"tag":206,"props":2199,"children":2200},{"style":234},[2201],{"type":38,"value":2202},"        outcome: event.outcome,\n",{"type":33,"tag":206,"props":2204,"children":2205},{"class":208,"line":382},[2206],{"type":33,"tag":206,"props":2207,"children":2208},{"style":234},[2209],{"type":38,"value":2210},"        logs: event.logs,\n",{"type":33,"tag":206,"props":2212,"children":2213},{"class":208,"line":27},[2214],{"type":33,"tag":206,"props":2215,"children":2216},{"style":234},[2217],{"type":38,"value":2218},"      }));\n",{"type":33,"tag":206,"props":2220,"children":2221},{"class":208,"line":493},[2222],{"type":33,"tag":206,"props":2223,"children":2224},{"style":234},[2225],{"type":38,"value":2226},"    }\n",{"type":33,"tag":206,"props":2228,"children":2229},{"class":208,"line":501},[2230],{"type":33,"tag":206,"props":2231,"children":2232},{"style":234},[2233],{"type":38,"value":652},{"type":33,"tag":206,"props":2235,"children":2236},{"class":208,"line":510},[2237],{"type":33,"tag":206,"props":2238,"children":2239},{"style":234},[2240],{"type":38,"value":661},{"type":33,"tag":34,"props":2242,"children":2243},{},[2244,2246,2252],{"type":38,"value":2245},"En Vercel, ",{"type":33,"tag":202,"props":2247,"children":2249},{"className":2248},[],[2250],{"type":38,"value":2251},"console.log",{"type":38,"value":2253}," va a edge logs, streamable desde el dashboard. Pero verbose logging en production puede exceder el límite de CPU — registra solo eventos críticos.",{"type":33,"tag":34,"props":2255,"children":2256},{},[2257],{"type":38,"value":2258},"Métricas de monitoreo:",{"type":33,"tag":2260,"props":2261,"children":2262},"ul",{},[2263,2273,2283],{"type":33,"tag":1503,"props":2264,"children":2265},{},[2266,2271],{"type":33,"tag":151,"props":2267,"children":2268},{},[2269],{"type":38,"value":2270},"Cold start latency:",{"type":38,"value":2272}," El worker inicialmente tarda 80-120ms en cargar — solicitudes warm tardan 15ms. Las rutas frecuentes permanecen warm.",{"type":33,"tag":1503,"props":2274,"children":2275},{},[2276,2281],{"type":33,"tag":151,"props":2277,"children":2278},{},[2279],{"type":38,"value":2280},"KV read failure rate:",{"type":38,"value":2282}," 0.01% (SLA Cloudflare). Fallback: si KV falla, usa segmento por defecto.",{"type":33,"tag":1503,"props":2284,"children":2285},{},[2286,2291,2293,2299],{"type":33,"tag":151,"props":2287,"children":2288},{},[2289],{"type":38,"value":2290},"CPU time:",{"type":38,"value":2292}," Exceder 50ms retorna error %429. Profiling: mide con ",{"type":33,"tag":202,"props":2294,"children":2296},{"className":2295},[],[2297],{"type":38,"value":2298},"console.time()",{"type":38,"value":2300},", traslada operaciones pesadas a origen.",{"type":33,"tag":34,"props":2302,"children":2303},{},[2304],{"type":38,"value":2305},"Manejo de errores ejemplo:",{"type":33,"tag":195,"props":2307,"children":2309},{"className":197,"code":2308,"language":199,"meta":17,"style":17},"try {\n  const segment = await env.USER_SEGMENTS.get(userId);\n} catch (err) {\n  \u002F\u002F KV falló — fallback a defecto\n  return renderHTML({ tier: 'free' }, pathname);\n}\n",[2310],{"type":33,"tag":202,"props":2311,"children":2312},{"__ignoreMap":17},[2313,2325,2364,2382,2390,2415],{"type":33,"tag":206,"props":2314,"children":2315},{"class":208,"line":209},[2316,2321],{"type":33,"tag":206,"props":2317,"children":2318},{"style":223},[2319],{"type":38,"value":2320},"try",{"type":33,"tag":206,"props":2322,"children":2323},{"style":234},[2324],{"type":38,"value":237},{"type":33,"tag":206,"props":2326,"children":2327},{"class":208,"line":219},[2328,2332,2336,2340,2344,2348,2352,2356,2360],{"type":33,"tag":206,"props":2329,"children":2330},{"style":223},[2331],{"type":38,"value":713},{"type":33,"tag":206,"props":2333,"children":2334},{"style":290},[2335],{"type":38,"value":392},{"type":33,"tag":206,"props":2337,"children":2338},{"style":223},[2339],{"type":38,"value":298},{"type":33,"tag":206,"props":2341,"children":2342},{"style":223},[2343],{"type":38,"value":401},{"type":33,"tag":206,"props":2345,"children":2346},{"style":234},[2347],{"type":38,"value":406},{"type":33,"tag":206,"props":2349,"children":2350},{"style":290},[2351],{"type":38,"value":411},{"type":33,"tag":206,"props":2353,"children":2354},{"style":234},[2355],{"type":38,"value":416},{"type":33,"tag":206,"props":2357,"children":2358},{"style":249},[2359],{"type":38,"value":340},{"type":33,"tag":206,"props":2361,"children":2362},{"style":234},[2363],{"type":38,"value":425},{"type":33,"tag":206,"props":2365,"children":2366},{"class":208,"line":240},[2367,2372,2377],{"type":33,"tag":206,"props":2368,"children":2369},{"style":234},[2370],{"type":38,"value":2371},"} ",{"type":33,"tag":206,"props":2373,"children":2374},{"style":223},[2375],{"type":38,"value":2376},"catch",{"type":33,"tag":206,"props":2378,"children":2379},{"style":234},[2380],{"type":38,"value":2381}," (err) {\n",{"type":33,"tag":206,"props":2383,"children":2384},{"class":208,"line":281},[2385],{"type":33,"tag":206,"props":2386,"children":2387},{"style":213},[2388],{"type":38,"value":2389},"  \u002F\u002F KV falló — fallback a defecto\n",{"type":33,"tag":206,"props":2391,"children":2392},{"class":208,"line":316},[2393,2397,2401,2406,2410],{"type":33,"tag":206,"props":2394,"children":2395},{"style":223},[2396],{"type":38,"value":779},{"type":33,"tag":206,"props":2398,"children":2399},{"style":249},[2400],{"type":38,"value":529},{"type":33,"tag":206,"props":2402,"children":2403},{"style":234},[2404],{"type":38,"value":2405},"({ tier: ",{"type":33,"tag":206,"props":2407,"children":2408},{"style":347},[2409],{"type":38,"value":485},{"type":33,"tag":206,"props":2411,"children":2412},{"style":234},[2413],{"type":38,"value":2414}," }, pathname);\n",{"type":33,"tag":206,"props":2416,"children":2417},{"class":208,"line":363},[2418],{"type":33,"tag":206,"props":2419,"children":2420},{"style":234},[2421],{"type":38,"value":816},{"type":33,"tag":34,"props":2423,"children":2424},{},[2425],{"type":38,"value":2426},"Si aceptas estos tradeoffs de Edge SSR, la caída de 250ms a 40ms genera diferencias medibles en conversión. Especialmente crítico para usuarios móviles donde la latencia de red es alta. El siguiente paso es diseñar el almacén KV correctamente, definir tu estrategia de segmentación y testear los límites del runtime edge.",{"type":33,"tag":2428,"props":2429,"children":2430},"style",{},[2431],{"type":38,"value":2432},"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":17,"searchDepth":240,"depth":240,"links":2434},[2435,2438,2441,2442],{"id":43,"depth":219,"text":46,"children":2436},[2437],{"id":185,"depth":240,"text":188},{"id":844,"depth":219,"text":847,"children":2439},[2440],{"id":1489,"depth":240,"text":1492},{"id":1763,"depth":219,"text":1766},{"id":2058,"depth":219,"text":2061},"markdown","content:es:tech:disminuir-latencia-personalizacion-40ms-edge-ssr.md","content","es\u002Ftech\u002Fdisminuir-latencia-personalizacion-40ms-edge-ssr.md","es\u002Ftech\u002Fdisminuir-latencia-personalizacion-40ms-edge-ssr","md",1782079490114]