Omandage Reacti serverikomponentide vahemÀlu intelligentse andmete kehtetuks tunistamise strateegiatega. Optimeerige jÔudlust ja tagage andmete vÀrskus globaalsetes rakendustes.
Reacti serverikomponentide vahemÀlu: intelligentne andmete kehtetuks tunnistamine globaalsetes rakendustes
Veebiarenduse kiiresti arenevas maastikus on jĂ”udlus ja andmete vĂ€rskus esmatĂ€htsad. Reacti serverikomponendid (RSC), eriti koos selliste raamistikega nagu Next.js, pakuvad vĂ”imsat paradigmat tĂ”husate ja dĂŒnaamiliste rakenduste loomiseks. Siiski nĂ”uab RSC-de tĂ€ielik Ă€rakasutamine nende vahemĂ€lu mehhanismide ja, mis on kĂ”ige olulisem, intelligentse andmete kehtetuks tunnistamise strateegiate rakendamise pĂ”hjalikku mĂ”istmist. See pĂ”hjalik juhend sukeldub RSC vahemĂ€lu keerukustesse, pakkudes tegutsemisvĂ”imelisi teadmisi globaalsetele arendusmeeskondadele, kes soovivad pakkuda erakordseid kasutuskogemusi.
Reacti serverikomponentide ja vahemÀlu lubadus
Reacti serverikomponendid vÔimaldavad arendajatel komponente serveris renderdada, saates kliendile ainult vajaliku JavaScripti ja HTML-i. See lÀhenemisviis vÀhendab oluliselt kliendipoolse JavaScripti paketi suurust, mis toob kaasa kiirema esialgse lehe laadimise ja parema jÔudluse, eriti aeglasemate vÔrkude vÔi vÀhem vÔimsate seadmete puhul. Lisaks saavad RSC-d otseselt juurdepÀÀsu serveripoolsetele ressurssidele, nagu andmebaasid ja API-d, ilma et oleks vaja eraldi andmete hankimiskÔnesid kliendilt.
VahemĂ€lu on selle ökosĂŒsteemi lahutamatu osa. Renderdatud serverikomponentide vĂ€ljundi intelligentselt vahemĂ€llu salvestades saame vĂ€ltida liigset arvutamist ja andmete hankimist, suurendades veelgi jĂ”udlust ja skaleeritavust. VĂ€ljakutse seisneb aga selles, et vahemĂ€llu salvestatud andmed pĂŒsiksid ajakohased. Aegunud andmed vĂ”ivad viia halva kasutuskogemuseni, eriti globaalsetes rakendustes, kus kasutajad erinevates piirkondades vĂ”ivad oodata reaalajas teavet.
RSC vahemÀlu mehhanismide mÔistmine
Reacti serverikomponendid kasutavad keerukat vahemĂ€lu sĂŒsteemi, mis töötab erinevatel tasemetel. Nende tasemete mĂ”istmine on efektiivse kehtetuks tunnistamise vĂ”ti:
1. Marsruudi vahemÀlu
Next.js, populaarne RSC-de raamistik, salvestab tervete lehtede vÔi marsruutide vahemÀllu. See tÀhendab, et kui marsruut on serveris renderdatud, saab selle vÀljundi salvestada ja serveerida otse jÀrgnevate pÀringute jaoks, mööda serveripoolset renderdusloogikat. See on eriti efektiivne staatilise vÔi harva muutuva sisu puhul.
2. Komponendi taseme vahemÀllu salvestamine (memoiseerimine)
React ise pakub memoiseerimiseks mehhanisme, nagu React.memo funktsionaalsete komponentide jaoks ja PureComponent klassikomponentide jaoks. Kuigi need keskenduvad peamiselt ĂŒmberrenderduste vĂ€ltimisele kliendipoolsel poolel rekvisiitide muutuste pĂ”hjal, on memoiseerimise pĂ”himĂ”tted olulised ka RSC-de jaoks, et vĂ€ltida komponendi vĂ€ljundi uuesti arvutamist, kui selle sĂ”ltuvused pole muutunud.
3. Andmete hankimise vahemÀllu salvestamine
Kui RSC-d hangivad andmeid vÀlistest API-dest vÔi andmebaasidest, on andmete hankimiseks kasutatavatel raamistikel vÔi teekidel sageli oma vahemÀlu strateegiad. NÀiteks pakuvad sellised teegid nagu SWR vÔi React Query vÔimsaid funktsioone, nagu stale-while-revalidate, taustal uuesti valideerimine ja pÀringu taseme vahemÀllu salvestamine.
4. Serveri vahemÀlu (Next.js-i spetsiifiline)
Next.js tutvustab serveri vahemĂ€lu, mis salvestab serverikomponentides tehtud fetch-pĂ€ringute tulemused. See vahemĂ€lu pĂ”hineb fetch-pĂ€ringu URL-il ja valikutel. Vaikimisi salvestab Next.js hangitud andmed teatud ajaks (dĂŒnaamiline vahemĂ€lu vĂ”i staatiline genereerimine). See on kriitiline kiht andmete vĂ€rskuse haldamiseks.
Andmete kehtetuks tunnistamise vÀljakutse
VahemÀllu salvestamise peamine probleem on andmete jÀrjepidevuse sÀilitamine. Kui aluseks olevad andmed muutuvad, muutub vahemÀllu salvestatud versioon aegunuks. Globaalses rakenduses, kus andmeid vÔivad uuendada kasutajad erinevatest ajavöönditest vÔi piirkondadest, vÔib see viia killustatud kasutuskogemuseni.
VĂ”tke arvesse e-kaubanduse rakendust tootelaosega. Kui toote laoseis uuendatakse Euroopa laos, kuid Aasia kasutaja vahemĂ€llu salvestatud andmed peegeldavad vana laoseisu, vĂ”ib see viia ĂŒlemĂŒĂŒmiseni vĂ”i pettumiseni. Samamoodi nĂ”uavad reaalajas uudistevood vĂ”i finantsandmed koheseid vĂ€rskendusi.
Traditsioonilised kehtetuks tunnistamise strateegiad, nagu nĂ€iteks kogu vahemĂ€lu kustutamine pĂ€rast iga andmevĂ€rskendust, on sageli ebaefektiivsed ja vĂ”ivad vahemĂ€llu salvestamise jĂ”udluse eelised tĂŒhistada. Vajalik on intelligentsem lĂ€henemine.
Intelligentsed andmete kehtetuks tunnistamise strateegiad RSC-de jaoks
Intelligentne andmete kehtetuks tunnistamine keskendub ainult selle konkreetse vahemĂ€llu salvestatud andmete kehtetuks tunnistamisele, mis on aegunud, mitte laiale pĂŒhkimisele. Siin on mitu tĂ”husat strateegiat:
1. Sildi-pÔhine kehtetuks tunnistamine
See on vĂ€ga tĂ”hus strateegia, kus seostate konkreetseid silte vahemĂ€llu salvestatud andmetega. Kui andmeid uuendatakse, tĂŒhistate kĂ”ik vahemĂ€llu salvestatud ĂŒksused, millel on see konkreetne silt. NĂ€iteks kui vĂ€rskendate toote ĂŒksikasju, vĂ”ite sildistada vahemĂ€llu salvestatud komponendi vĂ”i andmed sildiga 'toode-123'. Kui toodet uuendatakse, saadate signaali selle sildiga seotud vahemĂ€lu kehtetuks tunnistamiseks.
Kuidas see rakendub RSC-dele:
- Kohandatud andmete hankimine: Kui hangite andmeid RSC-s, saate laiendada hangimise pÀringut vÔi mÀhkida seda, et lisada kohandatud metaandmeid, nagu sildid.
- Raamistiku tugi: Next.js, millel on funktsioon `revalidateTag` (saadaval rakenduse ruuteris), toetab seda otseselt. Saate helistada `revalidateTag('my-tag')`, et kehtetuks tunnistada kÔik vahemÀllu salvestatud andmed, mis hangiti, kasutades valikut `tag('my-tag')`.
NĂ€ide:
// Serverikomponendis tooteandmete hankimine
async function getProduct(id) {
const res = await fetch(`https://api.example.com/products/${id}`, {
next: { tags: [`product-${id}`] } // PĂ€ringu sildistamine
});
if (!res.ok) {
throw new Error('Toote hankimine ebaÔnnestus');
}
return res.json();
}
// API marsruudil vÔi mutatsioonikÀsitlejas, kui toodet uuendatakse
import { revalidateTag } from 'next/cache';
export async function POST(request) {
// ... uuenda toodet andmebaasis ...
const productId = request.body.id;
revalidateTag(`product-${productId}`); // TĂŒhista selle toote vahemĂ€lu
return new Response('Toode uuendatud', { status: 200 });
}
2. AjapÔhine uuesti valideerimine (ISR)
TÀiendav staatiline regenereerimine (ISR) vÔimaldab teil staatilisi lehti vÀrskendada pÀrast nende juurutamist. See saavutatakse lehe uuesti valideerimisega mÀÀratud ajavahemike jÀrel. Kuigi see pole rangelt kehtetuks tunnistamine, on see plaanitud vÀrskenduse vorm, mis hoiab andmed ajakohasena ilma kÀsitsi sekkumiseta.
Kuidas see rakendub RSC-dele:
revalidatevalik: Next.js-is saate seadarevalidatevaliku funktsioonis `fetch` vÔi `generateStaticParams`, et mÀÀrata sekundites aeg, mille möödudes vahemÀllu salvestatud andmed vÔi leht tuleks uuesti valideerida.
NĂ€ide:
async function getLatestNews() {
const res = await fetch('https://api.example.com/news/latest', {
next: { revalidate: 60 } // Uuesti valideerimine iga 60 sekundi jÀrel
});
if (!res.ok) {
throw new Error('Uudiste hankimine ebaÔnnestus');
}
return res.json();
}
Globaalne kaalutlus: Kui mÀÀrate globaalsete rakenduste uuesti valideerimise aegu, arvestage oma kasutajate geograafilist jaotust ja andmete vĂ€rskenduste vastuvĂ”etavat latentsust. 60-sekundiline uuesti valideerimine vĂ”ib olla hea mĂ”ne sisu jaoks, samas kui teised vĂ”ivad nĂ”uda peaaegu reaalajas vĂ€rskendusi (mis kaldub rohkem sildi-pĂ”hise kehtetuks tunnistamise vĂ”i dĂŒnaamilise renderdamise poole).
3. SĂŒndmuspĂ”hine kehtetuks tunnistamine
See lĂ€henemisviis seob vahemĂ€lu kehtetuks tunnistamise konkreetsete sĂŒndmustega, mis teie sĂŒsteemis toimuvad. Kui juhtub asjakohane sĂŒndmus (nt kasutaja tegevus, andmete muutus teises teenuses), saadetakse sĂ”num vastavate vahemĂ€lu kirjete kehtetuks tunnistamiseks. Seda rakendatakse sageli sĂ”numijĂ€rjekordade (nt Kafka, RabbitMQ) vĂ”i veebihaakidega.
Kuidas see rakendub RSC-dele:
- Veebihaagid: Teie taustateenused vÔivad saata veebihaake teie Next.js rakendusele (nt API marsruudile) alati, kui andmed muutuvad. See API marsruut kÀivitab seejÀrel vahemÀlu kehtetuks tunnistamise (nt kasutades
revalidateTagvÔirevalidatePath). - SÔnumijÀrjekorrad: Taustaprogramm vÔib tarbida sÔnumeid jÀrjekorrast ja kÀivitada kehtetuks tunnistamise toiminguid.
NĂ€ide:
// API marsruudil, mis saab CMS-ist veebihaagi
import { revalidateTag } from 'next/cache';
export async function POST(request) {
const { model, id, eventType } = await request.json();
if (eventType === 'update' && model === 'product') {
revalidateTag(`product-${id}`);
console.log(`TĂŒhistatud vahemĂ€lu toote jaoks: ${id}`);
}
// ... teiste sĂŒndmuste kĂ€sitlemine ...
return new Response('Veebihaak vastu vÔetud', { status: 200 });
}
4. NÔudmisel uuesti valideerimine
See on kÀsitsi vÔi programmilise viis vahemÀlu uuesti valideerimise kÀivitamiseks. See on kasulik stsenaariumide jaoks, kus soovite andmeid selgesÔnaliselt vÀrskendada, vÔib-olla pÀrast seda, kui kasutaja on muudatuse kinnitanud vÔi kui on tehtud konkreetne halduslik toiming.
Kuidas see rakendub RSC-dele:
revalidateTagjarevalidatePath: Nagu mainitud, saab neid funktsioone kutsuda programmiliselt API marsruutides vÔi serveripoolses loogikas uuesti valideerimise kÀivitamiseks.- Serveri toimingud: Serverikomponentides tehtud mutatsioonide puhul saavad serveritoimingud pÀrast edukat mutatsiooni otse valideerimisfunktsioone kutsuda.
NĂ€ide:
// Serveri toimingu kasutamine uuendamiseks ja uuesti valideerimiseks
'use server';
import { revalidateTag } from 'next/cache';
import { db } from './db'; // Teie andmebaasi pÀÀsukiht
export async function updateProductAction(formData) {
const productId = formData.get('productId');
const newName = formData.get('name');
// Toote vÀrskendamine andmebaasis
await db.updateProduct(productId, { name: newName });
// TĂŒhista selle toote vahemĂ€lu
revalidateTag(`product-${productId}`);
// Valikuliselt uuesti valideeri toote lehe tee
revalidatePath(`/products/${productId}`);
return { message: 'Toode on edukalt uuendatud' };
}
5. DĂŒnaamiline renderdamine vs vahemĂ€llu salvestatud renderdamine
MĂ”nikord on parim vahemĂ€lu strateegia mitte ĂŒldse vahemĂ€llu salvestamine. VĂ€ga dĂŒnaamilise sisu puhul, mis muutub sageli ja on iga kasutaja pĂ€ringu jaoks unikaalne (nt isikupĂ€rastatud armatuurlauad, ostukorvi sisu), on dĂŒnaamiline renderdamine sobivam. RSC-d vĂ”imaldavad teil valida, millal vahemĂ€llu salvestada ja millal dĂŒnaamiliselt renderdada.
Kuidas see rakendub RSC-dele:
cache: 'no-store': HangimispÀringute puhul keelab see valik selgesÔnaliselt vahemÀllu salvestamise.revalidate: 0: Valides revalidate vÀÀrtuseks 0, keelatakse samuti tÔhusalt vahemÀllu salvestamine selle konkreetse hangimispÀringu jaoks, sundides seda igal pÀringul uuesti renderdama.
NĂ€ide:
async function getUserProfile(userId) {
const res = await fetch(`https://api.example.com/users/${userId}`, {
cache: 'no-store' // Hankige alati vÀrskeid andmeid
});
if (!res.ok) {
throw new Error('Profiili hankimine ebaÔnnestus');
}
return res.json();
}
Globaalne mĂ”ju: TĂ”eliselt globaalsete, isikupĂ€rastatud kogemuste jaoks valige hoolikalt, millised andmepunktid *peavad* olema dĂŒnaamilised. Mitte-tundlike, harvemini muutuvate andmete vahemĂ€llu salvestamine kogu piirkonnas vĂ”ib siiski anda mĂ€rkimisvÀÀrset jĂ”udlust.
VahemÀllu salvestamise rakendamine vÀliste andmeallikatega
Kui teie RSC-d hangivad andmeid vÀlistest API-dest vÔi oma taustateenustest, muutub vahemÀllu salvestamise ja kehtetuks tunnistamise integreerimine kriitiliseks. Siin on, kuidas sellele lÀheneda:
1. API disain vahemÀllu salvestatavuse jaoks
Kujundage oma API-d vahemÀllu salvestamist silmas pidades. Kasutage selgeid ressursiidentifikaatoreid URL-ides, mis vÔivad toimida vahemÀlu vÔtmetena. NÀiteks `/api/products/123` on oma olemuselt rohkem vahemÀllu salvestatav kui `/api/products?filter=expensive&sort=price`, kui viimane muudab sageli oma parameetreid.
2. HTTP vahemÀlu pÀiste kasutamine
Kuigi RSC-d haldavad oma vahemÀlu kihte, vÔib kasulik olla standardsete HTTP vahemÀlu pÀiste, nagu Cache-Control, ETag ja Last-Modified austamine teie API vastustest. Raamistikud nagu Next.js saavad neid pÀiseid kasutada oma vahemÀlu otsuste teavitamiseks.
3. VahemÀlu vÔtmed ja jÀrjepidevus
Veenduge, et teie vahemĂ€lu vĂ”tmed oleksid jĂ€rjepidevad ja esitaksid tĂ€pselt andmeid, mida nad salvestavad. Sildi-pĂ”hise kehtetuks tunnistamise jaoks on hĂ€sti struktureeritud sildistussĂŒsteem hĂ€davajalik. NĂ€iteks `ressursiTĂŒĂŒp-ressursiID` (nt `toode-123`, `kasutaja-456`) on levinud ja tĂ”hus muster.
4. Mutatsioonide ja kÔrvalmÔjude kÀsitlemine
Mutatsioonid (POST-, PUT-, DELETE-pÀringud) on peamised andmete vÀrskenduste kÀivitajad, mis nÔuavad vahemÀlu kehtetuks tunnistamist. Veenduge, et pÀrast edukat mutatsiooni kÀivitatakse viivitamatult teie kehtetuks tunnistamise mehhanism.
Kaalutlused globaalsete mutatsioonide jaoks: Kui kasutaja ĂŒhes piirkonnas teeb mutatsiooni, mis mĂ”jutab teiste piirkondade kasutajate poolt vaadatavaid andmeid, peab kehtetuks tunnistamine Ă”igesti levima. Siin muutub tugev sĂŒndmuspĂ”hine vĂ”i sildi-pĂ”hine kehtetuks tunnistamine kriitiliseks.
TÀpsemad vahemÀllu salvestamise mustrid globaalseks skaleerimiseks
Kui teie rakendus skaleerub globaalselt, vÔite kohata stsenaariume, mis nÔuavad keerukamaid vahemÀlu strateegiaid.
1. Stale-While-Revalidate (SWR) RSC-de jaoks
Kuigi SWR on tĂŒĂŒpiliselt kliendipoolne teek, on selle pĂ”hi filosoofia, et kĂ”igepealt tagastatakse vahemĂ€llu salvestatud andmed ja seejĂ€rel valideeritakse taustal uuesti, vĂ”imas kontseptsioon. Saate seda kĂ€itumist RSC-des jĂ€ljendada, kasutades ajapĂ”hise uuesti valideerimise ja intelligentse kehtetuks tunnistamise kombinatsiooni. Kui komponenti kĂŒsitakse, serveerib see olemasolevat vahemĂ€lu. Kui `revalidate` aeg on möödunud vĂ”i sildi kehtetuks tunnistamine on kĂ€ivitatud, toob jĂ€rgmine selle komponendi pĂ€ring vĂ€rsked andmed.
2. VahemÀlu partitsioneerimine
MÔnel juhul vÔib teil olla vaja oma vahemÀlu jagada kasutaja rollide, Ôiguste vÔi piirkondlike andmete pÔhjal. NÀiteks globaalsel armatuurlaual vÔivad olla erinevad vahemÀllu salvestatud vaated administraatorite ja tavakasutajate jaoks vÔi see vÔib serveerida kasutaja piirkonnaga seotud vahemÀllu salvestatud andmeid.
Rakendamine: See hÔlmab sageli kasutajaspetsiifiliste vÔi piirkonnaspetsiifiliste identifikaatorite lisamist oma vahemÀlu vÔtmetele vÔi siltidele. NÀiteks `armatuurlaud-admin-eu` vÔi `armatuurlaud-kasutaja-aasias`.
3. VahemÀlu purustamise strateegiad
Kui juurutate oma rakenduse vĂ”i taustateenuste uusi versioone, vĂ”ib teil olla vaja tĂŒhistada vahemĂ€lud, mis on ehitatud vanemate andmestruktuuride vĂ”i loogika abil. VahemĂ€lu purustamine hĂ”lmab tagamist, et uued pĂ€ringud saavad uusi, vahemĂ€llu salvestamata andmeid. Seda saab saavutada vahemĂ€lu vĂ”tmete muutmisega (nt lisades versiooninumbri) vĂ”i juurutamisel asjakohaste vahemĂ€lude kehtetuks tunnistamisega.
RSC vahemÀllu salvestamise tööriistad ja raamistikud
Raamistiku ja tööriistade valik mÔjutab oluliselt teie vahemÀlu vÔimalusi.
- Next.js: Nagu pÔhjalikult mainitud, pakub Next.js App Router sisseehitatud tuge andmete vahemÀllu salvestamiseks funktsioonidega
fetch,revalidateTagjarevalidatePath. See on peamine raamistik RSC vahemÀlu tÔhusaks kasutamiseks. - React Query / SWR: Kuigi need on kliendipoolsed teegid, saab neid kasutada andmete hankimise ja vahemÀllu salvestamise haldamiseks kliendi komponentides, mida renderdavad serverikomponendid. Need vÔivad tÀiendada RSC vahemÀllu salvestamist, pakkudes tÀiustatud kliendipoolset andmehaldust.
- Backend vahemÀllu salvestamise lahendused: Tehnoloogiaid nagu Redis vÔi Memcached saab kasutada teie taustal andmete vahemÀllu salvestamiseks, enne kui see isegi teie RSC-deni jÔuab, pakkudes tÀiendavat optimeerimise kihti.
Parimad tavad globaalse RSC vahemÀlu ja kehtetuks tunnistamise jaoks
Et tagada teie globaalse rakenduse jÔudlus ja ajakohasus, jÀrgige neid parimaid tavasid:
- Alustage selge vahemÀlu strateegiaga: Enne koodi kirjutamist mÀÀratlege, milliseid andmeid on vaja vahemÀllu salvestada, kui sageli need muutuvad ja vÀrskenduste vastuvÔetav latentsus.
- Seadke sildi-pĂ”hine kehtetuks tunnistamine prioriteediks: Muudetavate andmete puhul pakub sildi-pĂ”hine kehtetuks tunnistamine kĂ”ige ĂŒksikasjalikumat ja tĂ”husamat kontrolli.
- Kasutage ajapÔhist uuesti valideerimist arukalt: ISR on suurepÀrane sisu jaoks, mis talub kerget aegumist, kuid mida tuleb perioodiliselt vÀrskendada. Olge valitud intervallist teadlik.
- Rakendage sĂŒndmuspĂ”hist kehtetuks tunnistamist reaalajas vĂ€rskenduste jaoks: Kriitiliste andmete puhul, mida on vaja vĂ€rskendada niipea, kui need muutuvad, on sĂŒndmuspĂ”hine lĂ€henemine vĂ”tmetĂ€htsusega.
- Valige dĂŒnaamiline renderdamine vĂ€ga isikupĂ€rastatud/tundlike andmete jaoks: Kui andmed on iga kasutaja jaoks unikaalsed vĂ”i muutuvad ÀÀrmiselt kiiresti, vĂ€ltige nende vahemĂ€llu salvestamist.
- JĂ€lgige ja analĂŒĂŒsige vahemĂ€lu jĂ”udlust: Kasutage rakenduse jĂ”udluse jĂ€lgimise (APM) tööriistu, et jĂ€lgida vahemĂ€lu tabamuse mÀÀrasid, kehtetuks tunnistamise tĂ”husust ja ĂŒldist pĂ€ringu latentsust.
- Testige erinevates vÔrgutingimustes: Simuleerige erinevaid vÔrgukiirusi ja latentsusi, et mÔista, kuidas teie vahemÀlu strateegiad kogu maailmas kasutajatele toimivad.
- Harige oma meeskonda: Veenduge, et kÔik arendajad mÔistavad kasutatavaid vahemÀlu mehhanisme ja kehtetuks tunnistamise strateegiaid.
- Dokumenteerige oma vahemÀlu poliitika: SÀilitage selge dokumentatsioon selle kohta, kuidas andmeid erinevate rakenduste osade jaoks vahemÀllu salvestatakse ja kehtetuks tunnistatakse.
JĂ€reldus
Reacti serverikomponentide vahemĂ€llu salvestamine on vĂ”imas tööriist veebirakenduste jĂ”udluse optimeerimiseks, eriti globaalse ulatusega. Selle tĂ”husus sĂ”ltub aga intelligentsest andmete kehtetuks tunnistamisest. MĂ”istes erinevaid vahemĂ€lu kihte, vĂ”ttes kasutusele granularsed kehtetuks tunnistamise strateegiad, nagu sildi-pĂ”hised ja sĂŒndmuspĂ”hised lĂ€henemisviisid, ning vĂ”ttes hoolikalt arvesse mitmekesise rahvusvahelise kasutajabaasi vajadusi, saate luua rakendusi, mis on nii kiired kui ka jĂ€rjekindlalt ajakohased. Nende pĂ”himĂ”tete omaksvĂ”tmine vĂ”imaldab teie arendusmeeskonnal pakkuda erakordseid kasutuskogemusi kogu maailmas.