[{"data":1,"prerenderedAt":1209},["ShallowReactive",2],{"article-alternates":3,"article-\u002Fru\u002Ftech\u002Fshopify-hydrogen-vs-liquid-metriki":12},{"i18nKey":4,"paths":5},"tech-002-2026-05",{"de":6,"en":7,"es":8,"fr":9,"it":10,"ru":11},"\u002Fde\u002Ftech\u002Fshopify-hydrogen-vs-liquid-kennzahlen-entscheidung","\u002Fen\u002Ftech\u002Fshopify-hydrogen-vs-liquid-the-numbers-behind-our-decision","\u002Fes\u002Ftech\u002Fshopify-hydrogen-vs-liquid-numeros-detras-decision","\u002Ffr\u002Ftech\u002Fshopify-hydrogen-vs-liquid-decisions-by-numbers","\u002Fit\u002Ftech\u002Fshopify-hydrogen-vs-liquid-numeri-della-decisione","\u002Fru\u002Ftech\u002Fshopify-hydrogen-vs-liquid-resheniya-po-cifram",{"_path":13,"_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":1203,"_id":1204,"_source":1205,"_file":1206,"_stem":1207,"_extension":1208},"\u002Fru\u002Ftech\u002Fshopify-hydrogen-vs-liquid-metriki","tech",false,"","Shopify Hydrogen vs Liquid: решение на основе данных","TTFB 320ms, время сборки 12 минут, стоимость миграции $18K. Как мы приняли решение о переходе на Hydrogen, опираясь на метрики производительности и анализ затрат.","2026-05-31",[21,22,23,24,25],"shopify-hydrogen","headless-commerce","web-performance","liquid-templating","react-server-components",9,"Roibase",{"type":29,"children":30,"toc":1196},"root",[31,39,44,49,54,59,68,144,152,385,390,397,402,407,412,541,546,552,557,592,597,620,625,651,656,662,675,680,1051,1064,1069,1075,1091,1096,1101,1106,1112,1117,1170,1175,1180,1185,1190],{"type":32,"tag":33,"props":34,"children":35},"element","p",{},[36],{"type":37,"value":38},"text","Изменение frontend-стека Shopify-магазина — это всегда риск потери клиентов. В 2024 году мы провели проект миграции с Liquid на Hydrogen для бренда в сегменте fashion. Решение приняли на основе конкретных цифр: разница TTFB 320ms, время сборки 12 минут, прирост скорости разработки на 180%, общая стоимость миграции $18.000. В этой статье рассказываем, как мы собирали метрики, какие trade-off'ы принимали, и как реально выглядели цифры спустя два месяца после запуска.",{"type":32,"tag":33,"props":40,"children":41},{},[42],{"type":37,"value":43},"##液идея о том, что Liquid \"достаточно быстрый\" — это заблуждение",{"type":32,"tag":33,"props":45,"children":46},{},[47],{"type":37,"value":48},"Шаблоны Liquid действительно рендерятся быстро, но это не то же самое, что TTFB. Сервер Shopify обрабатывает файлы темы при каждом запросе, извлекает данные товаров из БД, рендерит секции. Среднее TTFB было на уровне 480ms (по данным RUM из Search Console). С Hydrogen на той же странице получалось 160ms. Разница в 320ms увеличила mobile conversion rate на 2,1% (A\u002FB тест, 14 дней, сегмент).",{"type":32,"tag":33,"props":50,"children":51},{},[52],{"type":37,"value":53},"Источник разницы TTFB: серверные компоненты Hydrogen работают на edge, из Storefront API мы запрашиваем только необходимые поля (GraphQL projection), процент попаданий в CDN кеш достиг 87%. С Liquid кеш только на уровне страницы, компонент-уровневого кеша нет, каждый запрос идет в backend.",{"type":32,"tag":33,"props":55,"children":56},{},[57],{"type":37,"value":58},"Сравнение кода — рендеринг одной сетки товаров:",{"type":32,"tag":33,"props":60,"children":61},{},[62],{"type":32,"tag":63,"props":64,"children":65},"strong",{},[66],{"type":37,"value":67},"Liquid (snippet):",{"type":32,"tag":69,"props":70,"children":74},"pre",{"className":71,"code":72,"language":73,"meta":16,"style":16},"language-liquid shiki shiki-themes github-dark","{% for product in collection.products %}\n  \u003Cdiv class=\"product-card\">\n    \u003Cimg src=\"{{ product.featured_image | img_url: '400x' }}\" alt=\"{{ product.title }}\">\n    \u003Ch3>{{ product.title }}\u003C\u002Fh3>\n    \u003Cspan>{{ product.price | money }}\u003C\u002Fspan>\n  \u003C\u002Fdiv>\n{% endfor %}\n","liquid",[75],{"type":32,"tag":76,"props":77,"children":78},"code",{"__ignoreMap":16},[79,90,99,108,117,126,135],{"type":32,"tag":80,"props":81,"children":84},"span",{"class":82,"line":83},"line",1,[85],{"type":32,"tag":80,"props":86,"children":87},{},[88],{"type":37,"value":89},"{% for product in collection.products %}\n",{"type":32,"tag":80,"props":91,"children":93},{"class":82,"line":92},2,[94],{"type":32,"tag":80,"props":95,"children":96},{},[97],{"type":37,"value":98},"  \u003Cdiv class=\"product-card\">\n",{"type":32,"tag":80,"props":100,"children":102},{"class":82,"line":101},3,[103],{"type":32,"tag":80,"props":104,"children":105},{},[106],{"type":37,"value":107},"    \u003Cimg src=\"{{ product.featured_image | img_url: '400x' }}\" alt=\"{{ product.title }}\">\n",{"type":32,"tag":80,"props":109,"children":111},{"class":82,"line":110},4,[112],{"type":32,"tag":80,"props":113,"children":114},{},[115],{"type":37,"value":116},"    \u003Ch3>{{ product.title }}\u003C\u002Fh3>\n",{"type":32,"tag":80,"props":118,"children":120},{"class":82,"line":119},5,[121],{"type":32,"tag":80,"props":122,"children":123},{},[124],{"type":37,"value":125},"    \u003Cspan>{{ product.price | money }}\u003C\u002Fspan>\n",{"type":32,"tag":80,"props":127,"children":129},{"class":82,"line":128},6,[130],{"type":32,"tag":80,"props":131,"children":132},{},[133],{"type":37,"value":134},"  \u003C\u002Fdiv>\n",{"type":32,"tag":80,"props":136,"children":138},{"class":82,"line":137},7,[139],{"type":32,"tag":80,"props":140,"children":141},{},[142],{"type":37,"value":143},"{% endfor %}\n",{"type":32,"tag":33,"props":145,"children":146},{},[147],{"type":32,"tag":63,"props":148,"children":149},{},[150],{"type":37,"value":151},"Hydrogen (RSC):",{"type":32,"tag":69,"props":153,"children":157},{"className":154,"code":155,"language":156,"meta":16,"style":16},"language-tsx shiki shiki-themes github-dark","export default async function ProductGrid({ collection }) {\n  const {products} = await storefront.query(PRODUCTS_QUERY, {\n    variables: {handle: collection}\n  });\n  \n  return products.nodes.map(p => (\n    \u003CProductCard key={p.id} product={p} \u002F>\n  ));\n}\n","tsx",[158],{"type":32,"tag":76,"props":159,"children":160},{"__ignoreMap":16},[161,208,267,275,283,291,327,368,377],{"type":32,"tag":80,"props":162,"children":163},{"class":82,"line":83},[164,170,175,180,185,191,197,203],{"type":32,"tag":80,"props":165,"children":167},{"style":166},"--shiki-default:#F97583",[168],{"type":37,"value":169},"export",{"type":32,"tag":80,"props":171,"children":172},{"style":166},[173],{"type":37,"value":174}," default",{"type":32,"tag":80,"props":176,"children":177},{"style":166},[178],{"type":37,"value":179}," async",{"type":32,"tag":80,"props":181,"children":182},{"style":166},[183],{"type":37,"value":184}," function",{"type":32,"tag":80,"props":186,"children":188},{"style":187},"--shiki-default:#B392F0",[189],{"type":37,"value":190}," ProductGrid",{"type":32,"tag":80,"props":192,"children":194},{"style":193},"--shiki-default:#E1E4E8",[195],{"type":37,"value":196},"({ ",{"type":32,"tag":80,"props":198,"children":200},{"style":199},"--shiki-default:#FFAB70",[201],{"type":37,"value":202},"collection",{"type":32,"tag":80,"props":204,"children":205},{"style":193},[206],{"type":37,"value":207}," }) {\n",{"type":32,"tag":80,"props":209,"children":210},{"class":82,"line":92},[211,216,221,227,232,237,242,247,252,257,262],{"type":32,"tag":80,"props":212,"children":213},{"style":166},[214],{"type":37,"value":215},"  const",{"type":32,"tag":80,"props":217,"children":218},{"style":193},[219],{"type":37,"value":220}," {",{"type":32,"tag":80,"props":222,"children":224},{"style":223},"--shiki-default:#79B8FF",[225],{"type":37,"value":226},"products",{"type":32,"tag":80,"props":228,"children":229},{"style":193},[230],{"type":37,"value":231},"} ",{"type":32,"tag":80,"props":233,"children":234},{"style":166},[235],{"type":37,"value":236},"=",{"type":32,"tag":80,"props":238,"children":239},{"style":166},[240],{"type":37,"value":241}," await",{"type":32,"tag":80,"props":243,"children":244},{"style":193},[245],{"type":37,"value":246}," storefront.",{"type":32,"tag":80,"props":248,"children":249},{"style":187},[250],{"type":37,"value":251},"query",{"type":32,"tag":80,"props":253,"children":254},{"style":193},[255],{"type":37,"value":256},"(",{"type":32,"tag":80,"props":258,"children":259},{"style":223},[260],{"type":37,"value":261},"PRODUCTS_QUERY",{"type":32,"tag":80,"props":263,"children":264},{"style":193},[265],{"type":37,"value":266},", {\n",{"type":32,"tag":80,"props":268,"children":269},{"class":82,"line":101},[270],{"type":32,"tag":80,"props":271,"children":272},{"style":193},[273],{"type":37,"value":274},"    variables: {handle: collection}\n",{"type":32,"tag":80,"props":276,"children":277},{"class":82,"line":110},[278],{"type":32,"tag":80,"props":279,"children":280},{"style":193},[281],{"type":37,"value":282},"  });\n",{"type":32,"tag":80,"props":284,"children":285},{"class":82,"line":119},[286],{"type":32,"tag":80,"props":287,"children":288},{"style":193},[289],{"type":37,"value":290},"  \n",{"type":32,"tag":80,"props":292,"children":293},{"class":82,"line":128},[294,299,304,309,313,317,322],{"type":32,"tag":80,"props":295,"children":296},{"style":166},[297],{"type":37,"value":298},"  return",{"type":32,"tag":80,"props":300,"children":301},{"style":193},[302],{"type":37,"value":303}," products.nodes.",{"type":32,"tag":80,"props":305,"children":306},{"style":187},[307],{"type":37,"value":308},"map",{"type":32,"tag":80,"props":310,"children":311},{"style":193},[312],{"type":37,"value":256},{"type":32,"tag":80,"props":314,"children":315},{"style":199},[316],{"type":37,"value":33},{"type":32,"tag":80,"props":318,"children":319},{"style":166},[320],{"type":37,"value":321}," =>",{"type":32,"tag":80,"props":323,"children":324},{"style":193},[325],{"type":37,"value":326}," (\n",{"type":32,"tag":80,"props":328,"children":329},{"class":82,"line":137},[330,335,340,345,349,354,359,363],{"type":32,"tag":80,"props":331,"children":332},{"style":193},[333],{"type":37,"value":334},"    \u003C",{"type":32,"tag":80,"props":336,"children":337},{"style":223},[338],{"type":37,"value":339},"ProductCard",{"type":32,"tag":80,"props":341,"children":342},{"style":187},[343],{"type":37,"value":344}," key",{"type":32,"tag":80,"props":346,"children":347},{"style":166},[348],{"type":37,"value":236},{"type":32,"tag":80,"props":350,"children":351},{"style":193},[352],{"type":37,"value":353},"{p.id} ",{"type":32,"tag":80,"props":355,"children":356},{"style":187},[357],{"type":37,"value":358},"product",{"type":32,"tag":80,"props":360,"children":361},{"style":166},[362],{"type":37,"value":236},{"type":32,"tag":80,"props":364,"children":365},{"style":193},[366],{"type":37,"value":367},"{p} \u002F>\n",{"type":32,"tag":80,"props":369,"children":371},{"class":82,"line":370},8,[372],{"type":32,"tag":80,"props":373,"children":374},{"style":193},[375],{"type":37,"value":376},"  ));\n",{"type":32,"tag":80,"props":378,"children":379},{"class":82,"line":26},[380],{"type":32,"tag":80,"props":381,"children":382},{"style":193},[383],{"type":37,"value":384},"}\n",{"type":32,"tag":33,"props":386,"children":387},{},[388],{"type":37,"value":389},"Версия с Liquid генерирует 18KB статического HTML (для 20 товаров). Hydrogen — 4.2KB JSON + гидратация 12KB. Объем передаваемых данных сократился на 65%. Кроме того, в Hydrogen товар-карточка — отдельный компонент, поэтому при A\u002FB-тестировании нам не нужно пересобирать весь шаблон.",{"type":32,"tag":391,"props":392,"children":394},"h2",{"id":393},"trade-off-времени-сборки-12-минут-vs-4-секунды",[395],{"type":37,"value":396},"Trade-off времени сборки: 12 минут vs 4 секунды",{"type":32,"tag":33,"props":398,"children":399},{},[400],{"type":37,"value":401},"Тему Liquid загружаешь через Shopify CLI — развертывается за 4 секунды. Hydrogen production-сборка запускает webpack + vite + prerender, среднее время 12 минут (на Vercel 8 минут, на self-hosted runner 14 минут). Это замедляет цикл обратной связи для разработчика?",{"type":32,"tag":33,"props":403,"children":404},{},[405],{"type":37,"value":406},"На практике нет — потому что режим разработки Hydrogen с hot reload отражает изменения за 180ms. С Liquid-темой нужно загружать в Shopify + обновлять браузер (в среднем 6 секунд на итерацию). Скорость разработки на Hydrogen выросла на 180% (по метрике внутреннего velocity: время от merge PR до развертывания на staging).",{"type":32,"tag":33,"props":408,"children":409},{},[410],{"type":37,"value":411},"Мы согласились с длительной production-сборкой, потому что в CI\u002FCD pipeline мы запускаем тесты и сборку параллельно. Когда push'ишь в staging-ветку, развертывание занимает 12 минут, но это одно развертывание. С Liquid каждое исправление требовало повторной загрузки. На Hydrogen у нас есть атомарное развертывание с откатом за 30 секунд.",{"type":32,"tag":413,"props":414,"children":415},"table",{},[416,445],{"type":32,"tag":417,"props":418,"children":419},"thead",{},[420],{"type":32,"tag":421,"props":422,"children":423},"tr",{},[424,430,435,440],{"type":32,"tag":425,"props":426,"children":427},"th",{},[428],{"type":37,"value":429},"Метрика",{"type":32,"tag":425,"props":431,"children":432},{},[433],{"type":37,"value":434},"Liquid",{"type":32,"tag":425,"props":436,"children":437},{},[438],{"type":37,"value":439},"Hydrogen",{"type":32,"tag":425,"props":441,"children":442},{},[443],{"type":37,"value":444},"Разница",{"type":32,"tag":446,"props":447,"children":448},"tbody",{},[449,473,496,518],{"type":32,"tag":421,"props":450,"children":451},{},[452,458,463,468],{"type":32,"tag":453,"props":454,"children":455},"td",{},[456],{"type":37,"value":457},"Цикл разработки (hot reload)",{"type":32,"tag":453,"props":459,"children":460},{},[461],{"type":37,"value":462},"6s",{"type":32,"tag":453,"props":464,"children":465},{},[466],{"type":37,"value":467},"180ms",{"type":32,"tag":453,"props":469,"children":470},{},[471],{"type":37,"value":472},"-97%",{"type":32,"tag":421,"props":474,"children":475},{},[476,481,486,491],{"type":32,"tag":453,"props":477,"children":478},{},[479],{"type":37,"value":480},"Production-сборка",{"type":32,"tag":453,"props":482,"children":483},{},[484],{"type":37,"value":485},"4s",{"type":32,"tag":453,"props":487,"children":488},{},[489],{"type":37,"value":490},"12мин",{"type":32,"tag":453,"props":492,"children":493},{},[494],{"type":37,"value":495},"+18000%",{"type":32,"tag":421,"props":497,"children":498},{},[499,504,509,514],{"type":32,"tag":453,"props":500,"children":501},{},[502],{"type":37,"value":503},"Время отката",{"type":32,"tag":453,"props":505,"children":506},{},[507],{"type":37,"value":508},"Вручную (15+ мин)",{"type":32,"tag":453,"props":510,"children":511},{},[512],{"type":37,"value":513},"30s",{"type":32,"tag":453,"props":515,"children":516},{},[517],{"type":37,"value":472},{"type":32,"tag":421,"props":519,"children":520},{},[521,526,531,536],{"type":32,"tag":453,"props":522,"children":523},{},[524],{"type":37,"value":525},"Настройка A\u002FB-теста",{"type":32,"tag":453,"props":527,"children":528},{},[529],{"type":37,"value":530},"Дублирование темы",{"type":32,"tag":453,"props":532,"children":533},{},[534],{"type":37,"value":535},"Feature flag",{"type":32,"tag":453,"props":537,"children":538},{},[539],{"type":37,"value":540},"+60% в velocity",{"type":32,"tag":33,"props":542,"children":543},{},[544],{"type":37,"value":545},"Сборка занимает больше времени, но частота развертывания упала. С Liquid мы делали 8-12 minor development'ов в день (изменение CSS, копирования). На Hydrogen — feature-ветка + тест на staging + одно production-развертывание. Еженедельное количество развертываний снизилось с 42 до 6, но количество ошибок упало на 73%.",{"type":32,"tag":391,"props":547,"children":549},{"id":548},"стоимость-миграции-18k-и-6-недель",[550],{"type":37,"value":551},"Стоимость миграции: $18K и 6 недель",{"type":32,"tag":33,"props":553,"children":554},{},[555],{"type":37,"value":556},"Расходы на переход с Liquid-темы на Hydrogen:",{"type":32,"tag":558,"props":559,"children":560},"ul",{},[561,572,582],{"type":32,"tag":562,"props":563,"children":564},"li",{},[565,570],{"type":32,"tag":63,"props":566,"children":567},{},[568],{"type":37,"value":569},"Разработка:",{"type":37,"value":571}," 240 часов × $75\u002Fчас = $18.000",{"type":32,"tag":562,"props":573,"children":574},{},[575,580],{"type":32,"tag":63,"props":576,"children":577},{},[578],{"type":37,"value":579},"Инфраструктура:",{"type":37,"value":581}," Vercel Pro $20\u002Fмес + Shopify Plus (уже был)",{"type":32,"tag":562,"props":583,"children":584},{},[585,590],{"type":32,"tag":63,"props":586,"children":587},{},[588],{"type":37,"value":589},"Буфер риска:",{"type":37,"value":591}," 2 недели параллельной работы (двойная стоимость инфраструктуры)",{"type":32,"tag":33,"props":593,"children":594},{},[595],{"type":37,"value":596},"Расписание 240 часов:",{"type":32,"tag":558,"props":598,"children":599},{},[600,605,610,615],{"type":32,"tag":562,"props":601,"children":602},{},[603],{"type":37,"value":604},"Преобразование компонентов (120 часов): Liquid snippet'ы в React-компоненты",{"type":32,"tag":562,"props":606,"children":607},{},[608],{"type":37,"value":609},"Интеграция Storefront API (40 часов): оптимизация GraphQL-запросов",{"type":32,"tag":562,"props":611,"children":612},{},[613],{"type":37,"value":614},"Тестирование + QA (50 часов): тесты на регрессию, кроссбраузерность",{"type":32,"tag":562,"props":616,"children":617},{},[618],{"type":37,"value":619},"Оптимизация производительности (30 часов): code splitting, ленивая загрузка, стратегия preload",{"type":32,"tag":33,"props":621,"children":622},{},[623],{"type":37,"value":624},"На время миграции Liquid-тема оставалась в production, Hydrogen тестировался на staging. Корзина и checkout остались native Shopify (Hydrogen их оборачивает). В воронке конверсии не было никаких breaking changes.",{"type":32,"tag":33,"props":626,"children":627},{},[628,633,635,641,643,649],{"type":32,"tag":63,"props":629,"children":630},{},[631],{"type":37,"value":632},"Неожиданные расходы:",{"type":37,"value":634}," оптимизация изображений. С Liquid Shopify CDN автоматически передает WebP. На Hydrogen используем компонент изображений из ",{"type":32,"tag":76,"props":636,"children":638},{"className":637},[],[639],{"type":37,"value":640},"@shopify\u002Fhydrogen",{"type":37,"value":642},", но нужна ручная настройка ",{"type":32,"tag":76,"props":644,"children":646},{"className":645},[],[647],{"type":37,"value":648},"srcset",{"type":37,"value":650},". Это заняло 12 дополнительных часов.",{"type":32,"tag":33,"props":652,"children":653},{},[654],{"type":37,"value":655},"ROI от миграции: в первые 3 месяца улучшение Core Web Vitals привело к росту органического трафика на 8,4%, increase в conversion rate 2,1%. Простой расчет: 120K посетителей в месяц × 2,1% lift конверсии × $85 AOV = $21.420 дополнительного дохода. Стоимость миграции окупилась за 45 дней.",{"type":32,"tag":391,"props":657,"children":659},{"id":658},"скорость-разработки-typescript-переиспользование-компонентов-feature-flags",[660],{"type":37,"value":661},"Скорость разработки: TypeScript, переиспользование компонентов, feature flags",{"type":32,"tag":33,"props":663,"children":664},{},[665,667,673],{"type":37,"value":666},"Liquid — нетипизированный язык шаблонов. Напишешь ",{"type":32,"tag":76,"props":668,"children":670},{"className":669},[],[671],{"type":37,"value":672},"product.price",{"type":37,"value":674}," — не знаешь, упадет ли это в runtime. Hydrogen использует TypeScript + GraphQL Codegen, типы ответов API генерируются автоматически. Это одно сократило количество ошибок на 40% (метрика pre-production QA).",{"type":32,"tag":33,"props":676,"children":677},{},[678],{"type":37,"value":679},"Переиспользование компонентов: в Liquid есть include для snippet'ов, но управления состоянием нет. На Hydrogen используем React context + Remix loader. Пример: предпочтение пользователя (язык, валюта). С Liquid нужно читать cookie, парсить в каждом шаблоне. На Hydrogen читаешь один раз в loader, пишешь в context, все компоненты автоматически имеют доступ.",{"type":32,"tag":69,"props":681,"children":683},{"className":154,"code":682,"language":156,"meta":16,"style":16},"\u002F\u002F app\u002Froot.tsx - Hydrogen loader\nexport async function loader({context, request}: LoaderArgs) {\n  const customerAccessToken = await context.session.get('customerAccessToken');\n  const customer = customerAccessToken \n    ? await getCustomer(context.storefront, customerAccessToken)\n    : null;\n  \n  return json({customer});\n}\n\n\u002F\u002F Любой компонент\nimport {useLoaderData} from '@remix-run\u002Freact';\n\nexport default function Header() {\n  const {customer} = useLoaderData();\n  return \u003Cdiv>Привет, {customer?.firstName}\u003C\u002Fdiv>;\n}\n",[684],{"type":32,"tag":76,"props":685,"children":686},{"__ignoreMap":16},[687,696,756,802,823,845,863,870,887,894,904,913,941,949,975,1010,1043],{"type":32,"tag":80,"props":688,"children":689},{"class":82,"line":83},[690],{"type":32,"tag":80,"props":691,"children":693},{"style":692},"--shiki-default:#6A737D",[694],{"type":37,"value":695},"\u002F\u002F app\u002Froot.tsx - Hydrogen loader\n",{"type":32,"tag":80,"props":697,"children":698},{"class":82,"line":92},[699,703,707,711,716,721,726,731,736,741,746,751],{"type":32,"tag":80,"props":700,"children":701},{"style":166},[702],{"type":37,"value":169},{"type":32,"tag":80,"props":704,"children":705},{"style":166},[706],{"type":37,"value":179},{"type":32,"tag":80,"props":708,"children":709},{"style":166},[710],{"type":37,"value":184},{"type":32,"tag":80,"props":712,"children":713},{"style":187},[714],{"type":37,"value":715}," loader",{"type":32,"tag":80,"props":717,"children":718},{"style":193},[719],{"type":37,"value":720},"({",{"type":32,"tag":80,"props":722,"children":723},{"style":199},[724],{"type":37,"value":725},"context",{"type":32,"tag":80,"props":727,"children":728},{"style":193},[729],{"type":37,"value":730},", ",{"type":32,"tag":80,"props":732,"children":733},{"style":199},[734],{"type":37,"value":735},"request",{"type":32,"tag":80,"props":737,"children":738},{"style":193},[739],{"type":37,"value":740},"}",{"type":32,"tag":80,"props":742,"children":743},{"style":166},[744],{"type":37,"value":745},":",{"type":32,"tag":80,"props":747,"children":748},{"style":187},[749],{"type":37,"value":750}," LoaderArgs",{"type":32,"tag":80,"props":752,"children":753},{"style":193},[754],{"type":37,"value":755},") {\n",{"type":32,"tag":80,"props":757,"children":758},{"class":82,"line":101},[759,763,768,773,777,782,787,791,797],{"type":32,"tag":80,"props":760,"children":761},{"style":166},[762],{"type":37,"value":215},{"type":32,"tag":80,"props":764,"children":765},{"style":223},[766],{"type":37,"value":767}," customerAccessToken",{"type":32,"tag":80,"props":769,"children":770},{"style":166},[771],{"type":37,"value":772}," =",{"type":32,"tag":80,"props":774,"children":775},{"style":166},[776],{"type":37,"value":241},{"type":32,"tag":80,"props":778,"children":779},{"style":193},[780],{"type":37,"value":781}," context.session.",{"type":32,"tag":80,"props":783,"children":784},{"style":187},[785],{"type":37,"value":786},"get",{"type":32,"tag":80,"props":788,"children":789},{"style":193},[790],{"type":37,"value":256},{"type":32,"tag":80,"props":792,"children":794},{"style":793},"--shiki-default:#9ECBFF",[795],{"type":37,"value":796},"'customerAccessToken'",{"type":32,"tag":80,"props":798,"children":799},{"style":193},[800],{"type":37,"value":801},");\n",{"type":32,"tag":80,"props":803,"children":804},{"class":82,"line":110},[805,809,814,818],{"type":32,"tag":80,"props":806,"children":807},{"style":166},[808],{"type":37,"value":215},{"type":32,"tag":80,"props":810,"children":811},{"style":223},[812],{"type":37,"value":813}," customer",{"type":32,"tag":80,"props":815,"children":816},{"style":166},[817],{"type":37,"value":772},{"type":32,"tag":80,"props":819,"children":820},{"style":193},[821],{"type":37,"value":822}," customerAccessToken \n",{"type":32,"tag":80,"props":824,"children":825},{"class":82,"line":119},[826,831,835,840],{"type":32,"tag":80,"props":827,"children":828},{"style":166},[829],{"type":37,"value":830},"    ?",{"type":32,"tag":80,"props":832,"children":833},{"style":166},[834],{"type":37,"value":241},{"type":32,"tag":80,"props":836,"children":837},{"style":187},[838],{"type":37,"value":839}," getCustomer",{"type":32,"tag":80,"props":841,"children":842},{"style":193},[843],{"type":37,"value":844},"(context.storefront, customerAccessToken)\n",{"type":32,"tag":80,"props":846,"children":847},{"class":82,"line":128},[848,853,858],{"type":32,"tag":80,"props":849,"children":850},{"style":166},[851],{"type":37,"value":852},"    :",{"type":32,"tag":80,"props":854,"children":855},{"style":223},[856],{"type":37,"value":857}," null",{"type":32,"tag":80,"props":859,"children":860},{"style":193},[861],{"type":37,"value":862},";\n",{"type":32,"tag":80,"props":864,"children":865},{"class":82,"line":137},[866],{"type":32,"tag":80,"props":867,"children":868},{"style":193},[869],{"type":37,"value":290},{"type":32,"tag":80,"props":871,"children":872},{"class":82,"line":370},[873,877,882],{"type":32,"tag":80,"props":874,"children":875},{"style":166},[876],{"type":37,"value":298},{"type":32,"tag":80,"props":878,"children":879},{"style":187},[880],{"type":37,"value":881}," json",{"type":32,"tag":80,"props":883,"children":884},{"style":193},[885],{"type":37,"value":886},"({customer});\n",{"type":32,"tag":80,"props":888,"children":889},{"class":82,"line":26},[890],{"type":32,"tag":80,"props":891,"children":892},{"style":193},[893],{"type":37,"value":384},{"type":32,"tag":80,"props":895,"children":897},{"class":82,"line":896},10,[898],{"type":32,"tag":80,"props":899,"children":901},{"emptyLinePlaceholder":900},true,[902],{"type":37,"value":903},"\n",{"type":32,"tag":80,"props":905,"children":907},{"class":82,"line":906},11,[908],{"type":32,"tag":80,"props":909,"children":910},{"style":692},[911],{"type":37,"value":912},"\u002F\u002F Любой компонент\n",{"type":32,"tag":80,"props":914,"children":916},{"class":82,"line":915},12,[917,922,927,932,937],{"type":32,"tag":80,"props":918,"children":919},{"style":166},[920],{"type":37,"value":921},"import",{"type":32,"tag":80,"props":923,"children":924},{"style":193},[925],{"type":37,"value":926}," {useLoaderData} ",{"type":32,"tag":80,"props":928,"children":929},{"style":166},[930],{"type":37,"value":931},"from",{"type":32,"tag":80,"props":933,"children":934},{"style":793},[935],{"type":37,"value":936}," '@remix-run\u002Freact'",{"type":32,"tag":80,"props":938,"children":939},{"style":193},[940],{"type":37,"value":862},{"type":32,"tag":80,"props":942,"children":944},{"class":82,"line":943},13,[945],{"type":32,"tag":80,"props":946,"children":947},{"emptyLinePlaceholder":900},[948],{"type":37,"value":903},{"type":32,"tag":80,"props":950,"children":952},{"class":82,"line":951},14,[953,957,961,965,970],{"type":32,"tag":80,"props":954,"children":955},{"style":166},[956],{"type":37,"value":169},{"type":32,"tag":80,"props":958,"children":959},{"style":166},[960],{"type":37,"value":174},{"type":32,"tag":80,"props":962,"children":963},{"style":166},[964],{"type":37,"value":184},{"type":32,"tag":80,"props":966,"children":967},{"style":187},[968],{"type":37,"value":969}," Header",{"type":32,"tag":80,"props":971,"children":972},{"style":193},[973],{"type":37,"value":974},"() {\n",{"type":32,"tag":80,"props":976,"children":978},{"class":82,"line":977},15,[979,983,987,992,996,1000,1005],{"type":32,"tag":80,"props":980,"children":981},{"style":166},[982],{"type":37,"value":215},{"type":32,"tag":80,"props":984,"children":985},{"style":193},[986],{"type":37,"value":220},{"type":32,"tag":80,"props":988,"children":989},{"style":223},[990],{"type":37,"value":991},"customer",{"type":32,"tag":80,"props":993,"children":994},{"style":193},[995],{"type":37,"value":231},{"type":32,"tag":80,"props":997,"children":998},{"style":166},[999],{"type":37,"value":236},{"type":32,"tag":80,"props":1001,"children":1002},{"style":187},[1003],{"type":37,"value":1004}," useLoaderData",{"type":32,"tag":80,"props":1006,"children":1007},{"style":193},[1008],{"type":37,"value":1009},"();\n",{"type":32,"tag":80,"props":1011,"children":1013},{"class":82,"line":1012},16,[1014,1018,1023,1029,1034,1038],{"type":32,"tag":80,"props":1015,"children":1016},{"style":166},[1017],{"type":37,"value":298},{"type":32,"tag":80,"props":1019,"children":1020},{"style":193},[1021],{"type":37,"value":1022}," \u003C",{"type":32,"tag":80,"props":1024,"children":1026},{"style":1025},"--shiki-default:#85E89D",[1027],{"type":37,"value":1028},"div",{"type":32,"tag":80,"props":1030,"children":1031},{"style":193},[1032],{"type":37,"value":1033},">Привет, {customer?.firstName}\u003C\u002F",{"type":32,"tag":80,"props":1035,"children":1036},{"style":1025},[1037],{"type":37,"value":1028},{"type":32,"tag":80,"props":1039,"children":1040},{"style":193},[1041],{"type":37,"value":1042},">;\n",{"type":32,"tag":80,"props":1044,"children":1046},{"class":82,"line":1045},17,[1047],{"type":32,"tag":80,"props":1048,"children":1049},{"style":193},[1050],{"type":37,"value":384},{"type":32,"tag":33,"props":1052,"children":1053},{},[1054,1056,1062],{"type":37,"value":1055},"С Liquid логику ",{"type":32,"tag":76,"props":1057,"children":1059},{"className":1058},[],[1060],{"type":37,"value":1061},"{% if customer %}",{"type":37,"value":1063}," повторяли в каждом шаблоне. Количество компонентов с 180 сократилось до 52 (за счет переиспользования).",{"type":32,"tag":33,"props":1065,"children":1066},{},[1067],{"type":37,"value":1068},"Система feature flags: раньше для A\u002FB-теста создавали дубликат темы и делили трафик. На Hydrogen environment variable + интеграция LaunchDarkly. В одной сборке можем включить-отключить feature. Время настройки A\u002FB-теста упало с 2 дней до 15 минут.",{"type":32,"tag":391,"props":1070,"children":1072},{"id":1071},"headless-commerce-и-место-hydrogen",[1073],{"type":37,"value":1074},"Headless Commerce и место Hydrogen",{"type":32,"tag":33,"props":1076,"children":1077},{},[1078,1080,1089],{"type":37,"value":1079},"Hydrogen — официальный headless фреймворк Shopify, но только часть headless-архитектуры. В нашем подходе ",{"type":32,"tag":1081,"props":1082,"children":1086},"a",{"href":1083,"rel":1084},"https:\u002F\u002Fwww.roibase.com.tr\u002Fru\u002Fheadless",[1085],"nofollow",[1087],{"type":37,"value":1088},"Headless Commerce",{"type":37,"value":1090}," Hydrogen — слой фронтенда, Storefront API — слой данных, Vercel edge network — слой доставки. Вместе они создают composable stack.",{"type":32,"tag":33,"props":1092,"children":1093},{},[1094],{"type":37,"value":1095},"Hydrogen выбрали из-за поддержки React Server Components. С RSC fetch данных происходит на сервере, bundle JavaScript с 60KB сократился до 12KB. Это критично для мобильных — на 3G соединении время парсинга упало на 75% (Lighthouse lab data).",{"type":32,"tag":33,"props":1097,"children":1098},{},[1099],{"type":37,"value":1100},"Альтернативы: Next.js Commerce, Remix + custom setup, Vue Storefront. Next.js Commerce сильная интеграция Shopify, но не такая opinioned как Hydrogen, кеш-стратегию пришлось бы писать самим. Remix — generic фреймворк, паттернов e-commerce нет. Hydrogen Shopify-first подход, встроенно поддерживает корзину, checkout, metaobject'ы и другое специфичное для Shopify.",{"type":32,"tag":33,"props":1102,"children":1103},{},[1104],{"type":37,"value":1105},"Trade-off: Hydrogen привязывает вас к экосистеме Shopify. Если нужна multi-source commerce (Shopify + кастомная система инвентаря), Remix гибче. Нам хватило single-source Shopify.",{"type":32,"tag":391,"props":1107,"children":1109},{"id":1108},"спустя-два-месяца-реальная-производительность",[1110],{"type":37,"value":1111},"Спустя два месяца — реальная производительность",{"type":32,"tag":33,"props":1113,"children":1114},{},[1115],{"type":37,"value":1116},"60 дней после миграции метрики:",{"type":32,"tag":558,"props":1118,"children":1119},{},[1120,1130,1140,1150,1160],{"type":32,"tag":562,"props":1121,"children":1122},{},[1123,1128],{"type":32,"tag":63,"props":1124,"children":1125},{},[1126],{"type":37,"value":1127},"TTFB:",{"type":37,"value":1129}," 160ms в среднем (цель 150ms, 93% попадания)",{"type":32,"tag":562,"props":1131,"children":1132},{},[1133,1138],{"type":32,"tag":63,"props":1134,"children":1135},{},[1136],{"type":37,"value":1137},"LCP:",{"type":37,"value":1139}," 1.2s (с Liquid было 2.8s)",{"type":32,"tag":562,"props":1141,"children":1142},{},[1143,1148],{"type":32,"tag":63,"props":1144,"children":1145},{},[1146],{"type":37,"value":1147},"CLS:",{"type":37,"value":1149}," 0.02 (практически нет layout shift — благодаря SSR)",{"type":32,"tag":562,"props":1151,"children":1152},{},[1153,1158],{"type":32,"tag":63,"props":1154,"children":1155},{},[1156],{"type":37,"value":1157},"TBT:",{"type":37,"value":1159}," 90ms (с Liquid было 420ms)",{"type":32,"tag":562,"props":1161,"children":1162},{},[1163,1168],{"type":32,"tag":63,"props":1164,"children":1165},{},[1166],{"type":37,"value":1167},"Стоимость сервера:",{"type":37,"value":1169}," использование Vercel $47\u002Fмес (Shopify hosting $0 — включено в Plus plan)",{"type":32,"tag":33,"props":1171,"children":1172},{},[1173],{"type":37,"value":1174},"Неожиданный прирост: благодаря edge-кешированию на Black Friday (4x нормального трафика) ноль проблем с масштабированием. На Liquid-теме сервер Shopify при 200+ одновременных запросах начинал throttling. На Hydrogen edge автоматически масштабируется.",{"type":32,"tag":33,"props":1176,"children":1177},{},[1178],{"type":37,"value":1179},"Неожиданная сложность: интеграция third-party script'ов. Google Tag Manager, Meta Pixel загружают client-side JS, это снижает преимущество RSC. Перенесли в web worker с помощью Partytown, но setup занял 8 часов.",{"type":32,"tag":33,"props":1181,"children":1182},{},[1183],{"type":37,"value":1184},"Влияние на конверсию: +2,1% в целом, +3,8% в мобильном сегменте. Органический трафик +8,4% (из-за улучшения Core Web Vitals и подъема в ранжировании). Цена за клик в paid-трафике не изменилась, но bounce rate на лендинге упал на 12%.",{"type":32,"tag":33,"props":1186,"children":1187},{},[1188],{"type":37,"value":1189},"Hydrogen подойдет не всем. Если каталог маленький (\u003C500 товаров), трафик низкий (\u003C10K в месяц), dev-ресурсы ограничены — Liquid достаточна. Но если масштаб средний-большой, мобильная аудитория, агрессивные performance-цели — trade-off времени сборки Hydrogen приемлем. В нашем case разница TTFB и рост velocity разработки окупили стоимость миграции за 45 дней. Спустя два месяца метрики подтвердили, что Hydrogen — не переинженерное решение, а обоснованный выбор.",{"type":32,"tag":1191,"props":1192,"children":1193},"style",{},[1194],{"type":37,"value":1195},"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":101,"depth":101,"links":1197},[1198,1199,1200,1201,1202],{"id":393,"depth":92,"text":396},{"id":548,"depth":92,"text":551},{"id":658,"depth":92,"text":661},{"id":1071,"depth":92,"text":1074},{"id":1108,"depth":92,"text":1111},"markdown","content:ru:tech:shopify-hydrogen-vs-liquid-metriki.md","content","ru\u002Ftech\u002Fshopify-hydrogen-vs-liquid-metriki.md","ru\u002Ftech\u002Fshopify-hydrogen-vs-liquid-metriki","md",1782079503078]