[{"data":1,"prerenderedAt":342},["ShallowReactive",2],{"e1IR4tiGxS":3},[4],{"id":5,"date":6,"date_gmt":7,"guid":8,"modified":10,"modified_gmt":11,"slug":12,"status":13,"type":14,"link":15,"title":16,"content":18,"excerpt":21,"author":23,"featured_media":24,"comment_status":25,"ping_status":25,"sticky":20,"template":26,"format":27,"meta":28,"categories":30,"tags":32,"class_list":33,"acf":41,"yoast_head":42,"yoast_head_json":43,"featured_media_src_url":60,"_links":137,"_embedded":185},1842,"2026-05-17T15:06:11","2026-05-17T12:06:11",{"rendered":9},"https://api.aoskin.ru/?p=1842","2026-06-21T18:21:13","2026-06-21T15:21:13","ssr-ssg-isr-i-hybrid-rendering-sovremennaya-frontend-arhitektura","publish","post","https://api.aoskin.ru/ssr-ssg-isr-i-hybrid-rendering-sovremennaya-frontend-arhitektura/",{"rendered":17},"SSR, SSG, ISR и Hybrid Rendering: современная frontend-архитектура",{"rendered":19,"protected":20},"\n\u003Cp class=\"wp-block-paragraph\">В 2026 году нужно мыслить не категориями SSR лучше SSG или Next лучше Nuxt, а категориями \u003Cstrong>стоимости запроса, свежести данных, SEO, персонализации, кеширования, инфраструктуры и UX\u003C/strong>.\u003C/p>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">Главная идея: рендеринг &#8211; это не где собрать HTML, а про жизненный цикл данных\u003C/h2>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Когда мы говорим SSR, SSG, ISR или hybrid rendering, на самом деле мы обсуждаем несколько вопросов:\u003C/p>\n\n\n\n\u003Col class=\"wp-block-list\">\n\u003Cli>\u003Cstrong>Когда создается HTML?\u003C/strong>\n\u003Cul class=\"wp-block-list\">\n\u003Cli>Во время билда, на сервере при запросе, заранее, по расписанию или частично. \u003C/li>\n\u003C/ul>\n\u003C/li>\n\n\n\n\u003Cli>\u003Cstrong>Где выполняется код?\u003C/strong>\n\u003Cul class=\"wp-block-list\">\n\u003Cli>В браузере, на сервере, на edge/CDN, в serverless-функции или в Node-сервере. \u003C/li>\n\u003C/ul>\n\u003C/li>\n\n\n\n\u003Cli>\u003Cstrong>Как часто обновляются данные?\u003C/strong>\n\u003Cul class=\"wp-block-list\">\n\u003Cli>Никогда до нового деплоя, раз в N секунд, по событию, на каждый запрос или только для конкретного пользователя. \u003C/li>\n\u003C/ul>\n\u003C/li>\n\n\n\n\u003Cli>\u003Cstrong>Что кешируется?\u003C/strong>\n\u003Cul class=\"wp-block-list\">\n\u003Cli>HTML, JSON payload, результат fetch-запроса, компонент, route-level response, CDN shell. \u003C/li>\n\u003C/ul>\n\u003C/li>\n\n\n\n\u003Cli>\u003Cstrong>Что видит пользователь первым?\u003C/strong>\n\u003Cul class=\"wp-block-list\">\n\u003Cli>Пустой div, готовую страницу, skeleton, статический shell или потоково догружаемые части интерфейса.\u003C/li>\n\u003C/ul>\n\u003C/li>\n\u003C/ol>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Именно поэтому современные фреймворки постепенно двигаются от стратегии \u003Cem>одна страница = один режим\u003C/em> к модели, где \u003Cstrong>разные части одной страницы могут иметь разное поведение\u003C/strong>. В Next.js это направление видно через Partial Prerendering и Cache Components, где статический shell может отдаваться сразу, а динамические части &#8211; дорендериваться и стримиться позже. В документации \u003Ca href=\"https://nextjs.org/docs/app/guides/ppr-platform-guide\">Next.js PPR\u003C/a> описан как подход, при котором на этапе билда создается статический HTML shell, а динамические части рендерятся на запросе и передаются клиенту потоком.\u003C/p>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">SSR &#8211; Server-Side Rendering\u003C/h2>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">\u003Cstrong>SSR\u003C/strong> &#8211; это рендеринг HTML на сервере при каждом запросе пользователя.\u003C/p>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Например: пользователь открыл /catalog → Сервер получил запрос → Сервер запросил данные → Сервер собрал HTML → Браузер получил готовую страницу → JS гидратировал интерфейс\u003C/p>\n\n\n\n\u003Ch3 class=\"wp-block-heading\">Когда SSR хорош\u003C/h3>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">SSR нужен там, где важны:\u003C/p>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>SEO; \u003C/li>\n\n\n\n\u003Cli>свежие данные; \u003C/li>\n\n\n\n\u003Cli>персонализация; \u003C/li>\n\n\n\n\u003Cli>авторизация; \u003C/li>\n\n\n\n\u003Cli>зависимость от cookies, \u003C/li>\n\n\n\n\u003Cli>headers, session; \u003C/li>\n\n\n\n\u003Cli>динамическая выдача; \u003C/li>\n\n\n\n\u003Cli>страницы, которые нельзя корректно подготовить заранее.\u003C/li>\n\u003C/ul>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Пример:\u003C/p>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>/account/orders\u003C/li>\n\n\n\n\u003Cli>/search?query=&#8230;\u003C/li>\n\n\n\n\u003Cli>/catalog?city=moscow\u003C/li>\n\u003C/ul>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">SSR отлично подходит для страниц, где результат зависит от текущего пользователя или текущего запроса.\u003C/p>\n\n\n\n\u003Ch3 class=\"wp-block-heading\">Пример SSR в Nuxt\u003C/h3>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">В Nuxt универсальный рендеринг включен по умолчанию. При первом запросе страница рендерится на сервере, а затем на клиенте происходит hydration. Nuxt также поддерживает гибридные правила на уровне маршрутов через \u003Ccode>routeRules\u003C/code>, позволяя менять поведение отдельных URL.\u003C/p>\n\n\n\n\u003Cdiv class=\"hcb_wrap\">\u003Cpre class=\"prism line-numbers lang-js\" data-lang=\"JavaScript\">\u003Ccode>export default defineNuxtConfig({\n  ssr: true,\n})\u003C/code>\u003C/pre>\u003C/div>\n\n\n\n\u003Cdiv class=\"hcb_wrap\">\u003Cpre class=\"prism line-numbers lang-js\" data-lang=\"JavaScript\">\u003Ccode>&lt;script setup lang=&quot;ts&quot;&gt;\nconst { data: product } = await useFetch(&#39;/api/products/products-1&#39;)\n&lt;/script&gt;\n\n&lt;template&gt;\n  &lt;main&gt;\n    &lt;h1&gt;{{ product?.title }}&lt;/h1&gt;\n    &lt;p&gt;{{ product?.description }}&lt;/p&gt;\n  &lt;/main&gt;\n&lt;/template&gt;\u003C/code>\u003C/pre>\u003C/div>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">При SSR пользователь получает HTML уже с названием и описанием товара. Это хорошо для SEO и первого отображения.\u003C/p>\n\n\n\n\u003Ch3 class=\"wp-block-heading\">Минусы SSR\u003C/h3>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">SSR не бесплатен. У него есть цена:\u003C/p>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>сервер работает на каждый запрос;\u003C/li>\n\n\n\n\u003Cli>выше TTFB при медленных API;\u003C/li>\n\n\n\n\u003Cli>нужна инфраструктура;\u003C/li>\n\n\n\n\u003Cli>сложнее кеширование;\u003C/li>\n\n\n\n\u003Cli>больше рисков при падении backend API;\u003C/li>\n\n\n\n\u003Cli>hydration может быть дорогой на слабых устройствах.\u003C/li>\n\u003C/ul>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Главная ошибка &#8211; включить SSR на все страницы без понимания, что именно должно быть динамическим. SSR &#8211; это не волшебная кнопка производительности. Если сервер каждый раз ходит в медленную CMS, CRM или внешний API, пользователь будет ждать. В этом случае лучше подумать о кешировании, ISR, SWR, CDN или частичной статике.\u003C/p>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">SSG &#8211; Static Site Generation\u003C/h2>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">\u003Cstrong>SSG\u003C/strong> &#8211; это генерация HTML на этапе сборки проекта.\u003C/p>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Например: npm run build → Фреймворк заранее генерирует HTML → HTML кладется в dist/output → CDN или сервер отдает готовые файлы\u003C/p>\n\n\n\n\u003Ch3 class=\"wp-block-heading\">Когда SSG хорош\u003C/h3>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">SSG идеален для страниц, которые редко меняются:\u003C/p>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>/about\u003C/li>\n\n\n\n\u003Cli>/services\u003C/li>\n\n\n\n\u003Cli>/docs/getting-started\u003C/li>\n\u003C/ul>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Это отличный выбор для:\u003C/p>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>блогов; \u003C/li>\n\n\n\n\u003Cli>документации; \u003C/li>\n\n\n\n\u003Cli>лендингов; \u003C/li>\n\n\n\n\u003Cli>корпоративных сайтов; \u003C/li>\n\n\n\n\u003Cli>портфолио; \u003C/li>\n\n\n\n\u003Cli>маркетинговых страниц; \u003C/li>\n\n\n\n\u003Cli>страниц услуг; \u003C/li>\n\n\n\n\u003Cli>SEO-контента.\u003C/li>\n\u003C/ul>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Пользователь получает готовый HTML почти мгновенно, а серверу не нужно каждый раз собирать страницу заново.\u003C/p>\n\n\n\n\u003Ch3 class=\"wp-block-heading\">Пример SSG в Nuxt\u003C/h3>\n\n\n\n\u003Cdiv class=\"hcb_wrap\">\u003Cpre class=\"prism line-numbers lang-js\" data-lang=\"JavaScript\">\u003Ccode>export default defineNuxtConfig({\n  nitro: {\n    prerender: {\n      routes: [&#39;/&#39;, &#39;/about&#39;, &#39;/services&#39;]\n    }\n  }\n})\u003C/code>\u003C/pre>\u003C/div>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Или через route rules:\u003C/p>\n\n\n\n\u003Cdiv class=\"hcb_wrap\">\u003Cpre class=\"prism line-numbers lang-js\" data-lang=\"JavaScript\">\u003Ccode>export default defineNuxtConfig({\n  routeRules: {\n    &#39;/&#39;: { prerender: true },\n    &#39;/blog/**&#39;: { prerender: true },\n  }\n})\u003C/code>\u003C/pre>\u003C/div>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Nuxt позволяет указывать разные правила для разных маршрутов: например, главную страницу можно prerender-ить, блог кешировать через ISR, а админку рендерить только на клиенте. Такой подход официально описан в \u003Ca href=\"https://nuxt.com/docs/4.x/guide/concepts/rendering\">Nuxt\u003C/a> как Hybrid Rendering через \u003Ccode>routeRules\u003C/code>.\u003C/p>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">ISR &#8211; Incremental Static Regeneration\u003C/h2>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">\u003Cstrong>ISR\u003C/strong> &#8211; это компромисс между SSG и SSR.\u003C/p>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Страница генерируется как статическая, но может обновляться после деплоя: по времени, по запросу или по событию.\u003C/p>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Например: Первый пользователь открыл /blog/post-1 → Если страницы нет &#8211; она генерируется → Следующие пользователи получают кешированную версию → Через N секунд или после события страница обновляется\u003C/p>\n\n\n\n\u003Ch3 class=\"wp-block-heading\">Зачем нужен ISR\u003C/h3>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">ISR решает главную проблему SSG: не нужно пересобирать весь сайт ради одной измененной страницы.\u003C/p>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Например, есть блог, новости, каталог услуг или страницы номеров отеля. Контент меняется, но не каждую секунду. SSR на каждый запрос избыточен, а полный rebuild слишком дорогой.\u003C/p>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">ISR позволяет сказать &#8211; обновляй ее раз в 60 секунд / 10 минут / 1 час / по событию.\u003C/p>\n\n\n\n\u003Ch3 class=\"wp-block-heading\">Пример ISR в Nuxt\u003C/h3>\n\n\n\n\u003Cdiv class=\"hcb_wrap\">\u003Cpre class=\"prism line-numbers lang-js\" data-lang=\"JavaScript\">\u003Ccode>export default defineNuxtConfig({\n  routeRules: {\n    &#39;/blog&#39;: { isr: 3600 },\n    &#39;/blog/**&#39;: { isr: true },\n    &#39;/products/**&#39;: { swr: 3600 },\n  }\n})\u003C/code>\u003C/pre>\u003C/div>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">В документации Nuxt показаны похожие сценарии: \u003Ccode>/blog\u003C/code> может использовать \u003Ccode>isr: 3600\u003C/code>, отдельные посты &#8211; \u003Ccode>isr: true\u003C/code>, а продуктовые страницы &#8211; SWR с периодом кеширования. Nuxt также указывает, что для ISR/SWR маршрутов генерируется \u003Ccode>_payload.json\u003C/code>, который затем используется при клиентской навигации вместо повторной загрузки данных.\u003C/p>\n\n\n\n\u003Ch3 class=\"wp-block-heading\">ISR vs SSR\u003C/h3>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Разница простая:\u003C/p>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>SSR: каждый запрос → новый render (SSR дает максимальную свежесть)\u003C/li>\n\n\n\n\u003Cli>ISR: первый render → кеш → периодическое обновление (ISR дает баланс между скоростью и актуальностью)\u003C/li>\n\u003C/ul>\n\n\n\n\u003Ch3 class=\"wp-block-heading\">Где ISR особенно полезен\u003C/h3>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">ISR хорошо подходит для:\u003C/p>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>блогов;\u003C/li>\n\n\n\n\u003Cli>новостей;\u003C/li>\n\n\n\n\u003Cli>документации;\u003C/li>\n\n\n\n\u003Cli>каталогов;\u003C/li>\n\n\n\n\u003Cli>страниц товаров;\u003C/li>\n\n\n\n\u003Cli>страниц услуг;\u003C/li>\n\n\n\n\u003Cli>страниц мероприятий;\u003C/li>\n\n\n\n\u003Cli>SEO-страниц;\u003C/li>\n\n\n\n\u003Cli>сайтов с CMS.\u003C/li>\n\u003C/ul>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Например, для корпоративного сайта на Nuxt + Headless CMS можно сделать так:\u003C/p>\n\n\n\n\u003Cdiv class=\"hcb_wrap\">\u003Cpre class=\"prism line-numbers lang-js\" data-lang=\"JavaScript\">\u003Ccode>export default defineNuxtConfig({\n  routeRules: {\n    &#39;/&#39;: { prerender: true },\n    &#39;/services/**&#39;: { isr: 3600 },\n    &#39;/blog/**&#39;: { isr: 600 },\n    &#39;/contacts&#39;: { prerender: true },\n    &#39;/admin/**&#39;: { ssr: false },\n  }\n})\u003C/code>\u003C/pre>\u003C/div>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Это похоже на реальную production-архитектуру: не один режим на весь сайт, а разные стратегии под разные типы страниц.\u003C/p>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">SWR &#8211; Stale While Revalidate\u003C/h2>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">SWR близок к ISR, но акцент немного другой. Смысл: отдай пользователю старую кешированную версию быстро,\u003Cbr>а обновление запусти в фоне. То есть пользователь не ждет свежую генерацию. Он получает быстрый ответ, а система параллельно подготавливает новую версию для следующих запросов.\u003C/p>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Пример\u003C/p>\n\n\n\n\u003Cdiv class=\"hcb_wrap\">\u003Cpre class=\"prism line-numbers lang-js\" data-lang=\"JavaScript\">\u003Ccode>export default defineNuxtConfig({\n  routeRules: {\n    &#39;/products/**&#39;: { swr: 3600 },\n  }\n})\u003C/code>\u003C/pre>\u003C/div>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Это означает: продуктовая страница может быть отдана из кеша, а обновление произойдет в фоне.\u003C/p>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">SWR особенно полезен, когда:\u003C/p>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>скорость важнее абсолютной свежести; \u003C/li>\n\n\n\n\u003Cli>допустима задержка обновления; \u003C/li>\n\n\n\n\u003Cli>API может быть медленным; \u003C/li>\n\n\n\n\u003Cli>страница получает много трафика; \u003C/li>\n\n\n\n\u003Cli>нужно защитить backend от лишней нагрузки.\u003C/li>\n\u003C/ul>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">Hybrid Rendering\u003C/h2>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">\u003Cstrong>Hybrid Rendering\u003C/strong> &#8211; это не отдельный способ рендеринга, а архитектурный подход, где разные маршруты или даже разные части страницы используют разные стратегии.\u003C/p>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Пример:\u003C/p>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>/ → SSG\u003C/li>\n\n\n\n\u003Cli>/blog/** → ISR\u003C/li>\n\n\n\n\u003Cli>/catalog/** → SWR\u003C/li>\n\n\n\n\u003Cli>/search → SSR\u003C/li>\n\n\n\n\u003Cli>/account/** → SSR\u003C/li>\n\n\n\n\u003Cli>/admin/** → CSR\u003C/li>\n\n\n\n\u003Cli>/api/** → server routes\u003C/li>\n\u003C/ul>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">В \u003Ca href=\"https://nuxt.com/docs/4.x/guide/concepts/rendering\">Nuxt hybrid rendering\u003C/a> реализуется через \u003Ccode>routeRules\u003C/code>, где для разных групп URL можно назначать \u003Ccode>prerender\u003C/code>, \u003Ccode>isr\u003C/code>, \u003Ccode>swr\u003C/code>, \u003Ccode>ssr: false\u003C/code>, redirect, headers и другие правила. Nuxt прямо описывает hybrid rendering как возможность задавать разные caching rules per route.\u003C/p>\n\n\n\n\u003Ch3 class=\"wp-block-heading\">Пример гибридной Nuxt-архитектуры\u003C/h3>\n\n\n\n\u003Cdiv class=\"hcb_wrap\">\u003Cpre class=\"prism line-numbers lang-js\" data-lang=\"JavaScript\">\u003Ccode>export default defineNuxtConfig({\n  routeRules: {\n    // Главная — максимально быстрая\n    &#39;/&#39;: { prerender: true },\n\n    // Статичные страницы\n    &#39;/about&#39;: { prerender: true },\n    &#39;/contacts&#39;: { prerender: true },\n\n    // Блог — обновляется раз в 10 минут\n    &#39;/blog/**&#39;: { isr: 600 },\n\n    // Каталог — кешируется, но обновляется в фоне\n    &#39;/catalog/**&#39;: { swr: 300 },\n\n    // Поиск — всегда серверный, потому что зависит от query\n    &#39;/search&#39;: { ssr: true },\n\n    // Кабинет — динамический и пользовательский\n    &#39;/account/**&#39;: { ssr: true },\n\n    // Админка — SPA, SEO не нужен\n    &#39;/admin/**&#39;: { ssr: false },\n\n    // API\n    &#39;/api/**&#39;: { cors: true },\n  },\n})\u003C/code>\u003C/pre>\u003C/div>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Вот так возможно проектировать рендеринг: не включить SSR, а разложить проект по зонам ответственности.\u003C/p>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">Partial Prerendering: следующий шаг после hybrid rendering\u003C/h2>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Hybrid rendering на уровне маршрутов &#8211; это хорошо. Но современные фреймворки идут дальше: теперь разные части \u003Cstrong>одного маршрута\u003C/strong> могут вести себя по-разному.\u003C/p>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Например есть страница товара: /product/product-1 &#8211; на которой есть:\u003C/p>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>Header → статичный\u003C/li>\n\n\n\n\u003Cli>SEO-текст → статичный\u003C/li>\n\n\n\n\u003Cli>Описание товара → кешируемое\u003C/li>\n\n\n\n\u003Cli>Цена → часто обновляется\u003C/li>\n\n\n\n\u003Cli>Наличие → динамическое\u003C/li>\n\n\n\n\u003Cli>Корзина пользователя → персонализированная\u003C/li>\n\n\n\n\u003Cli>Рекомендации → зависят от пользователя\u003C/li>\n\n\n\n\u003Cli>Отзывы → обновляются периодически\u003C/li>\n\u003C/ul>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Раньше приходилось выбирать: вся страница SSR или вся страница SSG/ISR. \u003C/p>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">В \u003Ca href=\"https://nextjs.org/docs/app/guides/ppr-platform-guide\">Next.js Partial Prerendering\u003C/a> работает именно так: на build time создается static HTML shell и \u003Ccode>postponedState\u003C/code>, а на request time динамические части рендерятся и стримятся клиенту.\u003C/p>\n\n\n\n\u003Cdiv class=\"hcb_wrap\">\u003Cpre class=\"prism line-numbers lang-js\" data-lang=\"JavaScript\">\u003Ccode>import { Suspense } from &#39;react&#39;\n\nexport default async function ProductPage() {\n  return (\n    &lt;main&gt;\n      &lt;ProductStaticInfo /&gt;\n\n      &lt;Suspense fallback={&lt;PriceSkeleton /&gt;}&gt;\n        &lt;ProductPrice /&gt;\n      &lt;/Suspense&gt;\n\n      &lt;Suspense fallback={&lt;RecommendationsSkeleton /&gt;}&gt;\n        &lt;PersonalRecommendations /&gt;\n      &lt;/Suspense&gt;\n    &lt;/main&gt;\n  )\n}\u003C/code>\u003C/pre>\u003C/div>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Идея не в том, что \u003Ccode>Suspense\u003C/code> сам по себе делает магию. Идея в архитектуре: статическая часть страницы может быть подготовлена заранее, а динамические части &#8211; отложены, закешированы или отрендерены на запросе.\u003C/p>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">В актуальной документации Next.js по Cache Components описано, что при build time компонентное дерево анализируется: закешированные части попадают в static shell, Suspense fallback также попадает в shell, а динамический контент может стримиться во время запроса.\u003C/p>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">Как выбирать стратегию\u003C/h2>\n\n\n\n\u003Ch3 class=\"wp-block-heading\">Используем SSG, если:\u003C/h3>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>Данные стабильны.\u003C/li>\n\n\n\n\u003Cli>SEO важен.\u003C/li>\n\n\n\n\u003Cli>Обновления редкие.\u003C/li>\n\n\n\n\u003Cli>Персонализации нет.\u003C/li>\n\n\n\n\u003Cli>Нужна максимальная скорость.\u003Cbr>\u003C/li>\n\u003C/ul>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Примеры:\u003C/p>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>/about\u003C/li>\n\n\n\n\u003Cli>/services\u003C/li>\n\n\n\n\u003Cli>/contacts\u003C/li>\n\n\n\n\u003Cli>/docs\u003C/li>\n\u003C/ul>\n\n\n\n\u003Ch3 class=\"wp-block-heading\">Используем SSR, если:\u003C/h3>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>Данные зависят от текущего запроса.\u003C/li>\n\n\n\n\u003Cli>Есть cookies/session/headers.\u003C/li>\n\n\n\n\u003Cli>Нужна максимальная свежесть.\u003C/li>\n\n\n\n\u003Cli>Страница персонализирована.\u003C/li>\n\u003C/ul>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Примеры:\u003C/p>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>/account\u003C/li>\n\n\n\n\u003Cli>/orders\u003C/li>\n\n\n\n\u003Cli>/search\u003C/li>\n\n\n\n\u003Cli>/checkout\u003C/li>\n\u003C/ul>\n\n\n\n\u003Ch3 class=\"wp-block-heading\">Используем ISR, если:\u003C/h3>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>SEO важен.\u003C/li>\n\n\n\n\u003Cli>Контент меняется.\u003C/li>\n\n\n\n\u003Cli>Но не нужен render на каждый запрос.\u003C/li>\n\n\n\n\u003Cli>Допустима небольшая задержка обновления.\u003C/li>\n\u003C/ul>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Примеры:\u003C/p>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>/blog/**\u003C/li>\n\n\n\n\u003Cli>/news/**\u003C/li>\n\n\n\n\u003Cli>/products/**\u003C/li>\n\n\n\n\u003Cli>/events/**\u003C/li>\n\u003C/ul>\n\n\n\n\u003Ch3 class=\"wp-block-heading\">Используем CSR, если:\u003C/h3>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>SEO не нужен.\u003C/li>\n\n\n\n\u003Cli>Это закрытая зона.\u003C/li>\n\n\n\n\u003Cli>Интерфейс похож на приложение.\u003C/li>\n\n\n\n\u003Cli>Много интерактива.\u003C/li>\n\u003C/ul>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Примеры:\u003C/p>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>/admin\u003C/li>\n\n\n\n\u003Cli>/editor\u003C/li>\n\n\n\n\u003Cli>/crm\u003C/li>\n\u003C/ul>\n\n\n\n\u003Ch3 class=\"wp-block-heading\">Используем SWR, если:\u003C/h3>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>Пользователь должен получить ответ быстро.\u003C/li>\n\n\n\n\u003Cli>Можно показать слегка устаревшую версию.\u003C/li>\n\n\n\n\u003Cli>Обновление можно делать в фоне.\u003C/li>\n\u003C/ul>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Примеры:\u003C/p>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>/catalog\u003C/li>\n\n\n\n\u003Cli>/popular-posts\u003C/li>\n\n\n\n\u003Cli>/rating\u003C/li>\n\u003C/ul>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">Краткое описание в подходах\u003C/h2>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>SSG: самый быстрый, самый дешевый, но данные обновляются только при rebuild.\u003C/li>\n\n\n\n\u003Cli>SSR: самый гибкий, но самый дорогой на каждый запрос.\u003C/li>\n\n\n\n\u003Cli>ISR: почти как SSG, но страницы могут обновляться после деплоя.\u003C/li>\n\n\n\n\u003Cli>SWR: отдаем кеш быстро, обновляем в фоне.\u003C/li>\n\n\n\n\u003Cli>CSR: хорош для закрытых приложений, но слабее для SEO и initial load.\u003C/li>\n\n\n\n\u003Cli>Hybrid Rendering: разные маршруты используют разные стратегии.\u003C/li>\n\n\n\n\u003Cli>Partial Prerendering / Server Islands: разные части одной страницы могут иметь разную динамику.\u003C/li>\n\u003C/ul>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">Заключение\u003C/h2>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">SSR, SSG, ISR и hybrid rendering &#8211; это не конкурирующие технологии, а инструменты для разных задач. В 2026 году сильная frontend-архитектура строится не вокруг лозунга у нас SSR, а вокруг точного понимания:\u003C/p>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>какие данные статичны,\u003C/li>\n\n\n\n\u003Cli>какие данные динамичны,\u003C/li>\n\n\n\n\u003Cli>какие данные персонализированы,\u003C/li>\n\n\n\n\u003Cli>какие данные критичны для SEO,\u003C/li>\n\n\n\n\u003Cli>какие данные можно кешировать,\u003C/li>\n\n\n\n\u003Cli>какие блоки не должны задерживать первый экран.\u003C/li>\n\u003C/ul>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>SSG дает скорость.\u003C/li>\n\n\n\n\u003Cli>SSR дает гибкость.\u003C/li>\n\n\n\n\u003Cli>ISR дает баланс.\u003C/li>\n\n\n\n\u003Cli>SWR дает устойчивость под нагрузкой.\u003C/li>\n\n\n\n\u003Cli>Hybrid rendering дает архитектурную свободу.\u003C/li>\n\n\n\n\u003Cli>Partial rendering и islands-подход дают следующий уровень &#8211; когда динамической становится не вся страница, а только та ее часть, которая действительно должна быть динамической.\u003C/li>\n\u003C/ul>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Именно в этом направлении движется современный frontend: от монолитного рендеринга страниц к более тонкой модели, где HTML, данные, кеш, серверные компоненты, CDN и интерактивность работают как единая система.\u003C/p>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Главная мысль простая: \u003Cstrong>не делай весь сайт динамическим только потому, что один блок зависит от пользователя. И не делай весь сайт статическим, если бизнес живет в реальном времени.\u003C/strong>\u003C/p>\n",false,{"rendered":22,"protected":20},"\u003Cp>Еще несколько лет назад выбор рендеринга в веб-приложении часто сводился к простому вопросу: нам нужен SPA или SSR? Современный frontend &#8211; это уже не один режим рендеринга на весь проект, а архитектурный набор стратегий: где-то страница должна быть статической, где-то &#8211; обновляться по расписанию, где-то &#8211; рендериться на каждый запрос, а где-то &#8211; совмещать статические и динамические пользовательские блоки.\u003C/p>\n",1,1856,"open","","standard",{"_acf_changed":20,"_yoast_wpseo_focuskw":26,"_yoast_wpseo_title":26,"_yoast_wpseo_metadesc":29,"footnotes":26},"%%sep%% В 2026 году нужно мыслить категориями стоимости запроса, свежести данных, SEO, персонализации, кеширования, инфраструктуры и UX",[31],118,[],[34,14,35,36,37,38,39,40],"post-1842","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-frontend-architecture",[],"\u003C!-- This site is optimized with the Yoast SEO plugin v28.5 - https://yoast.com/product/yoast-seo-wordpress/ -->\n\u003Ctitle>SSR, SSG, ISR и Hybrid Rendering: современная frontend-архитектура\u003C/title>\n\u003Cmeta name=\"description\" content=\"- В 2026 году нужно мыслить категориями стоимости запроса, свежести данных, SEO, персонализации, кеширования, инфраструктуры и UX\" class=\"yoast-seo-meta-tag\" />\n\u003Cmeta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" />\n\u003Clink rel=\"canonical\" href=\"https://api.aoskin.ru/ssr-ssg-isr-i-hybrid-rendering-sovremennaya-frontend-arhitektura/\" class=\"yoast-seo-meta-tag\" />\n\u003Cmeta property=\"og:locale\" content=\"en_US\" class=\"yoast-seo-meta-tag\" />\n\u003Cmeta property=\"og:type\" content=\"article\" class=\"yoast-seo-meta-tag\" />\n\u003Cmeta property=\"og:title\" content=\"SSR, SSG, ISR и Hybrid Rendering: современная frontend-архитектура\" class=\"yoast-seo-meta-tag\" />\n\u003Cmeta property=\"og:description\" content=\"- В 2026 году нужно мыслить категориями стоимости запроса, свежести данных, SEO, персонализации, кеширования, инфраструктуры и UX\" class=\"yoast-seo-meta-tag\" />\n\u003Cmeta property=\"og:url\" content=\"https://api.aoskin.ru/ssr-ssg-isr-i-hybrid-rendering-sovremennaya-frontend-arhitektura/\" class=\"yoast-seo-meta-tag\" />\n\u003Cmeta property=\"og:site_name\" content=\"api.aoskin.ru\" class=\"yoast-seo-meta-tag\" />\n\u003Cmeta property=\"article:published_time\" content=\"2026-05-17T12:06:11+00:00\" class=\"yoast-seo-meta-tag\" />\n\u003Cmeta property=\"article:modified_time\" content=\"2026-06-21T15:21:13+00:00\" class=\"yoast-seo-meta-tag\" />\n\u003Cmeta property=\"og:image\" content=\"https://api.aoskin.ru/wp-content/uploads/2026/05/49-ssr-ssg-isr-hybrid-rendering.webp\" class=\"yoast-seo-meta-tag\" />\n\t\u003Cmeta property=\"og:image:width\" content=\"1024\" class=\"yoast-seo-meta-tag\" />\n\t\u003Cmeta property=\"og:image:height\" content=\"576\" class=\"yoast-seo-meta-tag\" />\n\t\u003Cmeta property=\"og:image:type\" content=\"image/webp\" class=\"yoast-seo-meta-tag\" />\n\u003Cmeta name=\"author\" content=\"aoskin\" class=\"yoast-seo-meta-tag\" />\n\u003Cmeta name=\"twitter:card\" content=\"summary_large_image\" class=\"yoast-seo-meta-tag\" />\n\u003Cmeta name=\"twitter:label1\" content=\"Written by\" class=\"yoast-seo-meta-tag\" />\n\t\u003Cmeta name=\"twitter:data1\" content=\"aoskin\" class=\"yoast-seo-meta-tag\" />\n\t\u003Cmeta name=\"twitter:label2\" content=\"Est. reading time\" class=\"yoast-seo-meta-tag\" />\n\t\u003Cmeta name=\"twitter:data2\" content=\"7 minutes\" class=\"yoast-seo-meta-tag\" />\n\u003Cscript type=\"application/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\/\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\/\\/api.aoskin.ru\\/ssr-ssg-isr-i-hybrid-rendering-sovremennaya-frontend-arhitektura\\/#article\",\"isPartOf\":{\"@id\":\"https:\\/\\/api.aoskin.ru\\/ssr-ssg-isr-i-hybrid-rendering-sovremennaya-frontend-arhitektura\\/\"},\"author\":{\"name\":\"aoskin\",\"@id\":\"https:\\/\\/api.aoskin.ru\\/#\\/schema\\/person\\/b5e1c81c85a50ca05e16fcdfa29f4861\"},\"headline\":\"SSR, SSG, ISR и Hybrid Rendering: современная frontend-архитектура\",\"datePublished\":\"2026-05-17T12:06:11+00:00\",\"dateModified\":\"2026-06-21T15:21:13+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\/\\/api.aoskin.ru\\/ssr-ssg-isr-i-hybrid-rendering-sovremennaya-frontend-arhitektura\\/\"},\"wordCount\":1464,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\/\\/api.aoskin.ru\\/#\\/schema\\/person\\/b5e1c81c85a50ca05e16fcdfa29f4861\"},\"image\":{\"@id\":\"https:\\/\\/api.aoskin.ru\\/ssr-ssg-isr-i-hybrid-rendering-sovremennaya-frontend-arhitektura\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\/\\/api.aoskin.ru\\/wp-content\\/uploads\\/2026\\/05\\/49-ssr-ssg-isr-hybrid-rendering.webp\",\"articleSection\":[\"Frontend Architecture\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\/\\/api.aoskin.ru\\/ssr-ssg-isr-i-hybrid-rendering-sovremennaya-frontend-arhitektura\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\/\\/api.aoskin.ru\\/ssr-ssg-isr-i-hybrid-rendering-sovremennaya-frontend-arhitektura\\/\",\"url\":\"https:\\/\\/api.aoskin.ru\\/ssr-ssg-isr-i-hybrid-rendering-sovremennaya-frontend-arhitektura\\/\",\"name\":\"SSR, SSG, ISR и Hybrid Rendering: современная frontend-архитектура\",\"isPartOf\":{\"@id\":\"https:\\/\\/api.aoskin.ru\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\/\\/api.aoskin.ru\\/ssr-ssg-isr-i-hybrid-rendering-sovremennaya-frontend-arhitektura\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\/\\/api.aoskin.ru\\/ssr-ssg-isr-i-hybrid-rendering-sovremennaya-frontend-arhitektura\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\/\\/api.aoskin.ru\\/wp-content\\/uploads\\/2026\\/05\\/49-ssr-ssg-isr-hybrid-rendering.webp\",\"datePublished\":\"2026-05-17T12:06:11+00:00\",\"dateModified\":\"2026-06-21T15:21:13+00:00\",\"description\":\"- В 2026 году нужно мыслить категориями стоимости запроса, свежести данных, SEO, персонализации, кеширования, инфраструктуры и UX\",\"breadcrumb\":{\"@id\":\"https:\\/\\/api.aoskin.ru\\/ssr-ssg-isr-i-hybrid-rendering-sovremennaya-frontend-arhitektura\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\/\\/api.aoskin.ru\\/ssr-ssg-isr-i-hybrid-rendering-sovremennaya-frontend-arhitektura\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\/\\/api.aoskin.ru\\/ssr-ssg-isr-i-hybrid-rendering-sovremennaya-frontend-arhitektura\\/#primaryimage\",\"url\":\"https:\\/\\/api.aoskin.ru\\/wp-content\\/uploads\\/2026\\/05\\/49-ssr-ssg-isr-hybrid-rendering.webp\",\"contentUrl\":\"https:\\/\\/api.aoskin.ru\\/wp-content\\/uploads\\/2026\\/05\\/49-ssr-ssg-isr-hybrid-rendering.webp\",\"width\":1024,\"height\":576},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\/\\/api.aoskin.ru\\/ssr-ssg-isr-i-hybrid-rendering-sovremennaya-frontend-arhitektura\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\/\\/api.aoskin.ru\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"SSR, SSG, ISR и Hybrid Rendering: современная frontend-архитектура\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\/\\/api.aoskin.ru\\/#website\",\"url\":\"https:\\/\\/api.aoskin.ru\\/\",\"name\":\"aoskin.ru\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\/\\/api.aoskin.ru\\/#\\/schema\\/person\\/b5e1c81c85a50ca05e16fcdfa29f4861\"},\"alternateName\":\"aoskin.ru\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\/\\/api.aoskin.ru\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\/\\/api.aoskin.ru\\/#\\/schema\\/person\\/b5e1c81c85a50ca05e16fcdfa29f4861\",\"name\":\"aoskin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\/\\/secure.gravatar.com\\/avatar\\/e5e502e32ef7d2bf805592a42dd48d98a3587a37b0e98191f187c9c37e7529fb?s=96&d=mm&r=g\",\"url\":\"https:\\/\\/secure.gravatar.com\\/avatar\\/e5e502e32ef7d2bf805592a42dd48d98a3587a37b0e98191f187c9c37e7529fb?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\/\\/secure.gravatar.com\\/avatar\\/e5e502e32ef7d2bf805592a42dd48d98a3587a37b0e98191f187c9c37e7529fb?s=96&d=mm&r=g\",\"caption\":\"aoskin\"},\"logo\":{\"@id\":\"https:\\/\\/secure.gravatar.com\\/avatar\\/e5e502e32ef7d2bf805592a42dd48d98a3587a37b0e98191f187c9c37e7529fb?s=96&d=mm&r=g\"},\"sameAs\":[\"http:\\/\\/api.aoskin.ru\"],\"url\":\"https:\\/\\/api.aoskin.ru\\/author\\/aoskin\\/\"}]}\u003C/script>\n\u003C!-- / Yoast SEO plugin. -->",{"title":17,"description":44,"robots":45,"canonical":15,"og_locale":51,"og_type":52,"og_title":17,"og_description":44,"og_url":15,"og_site_name":53,"article_published_time":54,"article_modified_time":55,"og_image":56,"author":62,"twitter_card":63,"twitter_misc":64,"schema":66},"- В 2026 году нужно мыслить категориями стоимости запроса, свежести данных, SEO, персонализации, кеширования, инфраструктуры и UX",{"index":46,"follow":47,"max-snippet":48,"max-image-preview":49,"max-video-preview":50},"index","follow","max-snippet:-1","max-image-preview:large","max-video-preview:-1","en_US","article","api.aoskin.ru","2026-05-17T12:06:11+00:00","2026-06-21T15:21:13+00:00",[57],{"width":58,"height":59,"url":60,"type":61},1024,576,"https://api.aoskin.ru/wp-content/uploads/2026/05/49-ssr-ssg-isr-hybrid-rendering.webp","image/webp","aoskin","summary_large_image",{"Written by":62,"Est. reading time":65},"7 minutes",{"@context":67,"@graph":68},"https://schema.org",[69,90,102,104,113,127],{"@type":70,"@id":71,"isPartOf":72,"author":73,"headline":17,"datePublished":54,"dateModified":55,"mainEntityOfPage":75,"wordCount":76,"commentCount":77,"publisher":78,"image":79,"thumbnailUrl":60,"articleSection":81,"inLanguage":83,"potentialAction":84},"Article","https://api.aoskin.ru/ssr-ssg-isr-i-hybrid-rendering-sovremennaya-frontend-arhitektura/#article",{"@id":15},{"name":62,"@id":74},"https://api.aoskin.ru/#/schema/person/b5e1c81c85a50ca05e16fcdfa29f4861",{"@id":15},1464,0,{"@id":74},{"@id":80},"https://api.aoskin.ru/ssr-ssg-isr-i-hybrid-rendering-sovremennaya-frontend-arhitektura/#primaryimage",[82],"Frontend Architecture","en-US",[85],{"@type":86,"name":87,"target":88},"CommentAction","Comment",[89],"https://api.aoskin.ru/ssr-ssg-isr-i-hybrid-rendering-sovremennaya-frontend-arhitektura/#respond",{"@type":91,"@id":15,"url":15,"name":17,"isPartOf":92,"primaryImageOfPage":94,"image":95,"thumbnailUrl":60,"datePublished":54,"dateModified":55,"description":44,"breadcrumb":96,"inLanguage":83,"potentialAction":98},"WebPage",{"@id":93},"https://api.aoskin.ru/#website",{"@id":80},{"@id":80},{"@id":97},"https://api.aoskin.ru/ssr-ssg-isr-i-hybrid-rendering-sovremennaya-frontend-arhitektura/#breadcrumb",[99],{"@type":100,"target":101},"ReadAction",[15],{"@type":103,"inLanguage":83,"@id":80,"url":60,"contentUrl":60,"width":58,"height":59},"ImageObject",{"@type":105,"@id":97,"itemListElement":106},"BreadcrumbList",[107,111],{"@type":108,"position":23,"name":109,"item":110},"ListItem","Home","https://api.aoskin.ru/",{"@type":108,"position":112,"name":17},2,{"@type":114,"@id":93,"url":110,"name":115,"description":26,"publisher":116,"alternateName":115,"potentialAction":117,"inLanguage":83},"WebSite","aoskin.ru",{"@id":74},[118],{"@type":119,"target":120,"query-input":123},"SearchAction",{"@type":121,"urlTemplate":122},"EntryPoint","https://api.aoskin.ru/?s={search_term_string}",{"@type":124,"valueRequired":125,"valueName":126},"PropertyValueSpecification",true,"search_term_string",{"@type":128,"@id":74,"name":62,"image":131,"logo":133,"sameAs":134,"url":136},[129,130],"Person","Organization",{"@type":103,"inLanguage":83,"@id":132,"url":132,"contentUrl":132,"caption":62},"https://secure.gravatar.com/avatar/e5e502e32ef7d2bf805592a42dd48d98a3587a37b0e98191f187c9c37e7529fb?s=96&d=mm&r=g",{"@id":132},[135],"http://api.aoskin.ru","https://api.aoskin.ru/author/aoskin/",{"self":138,"collection":148,"about":151,"author":154,"replies":157,"version-history":160,"predecessor-version":164,"wp:featuredmedia":168,"wp:attachment":171,"wp:term":174,"curies":181},[139],{"href":140,"targetHints":141},"https://api.aoskin.ru/wp-json/wp/v2/posts/1842",{"allow":142},[143,144,145,146,147],"GET","POST","PUT","PATCH","DELETE",[149],{"href":150},"https://api.aoskin.ru/wp-json/wp/v2/posts",[152],{"href":153},"https://api.aoskin.ru/wp-json/wp/v2/types/post",[155],{"embeddable":125,"href":156},"https://api.aoskin.ru/wp-json/wp/v2/users/1",[158],{"embeddable":125,"href":159},"https://api.aoskin.ru/wp-json/wp/v2/comments?post=1842",[161],{"count":162,"href":163},4,"https://api.aoskin.ru/wp-json/wp/v2/posts/1842/revisions",[165],{"id":166,"href":167},1854,"https://api.aoskin.ru/wp-json/wp/v2/posts/1842/revisions/1854",[169],{"embeddable":125,"href":170},"https://api.aoskin.ru/wp-json/wp/v2/media/1856",[172],{"href":173},"https://api.aoskin.ru/wp-json/wp/v2/media?parent=1842",[175,178],{"taxonomy":176,"embeddable":125,"href":177},"category","https://api.aoskin.ru/wp-json/wp/v2/categories?post=1842",{"taxonomy":179,"embeddable":125,"href":180},"post_tag","https://api.aoskin.ru/wp-json/wp/v2/tags?post=1842",[182],{"name":183,"href":184,"templated":125},"wp","https://api.w.org/{rel}",{"author":186,"wp:featuredmedia":235,"wp:term":292},[187],{"id":23,"name":62,"url":135,"description":26,"link":136,"slug":62,"avatar_urls":188,"yoast_head":191,"yoast_head_json":192,"acf":226,"_links":227},{"24":189,"48":190,"96":132},"https://secure.gravatar.com/avatar/e5e502e32ef7d2bf805592a42dd48d98a3587a37b0e98191f187c9c37e7529fb?s=24&d=mm&r=g","https://secure.gravatar.com/avatar/e5e502e32ef7d2bf805592a42dd48d98a3587a37b0e98191f187c9c37e7529fb?s=48&d=mm&r=g","\u003C!-- This site is optimized with the Yoast SEO plugin v28.5 - https://yoast.com/product/yoast-seo-wordpress/ -->\n\u003Ctitle>aoskin, Author at api.aoskin.ru\u003C/title>\n\u003C!-- Admin only notice: this page does not show a meta description because it does not have one, either write it for this page specifically or go into the [Yoast SEO - Settings] menu and set up a template. -->\n\u003Cmeta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" />\n\u003Clink rel=\"canonical\" href=\"https://api.aoskin.ru/author/aoskin/\" class=\"yoast-seo-meta-tag\" />\n\u003Cmeta property=\"og:locale\" content=\"en_US\" class=\"yoast-seo-meta-tag\" />\n\u003Cmeta property=\"og:type\" content=\"profile\" class=\"yoast-seo-meta-tag\" />\n\u003Cmeta property=\"og:title\" content=\"aoskin, Author at api.aoskin.ru\" class=\"yoast-seo-meta-tag\" />\n\u003Cmeta property=\"og:url\" content=\"https://api.aoskin.ru/author/aoskin/\" class=\"yoast-seo-meta-tag\" />\n\u003Cmeta property=\"og:site_name\" content=\"api.aoskin.ru\" class=\"yoast-seo-meta-tag\" />\n\u003Cmeta property=\"og:image\" content=\"https://secure.gravatar.com/avatar/e5e502e32ef7d2bf805592a42dd48d98a3587a37b0e98191f187c9c37e7529fb?s=500&d=mm&r=g\" class=\"yoast-seo-meta-tag\" />\n\u003Cmeta name=\"twitter:card\" content=\"summary_large_image\" class=\"yoast-seo-meta-tag\" />\n\u003Cscript type=\"application/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\/\\/schema.org\",\"@graph\":[{\"@type\":\"ProfilePage\",\"@id\":\"https:\\/\\/api.aoskin.ru\\/author\\/aoskin\\/\",\"url\":\"https:\\/\\/api.aoskin.ru\\/author\\/aoskin\\/\",\"name\":\"aoskin, Author at api.aoskin.ru\",\"isPartOf\":{\"@id\":\"https:\\/\\/api.aoskin.ru\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\/\\/api.aoskin.ru\\/author\\/aoskin\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\/\\/api.aoskin.ru\\/author\\/aoskin\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\/\\/api.aoskin.ru\\/author\\/aoskin\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\/\\/api.aoskin.ru\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Archives for aoskin\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\/\\/api.aoskin.ru\\/#website\",\"url\":\"https:\\/\\/api.aoskin.ru\\/\",\"name\":\"aoskin.ru\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\/\\/api.aoskin.ru\\/#\\/schema\\/person\\/b5e1c81c85a50ca05e16fcdfa29f4861\"},\"alternateName\":\"aoskin.ru\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\/\\/api.aoskin.ru\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\/\\/api.aoskin.ru\\/#\\/schema\\/person\\/b5e1c81c85a50ca05e16fcdfa29f4861\",\"name\":\"aoskin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\/\\/secure.gravatar.com\\/avatar\\/e5e502e32ef7d2bf805592a42dd48d98a3587a37b0e98191f187c9c37e7529fb?s=96&d=mm&r=g\",\"url\":\"https:\\/\\/secure.gravatar.com\\/avatar\\/e5e502e32ef7d2bf805592a42dd48d98a3587a37b0e98191f187c9c37e7529fb?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\/\\/secure.gravatar.com\\/avatar\\/e5e502e32ef7d2bf805592a42dd48d98a3587a37b0e98191f187c9c37e7529fb?s=96&d=mm&r=g\",\"caption\":\"aoskin\"},\"logo\":{\"@id\":\"https:\\/\\/secure.gravatar.com\\/avatar\\/e5e502e32ef7d2bf805592a42dd48d98a3587a37b0e98191f187c9c37e7529fb?s=96&d=mm&r=g\"},\"sameAs\":[\"http:\\/\\/api.aoskin.ru\"],\"mainEntityOfPage\":{\"@id\":\"https:\\/\\/api.aoskin.ru\\/author\\/aoskin\\/\"}}]}\u003C/script>\n\u003C!-- / Yoast SEO plugin. -->",{"title":193,"robots":194,"canonical":136,"og_locale":51,"og_type":195,"og_title":193,"og_url":136,"og_site_name":53,"og_image":196,"twitter_card":63,"schema":199},"aoskin, Author at api.aoskin.ru",{"index":46,"follow":47,"max-snippet":48,"max-image-preview":49,"max-video-preview":50},"profile",[197],{"url":198,"type":26,"width":26,"height":26},"https://secure.gravatar.com/avatar/e5e502e32ef7d2bf805592a42dd48d98a3587a37b0e98191f187c9c37e7529fb?s=500&d=mm&r=g",{"@context":67,"@graph":200},[201,209,214,220],{"@type":202,"@id":136,"url":136,"name":193,"isPartOf":203,"breadcrumb":204,"inLanguage":83,"potentialAction":206},"ProfilePage",{"@id":93},{"@id":205},"https://api.aoskin.ru/author/aoskin/#breadcrumb",[207],{"@type":100,"target":208},[136],{"@type":105,"@id":205,"itemListElement":210},[211,212],{"@type":108,"position":23,"name":109,"item":110},{"@type":108,"position":112,"name":213},"Archives for aoskin",{"@type":114,"@id":93,"url":110,"name":115,"description":26,"publisher":215,"alternateName":115,"potentialAction":216,"inLanguage":83},{"@id":74},[217],{"@type":119,"target":218,"query-input":219},{"@type":121,"urlTemplate":122},{"@type":124,"valueRequired":125,"valueName":126},{"@type":221,"@id":74,"name":62,"image":222,"logo":223,"sameAs":224,"mainEntityOfPage":225},[129,130],{"@type":103,"inLanguage":83,"@id":132,"url":132,"contentUrl":132,"caption":62},{"@id":132},[135],{"@id":136},[],{"self":228,"collection":232},[229],{"href":156,"targetHints":230},{"allow":231},[143,144,145,146,147],[233],{"href":234},"https://api.aoskin.ru/wp-json/wp/v2/users",[236],{"id":24,"date":237,"slug":238,"type":239,"link":240,"title":241,"author":23,"featured_media":77,"acf":243,"caption":244,"alt_text":26,"media_type":245,"mime_type":61,"media_details":246,"source_url":60,"_links":272},"2026-06-21T18:21:09","49-ssr-ssg-isr-hybrid-rendering","attachment","https://api.aoskin.ru/ssr-ssg-isr-i-hybrid-rendering-sovremennaya-frontend-arhitektura/49-ssr-ssg-isr-hybrid-rendering/",{"rendered":242},"49-SSR-SSG-ISR-Hybrid -Rendering",[],{"rendered":26},"image",{"width":58,"height":59,"file":247,"filesize":248,"sizes":249,"image_meta":269},"2026/05/49-ssr-ssg-isr-hybrid-rendering.webp",29192,{"medium":250,"thumbnail":256,"medium_large":261,"full":267},{"file":251,"width":252,"height":253,"filesize":254,"mime_type":61,"source_url":255},"49-ssr-ssg-isr-hybrid-rendering-300x169.webp",300,169,5240,"https://api.aoskin.ru/wp-content/uploads/2026/05/49-ssr-ssg-isr-hybrid-rendering-300x169.webp",{"file":257,"width":258,"height":258,"filesize":259,"mime_type":61,"source_url":260},"49-ssr-ssg-isr-hybrid-rendering-150x150.webp",150,4142,"https://api.aoskin.ru/wp-content/uploads/2026/05/49-ssr-ssg-isr-hybrid-rendering-150x150.webp",{"file":262,"width":263,"height":264,"filesize":265,"mime_type":61,"source_url":266},"49-ssr-ssg-isr-hybrid-rendering-768x432.webp",768,432,23182,"https://api.aoskin.ru/wp-content/uploads/2026/05/49-ssr-ssg-isr-hybrid-rendering-768x432.webp",{"file":268,"width":58,"height":59,"mime_type":61,"source_url":60},"49-ssr-ssg-isr-hybrid-rendering.webp",{"aperture":270,"credit":26,"camera":26,"caption":26,"created_timestamp":270,"copyright":26,"focal_length":270,"iso":270,"shutter_speed":270,"title":26,"orientation":270,"keywords":271,"alt":26},"0",[],{"self":273,"collection":277,"about":280,"author":283,"replies":285,"wp:attached-to":288,"curies":290},[274],{"href":170,"targetHints":275},{"allow":276},[143,144,145,146,147],[278],{"href":279},"https://api.aoskin.ru/wp-json/wp/v2/media",[281],{"href":282},"https://api.aoskin.ru/wp-json/wp/v2/types/attachment",[284],{"embeddable":125,"href":156},[286],{"embeddable":125,"href":287},"https://api.aoskin.ru/wp-json/wp/v2/comments?post=1856",[289],{"embeddable":125,"post_type":14,"id":5,"href":140},[291],{"name":183,"href":184,"templated":125},[293,341],[294],{"id":31,"link":295,"name":82,"slug":296,"taxonomy":176,"yoast_head":297,"yoast_head_json":298,"acf":323,"_links":324},"https://api.aoskin.ru/category/frontend-architecture/","frontend-architecture","\u003C!-- This site is optimized with the Yoast SEO plugin v28.5 - https://yoast.com/product/yoast-seo-wordpress/ -->\n\u003Ctitle>Frontend Architecture Archives - api.aoskin.ru\u003C/title>\n\u003C!-- Admin only notice: this page does not show a meta description because it does not have one, either write it for this page specifically or go into the [Yoast SEO - Settings] menu and set up a template. -->\n\u003Cmeta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" />\n\u003Clink rel=\"canonical\" href=\"https://api.aoskin.ru/category/frontend-architecture/\" class=\"yoast-seo-meta-tag\" />\n\u003Cmeta property=\"og:locale\" content=\"en_US\" class=\"yoast-seo-meta-tag\" />\n\u003Cmeta property=\"og:type\" content=\"article\" class=\"yoast-seo-meta-tag\" />\n\u003Cmeta property=\"og:title\" content=\"Frontend Architecture Archives - api.aoskin.ru\" class=\"yoast-seo-meta-tag\" />\n\u003Cmeta property=\"og:url\" content=\"https://api.aoskin.ru/category/frontend-architecture/\" class=\"yoast-seo-meta-tag\" />\n\u003Cmeta property=\"og:site_name\" content=\"api.aoskin.ru\" class=\"yoast-seo-meta-tag\" />\n\u003Cmeta name=\"twitter:card\" content=\"summary_large_image\" class=\"yoast-seo-meta-tag\" />\n\u003Cscript type=\"application/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\/\\/schema.org\",\"@graph\":[{\"@type\":\"CollectionPage\",\"@id\":\"https:\\/\\/api.aoskin.ru\\/category\\/frontend-architecture\\/\",\"url\":\"https:\\/\\/api.aoskin.ru\\/category\\/frontend-architecture\\/\",\"name\":\"Frontend Architecture Archives - api.aoskin.ru\",\"isPartOf\":{\"@id\":\"https:\\/\\/api.aoskin.ru\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\/\\/api.aoskin.ru\\/category\\/frontend-architecture\\/#breadcrumb\"},\"inLanguage\":\"en-US\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\/\\/api.aoskin.ru\\/category\\/frontend-architecture\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\/\\/api.aoskin.ru\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Frontend Architecture\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\/\\/api.aoskin.ru\\/#website\",\"url\":\"https:\\/\\/api.aoskin.ru\\/\",\"name\":\"aoskin.ru\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\/\\/api.aoskin.ru\\/#\\/schema\\/person\\/b5e1c81c85a50ca05e16fcdfa29f4861\"},\"alternateName\":\"aoskin.ru\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\/\\/api.aoskin.ru\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\/\\/api.aoskin.ru\\/#\\/schema\\/person\\/b5e1c81c85a50ca05e16fcdfa29f4861\",\"name\":\"aoskin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\/\\/api.aoskin.ru\\/wp-content\\/uploads\\/2026\\/05\\/49-ssr-ssg-isr-hybrid-rendering.webp\",\"url\":\"https:\\/\\/api.aoskin.ru\\/wp-content\\/uploads\\/2026\\/05\\/49-ssr-ssg-isr-hybrid-rendering.webp\",\"contentUrl\":\"https:\\/\\/api.aoskin.ru\\/wp-content\\/uploads\\/2026\\/05\\/49-ssr-ssg-isr-hybrid-rendering.webp\",\"width\":1024,\"height\":576,\"caption\":\"aoskin\"},\"logo\":{\"@id\":\"https:\\/\\/api.aoskin.ru\\/wp-content\\/uploads\\/2026\\/05\\/49-ssr-ssg-isr-hybrid-rendering.webp\"},\"sameAs\":[\"http:\\/\\/api.aoskin.ru\"]}]}\u003C/script>\n\u003C!-- / Yoast SEO plugin. -->",{"title":299,"robots":300,"canonical":295,"og_locale":51,"og_type":52,"og_title":299,"og_url":295,"og_site_name":53,"twitter_card":63,"schema":301},"Frontend Architecture Archives - api.aoskin.ru",{"index":46,"follow":47,"max-snippet":48,"max-image-preview":49,"max-video-preview":50},{"@context":67,"@graph":302},[303,308,312,318],{"@type":304,"@id":295,"url":295,"name":299,"isPartOf":305,"breadcrumb":306,"inLanguage":83},"CollectionPage",{"@id":93},{"@id":307},"https://api.aoskin.ru/category/frontend-architecture/#breadcrumb",{"@type":105,"@id":307,"itemListElement":309},[310,311],{"@type":108,"position":23,"name":109,"item":110},{"@type":108,"position":112,"name":82},{"@type":114,"@id":93,"url":110,"name":115,"description":26,"publisher":313,"alternateName":115,"potentialAction":314,"inLanguage":83},{"@id":74},[315],{"@type":119,"target":316,"query-input":317},{"@type":121,"urlTemplate":122},{"@type":124,"valueRequired":125,"valueName":126},{"@type":319,"@id":74,"name":62,"image":320,"logo":321,"sameAs":322},[129,130],{"@type":103,"inLanguage":83,"@id":60,"url":60,"contentUrl":60,"width":58,"height":59,"caption":62},{"@id":60},[135],[],{"self":325,"collection":330,"about":333,"wp:post_type":336,"curies":339},[326],{"href":327,"targetHints":328},"https://api.aoskin.ru/wp-json/wp/v2/categories/118",{"allow":329},[143,144,145,146,147],[331],{"href":332},"https://api.aoskin.ru/wp-json/wp/v2/categories",[334],{"href":335},"https://api.aoskin.ru/wp-json/wp/v2/taxonomies/category",[337],{"href":338},"https://api.aoskin.ru/wp-json/wp/v2/posts?categories=118",[340],{"name":183,"href":184,"templated":125},[],1790427490991]