Next.js unstable_cache API'sini o'rganib, dinamik ilovalarda ma'lumotlar keshlanishini nozik nazorat qiling, unumdorlik va foydalanuvchi tajribasini yaxshilang.
Next.js Unstable Cache: Dinamik Ilovalar uchun Keshni Nozik Sozlash
Next.js veb-ishlab chiqishda inqilob qildi, unumdor va kengaytiriladigan ilovalarni yaratish uchun kuchli xususiyatlarni taklif etadi. Uning asosiy kuchli tomonlaridan biri bu mustahkam keshlesh mexanizmi bo'lib, u ishlab chiquvchilarga foydalanuvchi tajribasini yaxshilash uchun ma'lumotlarni olish va render qilishni optimallashtirish imkonini beradi. Next.js turli keshlesh strategiyalarini taqdim etsa-da, unstable_cache
API'si nozik nazoratning yangi darajasini taklif qiladi, bu esa ishlab chiquvchilarga keshlesh xatti-harakatlarini o'zlarining dinamik ilovalarining o'ziga xos ehtiyojlariga moslashtirish imkonini beradi. Ushbu maqola unstable_cache
API'sini chuqur o'rganadi, uning imkoniyatlari, afzalliklari va amaliy qo'llanilishini ko'rib chiqadi.
Next.js'da Keshleshni Tushunish
unstable_cache
ga sho'ng'ishdan oldin, Next.js'dagi turli keshlesh qatlamlarini tushunish muhim. Next.js unumdorlikni oshirish uchun bir nechta keshlesh mexanizmlaridan foydalanadi:
- To'liq marshrut keshi: Next.js butun marshrutlarni, jumladan HTML va JSON ma'lumotlarini edge'da yoki CDN'da keshlay oladi. Bu bir xil marshrut uchun keyingi so'rovlarning keshdan tezda taqdim etilishini ta'minlaydi.
- Ma'lumotlar keshi: Next.js ma'lumotlarni olish operatsiyalari natijalarini avtomatik ravishda keshlaydi. Bu ortiqcha ma'lumotlarni olishni oldini oladi va unumdorlikni sezilarli darajada oshiradi.
- React keshi (useMemo, useCallback): React'ning o'rnatilgan keshlesh mexanizmlari, masalan,
useMemo
vauseCallback
, qimmat hisob-kitoblar va komponent renderlarini memoizatsiya qilish uchun ishlatilishi mumkin.
Ushbu keshlesh mexanizmlari kuchli bo'lsa-da, ular murakkab, dinamik ilovalar uchun zarur bo'lgan nazorat darajasini har doim ham ta'minlay olmasligi mumkin. Aynan shu yerda unstable_cache
yordamga keladi.
unstable_cache
API bilan tanishish
Next.js'dagi unstable_cache
API'si ishlab chiquvchilarga alohida ma'lumotlarni olish operatsiyalari uchun maxsus keshlesh strategiyalarini belgilash imkonini beradi. U quyidagilar ustidan nozik nazoratni ta'minlaydi:
- Kesh davomiyligi (TTL): Ma'lumotlar bekor qilinishidan oldin qancha vaqt keshlanishi kerakligini belgilang.
- Kesh teglari: Keshdagi ma'lumotlarga teglar belgilang, bu sizga ma'lum bir ma'lumotlar to'plamini bekor qilish imkonini beradi.
- Kesh kalitini yaratish: Keshdagi ma'lumotlarni aniqlash uchun ishlatiladigan kalitni moslashtiring.
- Keshni qayta tekshirish: Kesh qachon qayta tekshirilishi kerakligini nazorat qiling.
API "unstable" (nostabil) deb hisoblanadi, chunki u hali ishlab chiqilmoqda va kelajakdagi Next.js versiyalarida o'zgarishi mumkin. Biroq, u ilg'or keshlesh stsenariylari uchun qimmatli funksionallikni taklif etadi.
unstable_cache
qanday ishlaydi
unstable_cache
funksiyasi ikkita asosiy argumentni qabul qiladi:
- Ma'lumotlarni oladigan yoki hisoblaydigan funksiya: Bu funksiya haqiqiy ma'lumotlarni olish yoki hisoblashni amalga oshiradi.
- Opsiyalar ob'ekti: Bu ob'ekt TTL, teglar va kalit kabi keshlesh opsiyalarini belgilaydi.
Quyida unstable_cache
dan qanday foydalanishning asosiy misoli keltirilgan:
import { unstable_cache } from 'next/cache';
async function getData(id: string) {
return unstable_cache(
async () => {
// API'dan ma'lumotlarni olishni simulyatsiya qilish
await new Promise((resolve) => setTimeout(resolve, 1000));
const data = { id: id, value: `Data for ID ${id}` };
return data;
},
["data", id],
{ tags: ["data", `item:${id}`] }
)();
}
export default async function Page({ params }: { params: { id: string } }) {
const data = await getData(params.id);
return {data.value};
}
Ushbu misolda:
getData
funksiyasi ma'lumotlarni olish operatsiyasini keshlesh uchununstable_cache
dan foydalanadi.unstable_cache
ga birinchi argument - bu API'dan ma'lumotlarni olishni simulyatsiya qiluvchi asinxron funksiya. Keshleshning afzalliklarini namoyish qilish uchun biz 1 soniyalik kechikish qo'shdik.- Ikkinchi argument - kalit sifatida ishlatiladigan massiv. Massivdagi elementlarning o'zgarishi keshni bekor qiladi.
- Uchinchi argument -
tags
opsiyasini["data", `item:${id}`]
ga o'rnatadigan ob'ekt.
unstable_cache
'ning asosiy xususiyatlari va opsiyalari
1. Yaroqlilik muddati (Time-to-Live - TTL)
revalidate
opsiyasi (avvalgi eksperimental versiyalarda `ttl`) keshdagi ma'lumotlar haqiqiy deb hisoblanadigan maksimal vaqtni (soniyalarda) belgilaydi. Bu vaqtdan so'ng, kesh keyingi so'rovda qayta tekshiriladi.
import { unstable_cache } from 'next/cache';
async function getData(id: string) {
return unstable_cache(
async () => {
// API'dan ma'lumotlarni olishni simulyatsiya qilish
await new Promise((resolve) => setTimeout(resolve, 1000));
const data = { id: id, value: `Data for ID ${id}` };
return data;
},
["data", id],
{ tags: ["data", `item:${id}`], revalidate: 60 } // 60 soniya davomida keshlesh
)();
}
Ushbu misolda ma'lumotlar 60 soniya davomida keshlanadi. 60 soniyadan so'ng, keyingi so'rov qayta tekshirishni ishga tushiradi, API'dan yangi ma'lumotlarni oladi va keshni yangilaydi.
Global mulohaza: TTL qiymatlarini o'rnatayotganda, ma'lumotlarning yangilanish chastotasini hisobga oling. Tez-tez o'zgarib turadigan ma'lumotlar uchun qisqaroq TTL mos keladi. Nisbatan statik ma'lumotlar uchun uzoqroq TTL unumdorlikni sezilarli darajada oshirishi mumkin.
2. Kesh teglari
Kesh teglari sizga bog'liq keshdagi ma'lumotlarni guruhlash va ularni birgalikda bekor qilish imkonini beradi. Bu bir ma'lumot bo'lagidagi yangilanishlar boshqa bog'liq ma'lumotlarga ta'sir qilganda foydalidir.
import { unstable_cache, revalidateTag } from 'next/cache';
async function getProduct(id: string) {
return unstable_cache(
async () => {
// API'dan mahsulot ma'lumotlarini olishni simulyatsiya qilish
await new Promise((resolve) => setTimeout(resolve, 500));
const product = { id: id, name: `Product ${id}`, price: Math.random() * 100 };
return product;
},
["product", id],
{ tags: ["products", `product:${id}`] }
)();
}
async function getCategoryProducts(category: string) {
return unstable_cache(
async () => {
// API'dan kategoriya bo'yicha mahsulotlarni olishni simulyatsiya qilish
await new Promise((resolve) => setTimeout(resolve, 500));
const products = Array.from({ length: 3 }, (_, i) => ({ id: `${category}-${i}`, name: `Product ${category}-${i}`, price: Math.random() * 100 }));
return products;
},
["categoryProducts", category],
{ tags: ["products", `category:${category}`] }
)();
}
// Barcha mahsulotlar va ma'lum bir mahsulot uchun keshni bekor qilish
async function updateProduct(id: string, newPrice: number) {
// Ma'lumotlar bazasida mahsulotni yangilashni simulyatsiya qilish
await new Promise((resolve) => setTimeout(resolve, 500));
// Mahsulot va mahsulotlar kategoriyasi uchun keshni bekor qilish
revalidateTag("products");
revalidateTag(`product:${id}`);
return { success: true };
}
Ushbu misolda:
getProduct
vagetCategoryProducts
ikkalasi ham"products"
tegidan foydalanadi.getProduct
shuningdek,`product:${id}`
maxsus tegidan foydalanadi.updateProduct
chaqirilganda, u"products"
tegi bilan belgilangan barcha ma'lumotlar uchun varevalidateTag
yordamida ma'lum bir mahsulot uchun keshni bekor qiladi.
Global mulohaza: Mazmunli va izchil teg nomlaridan foydalaning. Ma'lumotlar modelingizga mos keladigan teglash strategiyasini yaratishni o'ylab ko'ring.
3. Kesh kalitini yaratish
Kesh kaliti keshdagi ma'lumotlarni aniqlash uchun ishlatiladi. Odatiy bo'lib, unstable_cache
funksiyaga uzatilgan argumentlarga asoslanib kalit yaratadi. Biroq, siz kalit yaratish jarayonini `unstable_cache` ning ikkinchi argumenti yordamida moslashtirishingiz mumkin, bu kalit sifatida ishlaydigan massivdir. Massivdagi elementlardan biri o'zgarganda, kesh bekor qilinadi.
import { unstable_cache } from 'next/cache';
async function getData(userId: string, sortBy: string) {
return unstable_cache(
async () => {
// API'dan ma'lumotlarni olishni simulyatsiya qilish
await new Promise((resolve) => setTimeout(resolve, 1000));
const data = { userId: userId, sortBy: sortBy, value: `Data for user ${userId}, sorted by ${sortBy}` };
return data;
},
[userId, sortBy],
{ tags: ["user-data", `user:${userId}`] }
)();
}
Ushbu misolda kesh kaliti userId
va sortBy
parametrlariga asoslangan. Bu ushbu parametrlardan biri o'zgarganda keshning bekor qilinishini ta'minlaydi.
Global mulohaza: Kesh kalitini yaratish strategiyangiz izchil ekanligiga va ma'lumotlarga ta'sir qiluvchi barcha tegishli omillarni hisobga olishiga ishonch hosil qiling. Murakkab ma'lumotlar tuzilmalaridan noyob kalit yaratish uchun xeshlash funksiyasidan foydalanishni o'ylab ko'ring.
4. Qo'lda qayta tekshirish
`revalidateTag` funksiyasi sizga ma'lum teglar bilan bog'liq ma'lumotlar uchun keshni qo'lda bekor qilish imkonini beradi. Bu keshni fon ishi yoki veb-xuk kabi foydalanuvchi so'rovi bilan bevosita bog'liq bo'lmagan hodisalarga javoban yangilash kerak bo'lganda foydalidir.
import { revalidateTag } from 'next/cache';
async function handleWebhook(payload: any) {
// Veb-xuk yuklamasini qayta ishlash
// Tegishli ma'lumotlar uchun keshni bekor qilish
revalidateTag("products");
revalidateTag(`product:${payload.productId}`);
}
Global mulohaza: Qo'lda qayta tekshirishdan strategik foydalaning. Haddan tashqari ko'p bekor qilish keshleshning afzalliklarini yo'qqa chiqarishi mumkin, kam bekor qilish esa eskirgan ma'lumotlarga olib kelishi mumkin.
unstable_cache
uchun amaliy foydalanish holatlari
1. Kamdan-kam yangilanadigan dinamik kontent
Tez-tez o'zgarmaydigan dinamik kontentga ega veb-saytlar uchun (masalan, blog postlari, yangiliklar maqolalari), siz ma'lumotlarni uzoq vaqt davomida keshlesh uchun unstable_cache
ni uzoqroq TTL bilan ishlatishingiz mumkin. Bu sizning backend'ingizdagi yukni kamaytiradi va sahifa yuklanish vaqtini yaxshilaydi.
2. Foydalanuvchiga xos ma'lumotlar
Foydalanuvchiga xos ma'lumotlar uchun (masalan, foydalanuvchi profillari, xarid savatlari), siz unstable_cache
ni foydalanuvchi ID'sini o'z ichiga olgan kesh kalitlari bilan ishlatishingiz mumkin. Bu har bir foydalanuvchi o'z ma'lumotlarini ko'rishini va foydalanuvchi ma'lumotlari o'zgarganda keshning bekor qilinishini ta'minlaydi.
3. Eskirgan ma'lumotlarga toqat qila oladigan real vaqtdagi ma'lumotlar
Real vaqtdagi ma'lumotlarni ko'rsatadigan ilovalar uchun (masalan, aksiya narxlari, ijtimoiy tarmoq lentalari), siz deyarli real vaqtdagi yangilanishlarni ta'minlash uchun unstable_cache
ni qisqa TTL bilan ishlatishingiz mumkin. Bu yangi ma'lumotlarga bo'lgan ehtiyojni keshleshning unumdorlik afzalliklari bilan muvozanatlashtiradi.
4. A/B testlash
A/B testlash paytida, izchil tajribani ta'minlash uchun foydalanuvchiga tayinlangan eksperiment variantini keshlesh muhim. `unstable_cache` kesh kalitining bir qismi sifatida foydalanuvchi ID'sidan foydalanib tanlangan variantni keshlesh uchun ishlatilishi mumkin.
unstable_cache
dan foydalanishning afzalliklari
- Yaxshilangan unumdorlik: Ma'lumotlarni keshlab,
unstable_cache
sizning backend'ingizdagi yukni kamaytiradi va sahifa yuklanish vaqtini yaxshilaydi. - Kamaytirilgan backend xarajatlari: Keshlesh sizning backend'ingizga bo'lgan so'rovlar sonini kamaytiradi, bu esa infratuzilma xarajatlaringizni pasaytirishi mumkin.
- Yaxshilangan foydalanuvchi tajribasi: Tezroq sahifa yuklanish vaqtlari va silliqroq o'zaro ta'sirlar yaxshiroq foydalanuvchi tajribasiga olib keladi.
- Nozik nazorat:
unstable_cache
keshlesh xatti-harakatlari ustidan donador nazoratni ta'minlaydi, bu sizga uni ilovangizning o'ziga xos ehtiyojlariga moslashtirish imkonini beradi.
Mulohazalar va eng yaxshi amaliyotlar
- Keshni bekor qilish strategiyasi: Ma'lumotlar o'zgarganda keshning yangilanishini ta'minlash uchun yaxshi aniqlangan keshni bekor qilish strategiyasini ishlab chiqing.
- TTL tanlovi: Ma'lumotlarning yangilanish chastotasi va ilovangizning eskirgan ma'lumotlarga sezgirligiga qarab tegishli TTL qiymatlarini tanlang.
- Kesh kaliti dizayni: Kesh kalitlaringizni noyob va izchil bo'lishini ta'minlash uchun ehtiyotkorlik bilan loyihalashtiring.
- Monitoring va jurnal yuritish: Kesh unumdorligingizni kuzatib boring va potentsial muammolarni aniqlash uchun keshga tushish va tushmasliklarni jurnalga yozing.
- Edge va Brauzer keshleshi: Edge keshleshi (CDN) va brauzer keshleshi o'rtasidagi farqlarni hisobga oling. Edge keshleshi barcha foydalanuvchilar o'rtasida umumiy bo'ladi, brauzer keshleshi esa har bir foydalanuvchiga xosdir. Ma'lumotlar turiga va ilovangiz talablariga qarab tegishli keshlesh strategiyasini tanlang.
- Xatolarni qayta ishlash: Keshga tushmasliklarni oqilona boshqarish va xatolarning foydalanuvchiga tarqalishini oldini olish uchun mustahkam xatolarni qayta ishlashni joriy qiling. Kesh mavjud bo'lmaganda backend'dan ma'lumotlarni olish uchun zaxira mexanizmidan foydalanishni o'ylab ko'ring.
- Testlash: Keshlesh amalga oshirishingiz kutilganidek ishlayotganiga ishonch hosil qilish uchun uni sinchkovlik bilan sinab ko'ring. Keshni bekor qilish va qayta tekshirish mantig'ini tekshirish uchun avtomatlashtirilgan testlardan foydalaning.
unstable_cache
va fetch
API keshleshi
Next.js shuningdek, fetch
API orqali o'rnatilgan keshlesh imkoniyatlarini taqdim etadi. Odatiy bo'lib, Next.js fetch
so'rovlari natijalarini avtomatik ravishda keshlaydi. Biroq, unstable_cache
fetch
API keshleshiga qaraganda ko'proq moslashuvchanlik va nazoratni taklif etadi.
Quyida ikki yondashuvning taqqoslanishi keltirilgan:
Xususiyat | unstable_cache |
fetch API |
---|---|---|
TTL ustidan nazorat | revalidate opsiyasi bilan aniq sozlanadi. |
Next.js tomonidan yashirin boshqariladi, lekin fetch opsiyalaridagi revalidate opsiyasi bilan ta'sir o'tkazish mumkin. |
Kesh teglari | Tegishli ma'lumotlarni bekor qilish uchun kesh teglarini qo'llab-quvvatlaydi. | O'rnatilgan kesh teglari qo'llab-quvvatlanmaydi. |
Kesh kalitini moslashtirish | Kalitni yaratish uchun ishlatiladigan qiymatlar massivi yordamida kesh kalitini moslashtirishga imkon beradi. | Moslashtirish imkoniyatlari cheklangan. Kalit fetch URL'sidan olinadi. |
Qo'lda qayta tekshirish | revalidateTag yordamida qo'lda qayta tekshirishni qo'llab-quvvatlaydi. |
Qo'lda qayta tekshirish uchun cheklangan yordam. |
Keshleshning donadorligi | Alohida ma'lumotlarni olish operatsiyalarini keshleshga imkon beradi. | Asosan HTTP javoblarini keshleshga qaratilgan. |
Umuman olganda, oddiy ma'lumotlarni olish stsenariylari uchun, agar standart keshlesh xatti-harakati etarli bo'lsa, fetch
API keshleshidan foydalaning. Keshlesh xatti-harakatlari ustidan nozik nazorat kerak bo'lgan murakkabroq stsenariylar uchun unstable_cache
dan foydalaning.
Next.js'da Keshleshning Kelajagi
unstable_cache
API'si Next.js'ning keshlesh imkoniyatlarida muhim bir qadamni anglatadi. API rivojlanib borgan sari, biz ma'lumotlar keshini boshqarishda yanada kuchli xususiyatlar va ko'proq moslashuvchanlikni kutishimiz mumkin. Yuqori unumdorlikka ega va kengaytiriladigan ilovalarni yaratish uchun Next.js keshleshidagi so'nggi o'zgarishlardan xabardor bo'lish juda muhim.
Xulosa
Next.js unstable_cache
API'si ishlab chiquvchilarga ma'lumotlarni keshlesh ustidan misli ko'rilmagan nazoratni taklif etadi, bu ularga dinamik ilovalarda unumdorlik va foydalanuvchi tajribasini optimallashtirish imkonini beradi. unstable_cache
xususiyatlari va afzalliklarini tushunib, siz uning kuchidan tezroq, kengaytiriladigan va sezgirroq veb-ilovalarni yaratish uchun foydalanishingiz mumkin. Optimal natijalarga erishish uchun keshlesh strategiyangizni diqqat bilan ko'rib chiqishni, tegishli TTL qiymatlarini tanlashni, kesh kalitlaringizni samarali loyihalashni va kesh unumdorligingizni kuzatib borishni unutmang. Next.js'da keshleshning kelajagini qabul qiling va veb-ilovalaringizning to'liq potentsialini oching.