Оптимизация загрузки сайта для разных регионов (Edge Computing)
Edge Computing переносит часть вычислений с центрального сервера на граничные узлы CDN. Вместо того чтобы каждый запрос летел в дата-центр в Москве, он обрабатывается на ближайшем к пользователю Edge-узле — в Новосибирске, Берлине или Токио.
Что можно запускать на Edge
| Задача | Edge-решение | Провайдер |
|---|---|---|
| A/B тесты | Cloudflare Workers | Cloudflare |
| Определение локали и редиректы | Edge Middleware | Vercel, Cloudflare |
| Персонализация по гео | Workers KV | Cloudflare |
| Авторизация JWT | Edge Functions | Cloudflare, Netlify |
| SSR статических страниц | Durable Objects | Cloudflare |
| Image optimization | Image Resizing | Cloudflare Pro |
Cloudflare Workers: геоперсонализация
// workers/geo-personalization.js
export default {
async fetch(request, env) {
const country = request.cf.country;
const city = request.cf.city;
// Получаем ответ от origin
const response = await fetch(request);
const html = await response.text();
// Подставляем региональный контент
const personalized = html
.replace('{{COUNTRY}}', country)
.replace('{{SHIPPING_NOTICE}}', getShippingNotice(country))
.replace('{{CURRENCY}}', getCurrency(country));
return new Response(personalized, {
headers: response.headers,
status: response.status,
});
}
};
function getShippingNotice(country) {
const notices = {
'RU': 'Бесплатная доставка по России от 3 000 ₽',
'DE': 'Kostenloser Versand ab 50 €',
'US': 'Free shipping on orders over $50',
};
return notices[country] ?? 'Free international shipping';
}
Vercel Edge Middleware: редиректы и локализация
// middleware.ts (Next.js)
import { NextResponse } from 'next/server';
import type { NextRequest } from 'next/server';
export function middleware(request: NextRequest) {
const url = request.nextUrl.clone();
// Geo-based language redirect
const country = request.geo?.country ?? 'US';
const locale = countryToLocale(country);
if (url.pathname === '/') {
url.pathname = `/${locale}`;
return NextResponse.redirect(url, { status: 302 });
}
// Edge A/B testing
const bucket = request.cookies.get('ab_bucket')?.value
?? (Math.random() < 0.5 ? 'a' : 'b');
const response = NextResponse.next();
response.cookies.set('ab_bucket', bucket, { maxAge: 86400 * 30 });
response.headers.set('X-AB-Bucket', bucket);
return response;
}
export const config = {
matcher: ['/', '/(ru|en|de|fr)/:path*'],
runtime: 'edge', // выполняется на Edge, не на Node.js сервере
};
Edge KV Storage: кэш региональных данных
Cloudflare Workers KV — глобальное key-value хранилище с репликацией на все Edge-узлы. Задержка чтения < 1ms:
// Кэшируем данные о ценах по регионам
async function getRegionalPricing(country, env) {
const cacheKey = `pricing:${country}`;
const cached = await env.PRICING_KV.get(cacheKey, 'json');
if (cached) return cached;
// Запрашиваем у origin
const pricing = await fetch(`https://api.example.com/pricing?country=${country}`)
.then(r => r.json());
// Кэшируем на 1 час
await env.PRICING_KV.put(cacheKey, JSON.stringify(pricing), { expirationTtl: 3600 });
return pricing;
}
Durable Objects: SSR на Edge
Для сайтов с SSR (Next.js, Nuxt, Remix) Cloudflare Pages + Workers позволяет запускать серверный рендеринг на Edge-узлах без центрального сервера:
User (Tokyo) → Cloudflare Edge Tokyo
↓ SSR здесь, не в Москве
Rendered HTML → User
Задержка TTFB снижается с 300–500ms до 50–80ms для пользователей в регионах.
Метрики для измерения эффекта
До и после внедрения Edge-оптимизации:
- TTFB (Time to First Byte) — ключевая метрика, должна снизиться
- FCP (First Contentful Paint) — влияет на восприятие скорости
- Core Web Vitals по регионам в Google Search Console
Инструменты замера
# Замер TTFB из разных регионов через curl
curl -w "\nTTFB: %{time_starttransfer}s\nTotal: %{time_total}s\n" \
-o /dev/null -s https://example.com
# Или через WebPageTest с регионом
# https://www.webpagetest.org — выбрать Test Location: Moscow, Frankfurt, Singapore
Сроки
Базовая Edge-оптимизация (редиректы, геолокализация через Cloudflare Workers): 3–5 дней. Перенос SSR на Edge (Cloudflare Pages + Workers): 10–15 дней.







