[{"data":1,"prerenderedAt":344},["ShallowReactive",2],{"heVJbFmlzg":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},1845,"2026-05-17T15:01:52","2026-05-17T12:01:52",{"rendered":9},"https://api.aoskin.ru/?p=1845","2026-06-21T18:21:22","2026-06-21T15:21:22","ssr-ssg-isr-and-hybrid-rendering-modern-frontend-architecture","publish","post","https://api.aoskin.ru/en/ssr-ssg-isr-and-hybrid-rendering-modern-frontend-architecture/",{"rendered":17},"SSR, SSG, ISR, and Hybrid Rendering: Modern Frontend Architecture",{"rendered":19,"protected":20},"\n\u003Cp class=\"wp-block-paragraph\">In 2026, the mindset shouldn&#8217;t be about whether SSR is better than SSG or Next is better than Nuxt, but rather about request cost, data freshness, SEO, personalization, caching, infrastructure, and UX.\u003C/p>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">The core idea: rendering isn&#8217;t about where to assemble HTML, but about the data lifecycle.\u003C/h2>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">When we talk about SSR, SSG, ISR, or hybrid rendering, we are actually discussing several questions:\u003C/p>\n\n\n\n\u003Col class=\"wp-block-list\">\n\u003Cli>\u003Cstrong>When is the HTML generated?\u003C/strong>\n\u003Cul class=\"wp-block-list\">\n\u003Cli>At build time, on the server upon request, in advance, on a schedule, or partially.\u003C/li>\n\u003C/ul>\n\u003C/li>\n\n\n\n\u003Cli>\u003Cstrong>Where does the code execute?\u003C/strong>\n\u003Cul class=\"wp-block-list\">\n\u003Cli>In the browser, on the server, at the edge/CDN, in a serverless function, or on a Node server.\u003C/li>\n\u003C/ul>\n\u003C/li>\n\n\n\n\u003Cli>\u003Cstrong>How often is the data updated?\u003C/strong>\n\u003Cul class=\"wp-block-list\">\n\u003Cli>Never until the next deployment, every N seconds, upon an event, on every request, or only for a specific user.\u003C/li>\n\u003C/ul>\n\u003C/li>\n\n\n\n\u003Cli>\u003Cstrong>What is cached?\u003C/strong>\n\u003Cul class=\"wp-block-list\">\n\u003Cli>HTML, JSON payload, fetch request results, a component, a route-level response, or a CDN shell.\u003C/li>\n\u003C/ul>\n\u003C/li>\n\n\n\n\u003Cli>\u003Cstrong>What does the user see first?\u003C/strong>\n\u003Cul class=\"wp-block-list\">\n\u003Cli>An empty div, a fully rendered page, a skeleton, a static shell, or interface parts loaded via streaming.\u003C/li>\n\u003C/ul>\n\u003C/li>\n\u003C/ol>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">That is precisely why modern frameworks are gradually shifting away from the &#8220;one page = one mode&#8221; strategy toward a model where different parts of a single page can exhibit different behaviors. In Next.js, this trend is evident in features like Partial Prerendering and Cache Components, where a static shell can be served immediately, while dynamic sections are rendered and streamed later. The Next.js documentation describes PPR as an approach in which a static HTML shell is generated at build time, while dynamic components are rendered upon request and streamed to the client.\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> is the rendering of HTML on the server for each user request.\u003C/p>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">For example: the user opened /catalog → the server received the request → the server fetched the data → the server assembled the HTML → the browser received the ready-made page → JS hydrated the interface.\u003C/p>\n\n\n\n\u003Ch3 class=\"wp-block-heading\">When SSR is a good choice\u003C/h3>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">SSR is needed when the following are important:\u003C/p>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>SEO;\u003C/li>\n\n\n\n\u003Cli>up-to-date data;\u003C/li>\n\n\n\n\u003Cli>personalization;\u003C/li>\n\n\n\n\u003Cli>authentication;\u003C/li>\n\n\n\n\u003Cli>reliance on cookies,\u003C/li>\n\n\n\n\u003Cli>headers, or sessions;\u003C/li>\n\n\n\n\u003Cli>dynamic content delivery;\u003C/li>\n\n\n\n\u003Cli>pages that cannot be correctly pre-rendered.\u003C/li>\n\u003C/ul>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>Example:\u003C/li>\n\n\n\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 is well-suited for pages where the result depends on the current user or the current request.\u003C/p>\n\n\n\n\u003Ch3 class=\"wp-block-heading\">An example of SSR in Nuxt\u003C/h3>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">In Nuxt, universal rendering is enabled by default. On the first request, the page is rendered on the server, and then hydration occurs on the client. Nuxt also supports hybrid rules at the route level via routeRules, allowing you to change the behavior of individual URLs.\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\">With SSR, the user receives HTML already containing the product name and description. This is good for SEO and the first display.\u003C/p>\n\n\n\n\u003Ch3 class=\"wp-block-heading\">Disadvantages of SSR\u003C/h3>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">SSR isn&#8217;t free. It has a price:\u003C/p>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>The server works for every request;\u003C/li>\n\n\n\n\u003Cli>Higher TTFB with slow APIs;\u003C/li>\n\n\n\n\u003Cli>Infrastructure is required;\u003C/li>\n\n\n\n\u003Cli>Caching is more complex;\u003C/li>\n\n\n\n\u003Cli>More risky if the backend API crashes;\u003C/li>\n\n\n\n\u003Cli>Hydration can be expensive on low-end devices.\u003C/li>\n\u003C/ul>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">The biggest mistake is enabling SSR on all pages without understanding what exactly needs to be dynamic. SSR isn&#8217;t a magic performance button. If the server constantly calls a slow CMS, CRM, or external API, the user will wait. In this case, it&#8217;s better to consider caching, ISR, SWR, CDN, or partial static content.\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> is the generation of HTML during the project build phase.\u003C/p>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">For example: npm run build → The framework generates HTML in advance → The HTML is placed in dist/output → The CDN or server delivers the finished files\u003C/p>\n\n\n\n\u003Ch3 class=\"wp-block-heading\">When SSG is good\u003C/h3>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">SSG is ideal for pages that rarely change:\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\">This is a great choice for:\u003C/p>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>Blogs;\u003C/li>\n\n\n\n\u003Cli>Documentation;\u003C/li>\n\n\n\n\u003Cli>Landing pages;\u003C/li>\n\n\n\n\u003Cli>Corporate websites;\u003C/li>\n\n\n\n\u003Cli>Portfolios;\u003C/li>\n\n\n\n\u003Cli>Marketing pages;\u003C/li>\n\n\n\n\u003Cli>Service pages;\u003C/li>\n\n\n\n\u003Cli>SEO content.\u003C/li>\n\u003C/ul>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">The user receives the finished HTML almost instantly, and the server does not need to reassemble the page each time.\u003C/p>\n\n\n\n\u003Ch3 class=\"wp-block-heading\">An example of SSG in 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\">Or via 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 allows you to specify different rules for different routes: for example, the homepage can be prerendered, the blog can be cached via ISR, and the admin panel can be rendered only on the client. This approach is officially described in Nuxt as Hybrid Rendering via routeRules.\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> is a compromise between SSG and SSR.\u003C/p>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">The page is generated as static, but can be updated after deployment: based on time, request, or event.\u003C/p>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">For example: The first user opens /blog/post-1 → If the page doesn&#8217;t exist, it is generated → Subsequent users receive a cached version → After N seconds or after an event, the page is updated\u003C/p>\n\n\n\n\u003Ch3 class=\"wp-block-heading\">Why is ISR needed?\u003C/h3>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">ISR solves the main problem of SSG: there&#8217;s no need to rebuild the entire site for just one changed page.\u003C/p>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">For example, you might have a blog, news, a service catalog, or hotel room pages. The content changes, but not every second. SSR for every request is redundant, and a full rebuild is too expensive.\u003C/p>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">ISR allows you to say: update it every 60 seconds / 10 minutes / 1 hour / event-triggered.\u003C/p>\n\n\n\n\u003Ch3 class=\"wp-block-heading\">An example of an ISR in 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&#8217;s documentation shows similar scenarios: /blog might use isr:3600, individual posts might use isr:true, and product pages might use SWR with a cache period. Nuxt also specifies that for ISR/SWR routes, a _payload.json is generated, which is then used for client-side navigation instead of reloading data.\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\">The difference is simple:\u003C/p>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>SSR: every request → new render (SSR provides maximum freshness)\u003C/li>\n\n\n\n\u003Cli>ISR: first render → cache → periodic refresh (ISR provides a balance between speed and freshness)\u003C/li>\n\u003C/ul>\n\n\n\n\u003Ch3 class=\"wp-block-heading\">Where ISR is especially useful\u003C/h3>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">ISR is well suited for:\u003C/p>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>Blogs;\u003C/li>\n\n\n\n\u003Cli>News;\u003C/li>\n\n\n\n\u003Cli>Documentation;\u003C/li>\n\n\n\n\u003Cli>Catalogs;\u003C/li>\n\n\n\n\u003Cli>Product pages;\u003C/li>\n\n\n\n\u003Cli>Service pages;\u003C/li>\n\n\n\n\u003Cli>Event pages;\u003C/li>\n\n\n\n\u003Cli>SEO pages;\u003C/li>\n\n\n\n\u003Cli>CMS websites.\u003C/li>\n\u003C/ul>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">For example, for a corporate website on Nuxt + Headless CMS you can do this:\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\">This is similar to real production architecture: not one mode for the entire site, but different strategies for different types of pages.\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 is similar to ISR, but the emphasis is slightly different. The idea is to quickly serve the user the old cached version,\u003Cbr>and run the update in the background. This means the user doesn&#8217;t have to wait for a fresh generation. They receive a quick response, while the system simultaneously prepares the new version for subsequent requests.\u003C/p>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Example\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\">This means that the product page can be served from the cache, and the update will occur in the background.\u003C/p>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">SWR is especially useful when:\u003C/p>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>speed is more important than absolute freshness;\u003C/li>\n\n\n\n\u003Cli>a delay in updates is acceptable;\u003C/li>\n\n\n\n\u003Cli>the API may be slow;\u003C/li>\n\n\n\n\u003Cli>the page receives a lot of traffic;\u003C/li>\n\n\n\n\u003Cli>the backend needs to be protected from unnecessary load.\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> is not a single rendering method, but an architectural approach where different routes or even different parts of the page use different strategies.\u003C/p>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Example:\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\">In \u003Ca href=\"https://nuxt.com/docs/4.x/guide/concepts/rendering\">Nuxt hybrid rendering\u003C/a> it&#8217;s implemented through routeRules, where prerender, isr, swr, ssr:false, redirect, headers, and other rules can be assigned to different URL groups. Nuxt explicitly describes hybrid rendering as the ability to specify different caching rules per route.\u003C/p>\n\n\n\n\u003Ch3 class=\"wp-block-heading\">An example of a hybrid Nuxt architecture\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    // Home - as fast as possible\n    &#39;/&#39;: { prerender: true },\n\n    // Static pages\n    &#39;/about&#39;: { prerender: true },\n    &#39;/contacts&#39;: { prerender: true },\n\n    // Blog - updated every 10 minutes\n    &#39;/blog/**&#39;: { isr: 600 },\n\n    // The catalog is cached, but updated in the background.\n    &#39;/catalog/**&#39;: { swr: 300 },\n\n    // Search is always server-side because it depends on the query\n    &#39;/search&#39;: { ssr: true },\n\n    // The cabinet is dynamic and user-friendly.\n    &#39;/account/**&#39;: { ssr: true },\n\n    // Admin panel - SPA, no SEO needed\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\">This is how you can design rendering: without enabling SSR, you can divide the project into areas of responsibility.\u003C/p>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">Partial Prerendering: The Next Step After Hybrid Rendering\u003C/h2>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Hybrid rendering at the route level is great. But modern frameworks go further: now different parts of a \u003Cstrong>single route\u003C/strong> can behave differently.\u003C/p>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">For example, there&#8217;s a product page: /product/product-1 , which contains:\u003C/p>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>Header → static\u003C/li>\n\n\n\n\u003Cli>SEO text → static\u003C/li>\n\n\n\n\u003Cli>Product description → cacheable\u003C/li>\n\n\n\n\u003Cli>Price → frequently updated\u003C/li>\n\n\n\n\u003Cli>Availability → dynamic\u003C/li>\n\n\n\n\u003Cli>User cart → personalized\u003C/li>\n\n\n\n\u003Cli>Recommendations → user-specific\u003C/li>\n\n\n\n\u003Cli>Reviews → updated periodically\u003C/li>\n\u003C/ul>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Previously, you had to choose: the entire SSR page or the entire SSG/ISR page.\u003C/p>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">In \u003Ca href=\"https://nextjs.org/docs/app/guides/ppr-platform-guide\">Next.js Partial Prerendering\u003C/a> works exactly like this: at build time, a static HTML shell and postponedState are created, and at request time, the dynamic parts are rendered and streamed to the client.\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\">The idea isn&#8217;t that Suspense itself does magic. The idea is in the architecture: the static portion of the page can be prepared in advance, while the dynamic parts can be deferred, cached, or rendered on request.\u003C/p>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">The current Next.js documentation on Cache Components describes how the component tree is analyzed at build time: cached parts are placed in the static shell, the Suspense fallback is also placed in the shell, and dynamic content can be streamed during the request.\u003C/p>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">How to choose a strategy\u003C/h2>\n\n\n\n\u003Ch3 class=\"wp-block-heading\">Use SSG if:\u003C/h3>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>Data is stable.\u003C/li>\n\n\n\n\u003Cli>SEO is important.\u003C/li>\n\n\n\n\u003Cli>Updates are infrequent.\u003C/li>\n\n\n\n\u003Cli>No personalization.\u003C/li>\n\n\n\n\u003Cli>Maximum speed is needed.\u003C/li>\n\u003C/ul>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Example:\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\">Use SSR if:\u003C/h3>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>Data depends on the current request.\u003C/li>\n\n\n\n\u003Cli>Cookies/session/headers are present.\u003C/li>\n\n\n\n\u003Cli>Maximum freshness is needed.\u003C/li>\n\n\n\n\u003Cli>The page is personalized.\u003C/li>\n\u003C/ul>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Examples:\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\">Use ISR if:\u003C/h3>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>SEO is important.\u003C/li>\n\n\n\n\u003Cli>Content changes.\u003C/li>\n\n\n\n\u003Cli>But rendering for every request is not necessary.\u003C/li>\n\n\n\n\u003Cli>A slight delay in updating is acceptable.\u003C/li>\n\u003C/ul>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Examples:\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\">Use CSR if:\u003C/h3>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>SEO is not needed.\u003C/li>\n\n\n\n\u003Cli>This is a restricted area.\u003C/li>\n\n\n\n\u003Cli>The interface is app-like.\u003C/li>\n\n\n\n\u003Cli>Highly interactive.\u003C/li>\n\u003C/ul>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Examples:\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\">Use SWR if:\u003C/h3>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>The user needs to get a response quickly.\u003C/li>\n\n\n\n\u003Cli>A slightly outdated version can be shown.\u003C/li>\n\n\n\n\u003Cli>Updates can be performed in the background.\u003C/li>\n\u003C/ul>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Examples:\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\">Brief description of the approaches\u003C/h2>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>SSG: the fastest and cheapest, but data is updated only on rebuild.\u003C/li>\n\n\n\n\u003Cli>SSR: the most flexible, but the most expensive per request.\u003C/li>\n\n\n\n\u003Cli>ISR: almost like SSG, but pages can be updated after deployment.\u003C/li>\n\n\n\n\u003Cli>SWR: we serve the cache quickly and update it in the background.\u003C/li>\n\n\n\n\u003Cli>CSR: good for proprietary applications, but weaker for SEO and initial load.\u003C/li>\n\n\n\n\u003Cli>Hybrid Rendering: different routes use different strategies.\u003C/li>\n\n\n\n\u003Cli>Partial Prerendering / Server Islands: different parts of a single page can have different dynamics.\u003C/li>\n\u003C/ul>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">Conclusion\u003C/h2>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">\u003Cstrong>SSR\u003C/strong>, \u003Cstrong>SSG\u003C/strong>, \u003Cstrong>ISR\u003C/strong>, and \u003Cstrong>hybrid rendering\u003C/strong> are not competing technologies, but tools for different tasks. In 2026, a strong frontend architecture is built not around the slogan &#8220;SSR,&#8221; but around a precise understanding of:\u003C/p>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>which data is static,\u003C/li>\n\n\n\n\u003Cli>which data is dynamic,\u003C/li>\n\n\n\n\u003Cli>which data is personalized,\u003C/li>\n\n\n\n\u003Cli>which data is critical for SEO,\u003C/li>\n\n\n\n\u003Cli>which data can be cached,\u003C/li>\n\n\n\n\u003Cli>which blocks should not linger above the fold.\u003C/li>\n\u003C/ul>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>SSG provides speed.\u003C/li>\n\n\n\n\u003Cli>SSR provides flexibility.\u003C/li>\n\n\n\n\u003Cli>ISR provides balance.\u003C/li>\n\n\n\n\u003Cli>SWR provides stability under load.\u003C/li>\n\n\n\n\u003Cli>Hybrid rendering provides architectural freedom.\u003C/li>\n\n\n\n\u003Cli>Partial rendering and the islands approach take things to the next level – when not the entire page becomes dynamic, but only the portion that truly needs to be.\u003C/li>\n\u003C/ul>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">This is precisely the direction in which the modern frontend is moving: away from monolithic page rendering and toward a more sophisticated model where HTML, data, cache, server components, CDN, and interactivity work as a single system.\u003C/p>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">The main idea is simple: \u003Cstrong>don&#8217;t make the entire site dynamic just because one block depends on the user. And don&#8217;t make the entire site static if your business operates in real time.\u003C/strong>\u003C/p>\n",false,{"rendered":22,"protected":20},"\u003Cp>Just a few years ago, choosing a rendering approach for a web application often boiled down to a simple question: did we need an SPA or SSR? Modern frontend development is no longer about a single rendering mode for the entire project; instead, it involves an architectural mix of strategies—where some pages need to be static, others updated on a schedule, some rendered on every request, and others combining static content with dynamic, user-specific blocks.\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%% In 2026, we need to think in terms of cost per request, data freshness, SEO, personalization, caching, infrastructure, and UX.",[31],121,[],[34,14,35,36,37,38,39,40],"post-1845","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-frontend-architecture-en",[],"\u003C!-- This site is optimized with the Yoast SEO plugin v28.8 - https://yoast.com/product/yoast-seo-wordpress/ -->\n\u003Ctitle>SSR, SSG, ISR, and Hybrid Rendering: Modern Frontend Architecture\u003C/title>\n\u003Cmeta name=\"description\" content=\"- In 2026, we need to think in terms of cost per request, data freshness, SEO, personalization, caching, infrastructure, and 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/en/ssr-ssg-isr-and-hybrid-rendering-modern-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=\"SSR, SSG, ISR, and Hybrid Rendering: Modern Frontend Architecture\" class=\"yoast-seo-meta-tag\" />\n\u003Cmeta property=\"og:description\" content=\"- In 2026, we need to think in terms of cost per request, data freshness, SEO, personalization, caching, infrastructure, and UX.\" class=\"yoast-seo-meta-tag\" />\n\u003Cmeta property=\"og:url\" content=\"https://api.aoskin.ru/en/ssr-ssg-isr-and-hybrid-rendering-modern-frontend-architecture/\" 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:01:52+00:00\" class=\"yoast-seo-meta-tag\" />\n\u003Cmeta property=\"article:modified_time\" content=\"2026-06-21T15:21:22+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=\"8 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\\/en\\/ssr-ssg-isr-and-hybrid-rendering-modern-frontend-architecture\\/#article\",\"isPartOf\":{\"@id\":\"https:\\/\\/api.aoskin.ru\\/en\\/ssr-ssg-isr-and-hybrid-rendering-modern-frontend-architecture\\/\"},\"author\":{\"name\":\"aoskin\",\"@id\":\"https:\\/\\/api.aoskin.ru\\/#\\/schema\\/person\\/b5e1c81c85a50ca05e16fcdfa29f4861\"},\"headline\":\"SSR, SSG, ISR, and Hybrid Rendering: Modern Frontend Architecture\",\"datePublished\":\"2026-05-17T12:01:52+00:00\",\"dateModified\":\"2026-06-21T15:21:22+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\/\\/api.aoskin.ru\\/en\\/ssr-ssg-isr-and-hybrid-rendering-modern-frontend-architecture\\/\"},\"wordCount\":1826,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\/\\/api.aoskin.ru\\/#\\/schema\\/person\\/b5e1c81c85a50ca05e16fcdfa29f4861\"},\"image\":{\"@id\":\"https:\\/\\/api.aoskin.ru\\/en\\/ssr-ssg-isr-and-hybrid-rendering-modern-frontend-architecture\\/#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\\/en\\/ssr-ssg-isr-and-hybrid-rendering-modern-frontend-architecture\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\/\\/api.aoskin.ru\\/en\\/ssr-ssg-isr-and-hybrid-rendering-modern-frontend-architecture\\/\",\"url\":\"https:\\/\\/api.aoskin.ru\\/en\\/ssr-ssg-isr-and-hybrid-rendering-modern-frontend-architecture\\/\",\"name\":\"SSR, SSG, ISR, and Hybrid Rendering: Modern Frontend Architecture\",\"isPartOf\":{\"@id\":\"https:\\/\\/api.aoskin.ru\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\/\\/api.aoskin.ru\\/en\\/ssr-ssg-isr-and-hybrid-rendering-modern-frontend-architecture\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\/\\/api.aoskin.ru\\/en\\/ssr-ssg-isr-and-hybrid-rendering-modern-frontend-architecture\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\/\\/api.aoskin.ru\\/wp-content\\/uploads\\/2026\\/05\\/49-ssr-ssg-isr-hybrid-rendering.webp\",\"datePublished\":\"2026-05-17T12:01:52+00:00\",\"dateModified\":\"2026-06-21T15:21:22+00:00\",\"description\":\"- In 2026, we need to think in terms of cost per request, data freshness, SEO, personalization, caching, infrastructure, and UX.\",\"breadcrumb\":{\"@id\":\"https:\\/\\/api.aoskin.ru\\/en\\/ssr-ssg-isr-and-hybrid-rendering-modern-frontend-architecture\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\/\\/api.aoskin.ru\\/en\\/ssr-ssg-isr-and-hybrid-rendering-modern-frontend-architecture\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\/\\/api.aoskin.ru\\/en\\/ssr-ssg-isr-and-hybrid-rendering-modern-frontend-architecture\\/#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\\/en\\/ssr-ssg-isr-and-hybrid-rendering-modern-frontend-architecture\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\/\\/api.aoskin.ru\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"SSR, SSG, ISR, and Hybrid Rendering: Modern 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:\\/\\/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},"- In 2026, we need to think in terms of cost per request, data freshness, SEO, personalization, caching, infrastructure, and 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:01:52+00:00","2026-06-21T15:21:22+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},"8 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/en/ssr-ssg-isr-and-hybrid-rendering-modern-frontend-architecture/#article",{"@id":15},{"name":62,"@id":74},"https://api.aoskin.ru/#/schema/person/b5e1c81c85a50ca05e16fcdfa29f4861",{"@id":15},1826,0,{"@id":74},{"@id":80},"https://api.aoskin.ru/en/ssr-ssg-isr-and-hybrid-rendering-modern-frontend-architecture/#primaryimage",[82],"Frontend Architecture","en-US",[85],{"@type":86,"name":87,"target":88},"CommentAction","Comment",[89],"https://api.aoskin.ru/en/ssr-ssg-isr-and-hybrid-rendering-modern-frontend-architecture/#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/en/ssr-ssg-isr-and-hybrid-rendering-modern-frontend-architecture/#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/1845",{"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=1845",[161],{"count":162,"href":163},6,"https://api.aoskin.ru/wp-json/wp/v2/posts/1845/revisions",[165],{"id":166,"href":167},1855,"https://api.aoskin.ru/wp-json/wp/v2/posts/1845/revisions/1855",[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=1845",[175,178],{"taxonomy":176,"embeddable":125,"href":177},"category","https://api.aoskin.ru/wp-json/wp/v2/categories?post=1845",{"taxonomy":179,"embeddable":125,"href":180},"post_tag","https://api.aoskin.ru/wp-json/wp/v2/tags?post=1845",[182],{"name":183,"href":184,"templated":125},"wp","https://api.w.org/{rel}",{"author":186,"wp:featuredmedia":235,"wp:term":294},[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.8 - 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":292},[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":290,"href":291},1842,"https://api.aoskin.ru/wp-json/wp/v2/posts/1842",[293],{"name":183,"href":184,"templated":125},[295,343],[296],{"id":31,"link":297,"name":82,"slug":298,"taxonomy":176,"yoast_head":299,"yoast_head_json":300,"acf":325,"_links":326},"https://api.aoskin.ru/en/category/frontend-architecture-en/","frontend-architecture-en","\u003C!-- This site is optimized with the Yoast SEO plugin v28.8 - 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/en/category/frontend-architecture-en/\" 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/en/category/frontend-architecture-en/\" 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\\/en\\/category\\/frontend-architecture-en\\/\",\"url\":\"https:\\/\\/api.aoskin.ru\\/en\\/category\\/frontend-architecture-en\\/\",\"name\":\"Frontend Architecture Archives - api.aoskin.ru\",\"isPartOf\":{\"@id\":\"https:\\/\\/api.aoskin.ru\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\/\\/api.aoskin.ru\\/en\\/category\\/frontend-architecture-en\\/#breadcrumb\"},\"inLanguage\":\"en-US\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\/\\/api.aoskin.ru\\/en\\/category\\/frontend-architecture-en\\/#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":301,"robots":302,"canonical":297,"og_locale":51,"og_type":52,"og_title":301,"og_url":297,"og_site_name":53,"twitter_card":63,"schema":303},"Frontend Architecture Archives - api.aoskin.ru",{"index":46,"follow":47,"max-snippet":48,"max-image-preview":49,"max-video-preview":50},{"@context":67,"@graph":304},[305,310,314,320],{"@type":306,"@id":297,"url":297,"name":301,"isPartOf":307,"breadcrumb":308,"inLanguage":83},"CollectionPage",{"@id":93},{"@id":309},"https://api.aoskin.ru/en/category/frontend-architecture-en/#breadcrumb",{"@type":105,"@id":309,"itemListElement":311},[312,313],{"@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":315,"alternateName":115,"potentialAction":316,"inLanguage":83},{"@id":74},[317],{"@type":119,"target":318,"query-input":319},{"@type":121,"urlTemplate":122},{"@type":124,"valueRequired":125,"valueName":126},{"@type":321,"@id":74,"name":62,"image":322,"logo":323,"sameAs":324},[129,130],{"@type":103,"inLanguage":83,"@id":60,"url":60,"contentUrl":60,"width":58,"height":59,"caption":62},{"@id":60},[135],[],{"self":327,"collection":332,"about":335,"wp:post_type":338,"curies":341},[328],{"href":329,"targetHints":330},"https://api.aoskin.ru/wp-json/wp/v2/categories/121",{"allow":331},[143,144,145,146,147],[333],{"href":334},"https://api.aoskin.ru/wp-json/wp/v2/categories",[336],{"href":337},"https://api.aoskin.ru/wp-json/wp/v2/taxonomies/category",[339],{"href":340},"https://api.aoskin.ru/wp-json/wp/v2/posts?categories=121",[342],{"name":183,"href":184,"templated":125},[],1793437403772]