Norsk

Utforsk Next.js Edge Config: en kraftig løsning for global distribusjon av konfigurasjon med hastighet og effektivitet. Lær hvordan du optimaliserer applikasjonen din med dynamisk konfigurasjon på kanten.

Next.js Edge Config: Global konfigurasjonsdistribusjon gjort enkelt

I dagens raskt utviklende landskap for webutvikling er det avgjørende å levere personlige og dynamiske opplevelser til brukere over hele verden. Next.js, et populært React-rammeverk, tilbyr en robust løsning for å bygge ytelsessterke og skalerbare webapplikasjoner. En av nøkkelfunksjonene er Edge Config, et kraftig verktøy for å administrere og distribuere konfigurasjon globalt på kanten (edge). Dette blogginnlegget gir en omfattende guide til å forstå og bruke Next.js Edge Config for å optimalisere applikasjonens ytelse og levere skreddersydde opplevelser til ditt globale publikum.

Hva er Next.js Edge Config?

Next.js Edge Config er en globalt distribuert nøkkel-verdi-database med lav latens, spesielt designet for å levere konfigurasjonsdata til Next.js Edge Functions. I motsetning til tradisjonelle databaser eller API-er, er Edge Config optimalisert for hastighet og effektivitet, noe som gjør at du kan få tilgang til konfigurasjonsdata på millisekunder fra hvor som helst i verden. Dette gjør det mulig å dynamisk justere applikasjonens oppførsel basert på konfigurasjonsverdier, uten å ofre ytelsen.

Tenk på det som en globalt replikert JSON-fil som du kan spørre mot utrolig raskt fra Edge Functions. Dette gjør den ideell for:

Hvorfor bruke Edge Config?

Her er de viktigste fordelene med å bruke Next.js Edge Config:

Hvordan komme i gang med Edge Config

Her er en trinn-for-trinn-guide for å komme i gang med Next.js Edge Config:

1. Prosjektoppsett

Sørg for at du har et Next.js-prosjekt. Hvis ikke, kan du opprette et med:

npx create-next-app@latest my-app
cd my-app

2. Opprett en Edge Config

Du trenger en Vercel-konto for å bruke Edge Config. Når du er logget inn, naviger til ditt Vercel-prosjekt og opprett en ny Edge Config. Gi den et beskrivende navn.

3. Installer Edge Config SDK

Installer @vercel/edge-config SDK-en i ditt Next.js-prosjekt:

npm install @vercel/edge-config
# or
yarn add @vercel/edge-config
# or
pnpm install @vercel/edge-config

4. Konfigurer miljøvariabler

Du må konfigurere miljøvariabelen EDGE_CONFIG. Du finner verdien for denne variabelen i Vercel-dashboardet for din Edge Config. Legg den til i din .env.local-fil (eller i Vercel-prosjektinnstillingene for produksjon):

EDGE_CONFIG=your_edge_config_url

Viktig: Aldri legg til din .env.local-fil i repositoryet ditt. Bruk Vercels innstillinger for miljøvariabler for produksjonsmiljøer.

5. Få tilgang til konfigurasjonsverdier i koden din

Nå kan du få tilgang til dine Edge Config-verdier i Next.js-koden din. Her er et eksempel:

// pages/index.js
import { get } from '@vercel/edge-config';

export async function getServerSideProps() {
  const featureFlag = await get('featureFlag');
  const welcomeMessage = await get('welcomeMessage');

  return {
    props: {
      featureFlag,
      welcomeMessage,
    },
  };
}

export default function Home({ featureFlag, welcomeMessage }) {
  return (
    <div>
      <h1>{welcomeMessage}</h1>
      {featureFlag ? <p>Funksjonen er aktivert!</p> : <p>Funksjonen er deaktivert.</p>}
    </div>
  );
}

I dette eksempelet henter vi verdiene til featureFlag og welcomeMessage fra Edge Config i getServerSideProps. Disse verdiene blir deretter sendt som props til Home-komponenten.

6. Oppdatere konfigurasjonsverdier

Du kan oppdatere verdiene i din Edge Config via Vercel-dashboardet. Endringer spres globalt i løpet av millisekunder.

Avanserte bruksområder og eksempler

A/B-testing med Edge Config

Edge Config er perfekt for A/B-testing. Du kan definere en konfigurasjonsverdi som bestemmer hvilken versjon av applikasjonen som skal serveres til en bruker. For eksempel:

  1. Opprett en Edge Config med en nøkkel kalt abTestGroup.
  2. Sett verdien til enten A eller B.
  3. I din Edge Function, les abTestGroup-verdien.
  4. Basert på verdien, server enten versjon A eller versjon B av innholdet ditt.

Her er et eksempel:

// pages/index.js
import { get } from '@vercel/edge-config';

export async function getServerSideProps() {
  const abTestGroup = await get('abTestGroup');

  let content;
  if (abTestGroup === 'A') {
    content = 'Dette er versjon A!';
  } else {
    content = 'Dette er versjon B!';
  }

  return {
    props: {
      content,
    },
  };
}

export default function Home({ content }) {
  return (
    <div>
      <h1>A/B Test</h1>
      <p>{content}</p>
    </div>
  );
}

Du kan bruke analyseverktøy for å spore ytelsen til hver versjon og avgjøre hvilken versjon som presterer bedre. Vurder verktøy som Google Analytics, Amplitude eller Mixpanel for omfattende datainnsamling og analyse for A/B-testing.

Funksjonsflagg (Feature Flags) med Edge Config

Funksjonsflagg lar deg aktivere eller deaktivere funksjoner uten å måtte distribuere ny kode. Dette er nyttig for å teste nye funksjoner i produksjon eller rulle ut funksjoner gradvis til en delmengde av brukere. I likhet med A/B-testing kan du kontrollere funksjonstilgjengelighet med et enkelt boolsk flagg i din Edge Config.

  1. Opprett en Edge Config med en nøkkel kalt newFeatureEnabled.
  2. Sett verdien til enten true eller false.
  3. I din Edge Function, les newFeatureEnabled-verdien.
  4. Basert på verdien, aktiver eller deaktiver den nye funksjonen.
// components/MyComponent.js
import { get } from '@vercel/edge-config';

export async function MyComponent() {
  const newFeatureEnabled = await get('newFeatureEnabled');

  return (
    <div>
      {newFeatureEnabled ? <p>Ny funksjon er aktivert!</p> : <p>Ny funksjon er deaktivert.</p>}
    </div>
  );
}

export default MyComponent;

Personalisering med Edge Config

Du kan bruke Edge Config til å personalisere innhold og opplevelser basert på brukerpreferanser eller plassering. For eksempel kan du lagre brukerpreferanser i en database og deretter bruke Edge Config til å servere forskjellig innhold basert på disse preferansene.

Eksempelscenario: En global e-handelside ønsker å vise produktanbefalinger basert på brukerens land. De kan bruke en Edge Config til å kartlegge land til anbefalingskategorier.

  1. Opprett en Edge Config med en nøkkel kalt countryToCategoryMap.
  2. Sett verdien til et JSON-objekt som kartlegger land til produktkategorier (f.eks. {"US": "Electronics", "GB": "Fashion", "JP": "Home Goods"}).
  3. I din Edge Function, les countryToCategoryMap-verdien.
  4. Bestem brukerens land (f.eks. fra IP-adressen eller en cookie).
  5. Bruk countryToCategoryMap for å finne den passende produktkategorien.
  6. Vis produktanbefalinger fra den kategorien.
// pages/products.js
import { get } from '@vercel/edge-config';

export async function getServerSideProps(context) {
  const countryToCategoryMap = await get('countryToCategoryMap');
  const country = context.req.headers['x-vercel-ip-country'] || 'US'; // Standard til US
  const category = countryToCategoryMap[country] || 'General'; // Standard til General

  // Hent produktanbefalinger basert på kategorien
  const products = await fetchProducts(category);

  return {
    props: {
      products,
    },
  };
}

export default function Products({ products }) {
  return (
    <div>
      <h1>Produktanbefalinger</h1>
      <ul>
        {products.map((product) => (
          <li key={product.id}>{product.name}</li>
        ))}
      </ul>
    </div>
  );
}

async function fetchProducts(category) {
  // Erstatt med din faktiske logikk for produktinnhenting
  return [
    { id: 1, name: `Produkt 1 (${category})` },
    { id: 2, name: `Produkt 2 (${category})` },
  ];
}

Dette eksempelet bruker x-vercel-ip-country-headeren for å bestemme brukerens land. Denne headeren legges automatisk til av Vercel. Det er viktig å merke seg at å stole utelukkende på IP-basert geolokalisering ikke alltid er nøyaktig. Vurder å bruke andre metoder som bruker-oppgitt plassering eller mer sofistikerte geolokasjonstjenester for forbedret nøyaktighet.

Geografisk ruting med Edge Config

Du kan rute brukere til forskjellige ressurser basert på deres plassering ved hjelp av Edge Config. Dette er nyttig for å servere lokalisert innhold eller for å overholde regionale reguleringer.

  1. Opprett en Edge Config med en nøkkel kalt countryToRedirectMap.
  2. Sett verdien til et JSON-objekt som kartlegger land til URL-er (f.eks. {"CN": "/china", "DE": "/germany"}).
  3. I din Edge Function, les countryToRedirectMap-verdien.
  4. Bestem brukerens land (f.eks. fra IP-adressen).
  5. Omdiriger brukeren til den passende URL-en.
// pages/_middleware.js
import { NextResponse } from 'next/server'
import { get } from '@vercel/edge-config';

export async function middleware(req) {
  const countryToRedirectMap = await get('countryToRedirectMap');
  const country = req.geo.country || 'US'; // Standard til US
  const redirectUrl = countryToRedirectMap[country];

  if (redirectUrl) {
    return NextResponse.redirect(new URL(redirectUrl, req.url))
  }

  return NextResponse.next()
}

export const config = {
  matcher: '/',
}

Dette eksempelet bruker req.geo.country-egenskapen, som automatisk fylles ut av Vercels Edge Network med brukerens landskode. Dette er en renere og mer pålitelig tilnærming enn å parse x-vercel-ip-country-headeren direkte. Middleware-funksjonen sjekker om det er definert en omdirigerings-URL for brukerens land i Edge Config. Hvis det er det, omdirigerer den brukeren til den URL-en. Ellers fortsetter den å behandle forespørselen.

Rate Limiting (hastighetsbegrensning) med Edge Config

Selv om Edge Config ikke er designet for å være en fullverdig løsning for hastighetsbegrensning, kan du bruke den i kombinasjon med andre teknikker for å implementere grunnleggende hastighetsbegrensning. Ideen er å lagre parametere for hastighetsbegrensning (f.eks. forespørsler per minutt) i Edge Config og deretter bruke disse parameterne i dine Edge Functions for å håndheve grensene.

Viktig merknad: Denne tilnærmingen er egnet for enkle scenarioer med hastighetsbegrensning. For mer robust hastighetsbegrensning, vurder å bruke dedikerte tjenester eller middleware for dette.

  1. Opprett en Edge Config med nøkler som requestsPerMinute og blockedIps.
  2. Sett requestsPerMinute-verdien til ønsket hastighetsgrense.
  3. Sett blockedIps-verdien til en liste med IP-adresser som skal blokkeres.
  4. I din Edge Function, les requestsPerMinute- og blockedIps-verdiene.
  5. Sjekk om brukerens IP-adresse er i blockedIps-listen. Hvis ja, blokker forespørselen.
  6. Bruk en cache-mekanisme (f.eks. Redis eller Vercels Edge Cache) for å spore antall forespørsler fra hver IP-adresse i løpet av det siste minuttet.
  7. Hvis antall forespørsler fra brukerens IP-adresse overstiger requestsPerMinute-grensen, blokker forespørselen.

Eksempel (Illustrerende - Krever ytterligere implementering for caching):

// pages/api/protected-route.js
import { get } from '@vercel/edge-config';

export default async function handler(req, res) {
  const requestsPerMinute = await get('requestsPerMinute');
  const blockedIps = await get('blockedIps');
  const ip = req.headers['x-real-ip'] || req.connection.remoteAddress; // Hent brukerens IP

  // Sjekk om IP er blokkert
  if (blockedIps && blockedIps.includes(ip)) {
    return res.status(429).send('For mange forespørsler');
  }

  // TODO: Implementer forespørselstelling og caching (f.eks. med Redis eller Vercel Edge Cache)
  // Eksempel (Konseptuelt):
  // const requestCount = await getRequestCount(ip);
  // if (requestCount > requestsPerMinute) {
  //   return res.status(429).send('For mange forespørsler');
  // }
  // await incrementRequestCount(ip);

  // Din beskyttede rute-logikk her
  res.status(200).send('Beskyttet rute aksessert vellykket!');
}

Viktige hensyn for hastighetsbegrensning:

Beste praksis for bruk av Edge Config

Alternativer til Edge Config

Selv om Edge Config er et kraftig verktøy, er det ikke alltid den beste løsningen for alle bruksområder. Her er noen alternativer å vurdere:

Konklusjon

Next.js Edge Config er et kraftig verktøy for å administrere og distribuere konfigurasjon globalt på kanten. Ved å utnytte Edge Config kan du optimalisere applikasjonens ytelse, levere personlige opplevelser og forenkle arbeidsflyten for konfigurasjonshåndtering. Enten du bygger en global e-handelside, en sosial medieplattform eller en hvilken som helst annen type webapplikasjon, kan Edge Config hjelpe deg med å levere en rask og engasjerende opplevelse til dine brukere over hele verden. Utforsk mulighetene og integrer Edge Config i dine Next.js-prosjekter i dag for å låse opp potensialet!