spinny:~/writing $ less nextjs-16-cache-components.md
12برسوں سے Next.js میں سب سے زیادہ پریشان کن سوالات میں سے ایک یہ رہا ہے: "کیا یہ صفحہ جامد ہے یا متحرک؟"۔ یہ ایک سادہ سا سوال لگتا ہے، جب تک کہ آپ مختلف اختیارات کے ساتھ `cookies()`، ایک `fetch` پر کال شامل نہیں کرتے، ڈیٹا بیس کلائنٹ، CMS، شاپنگ کارٹ، یا حسب ضرورت مواد کا ایک ٹکڑا۔34Next.js 16 دلچسپ ہے کیونکہ یہ اس گفتگو کو کم پراسرار بنانے کی کوشش کرتا ہے۔ یہ پیچیدگی کو ختم نہیں کرتا ہے، لیکن یہ ذہنی ماڈل کو بدل دیتا ہے: راستے پہلے سے طے شدہ طور پر متحرک ہوتے ہیں، جہاں ضرورت ہو وہاں کیشے خود کو ظاہر کرتا ہے، اور `Suspense` تازہ رہنے والے حصوں کے ساتھ تیز گولے بنانے کا قدرتی طریقہ بن جاتا ہے۔56سمجھنے کے لیے خصوصیت Cache Components ہے۔ Stable Turbopack, React Compiler, `proxy.ts`، اور نئے invalidation APIs اہم ہیں، لیکن وہ اسی مسئلے کے گرد گھومتے ہیں: پردے کے پیچھے فریم ورک نے کیا فیصلہ کیا اس کا اندازہ لگائے بغیر تیز ایپس بنانا۔78## کیونکہ یہ چیز اہمیت رکھتی ہے۔910ایک حقیقی ایپ میں آپ کے پاس صرف "جامد صفحات" اور "متحرک صفحات" نہیں ہوتے ہیں۔ آپ کے پاس مختلف ضروریات کے ساتھ مختلف ٹکڑے ہیں۔1112پروڈکٹ شیٹ دن میں چند بار تبدیل ہو سکتی ہے۔ قیمت زیادہ کثرت سے بدل سکتی ہے۔ دستیابی تقریباً لائیو ہونی چاہیے۔ صارف نام ذاتی ہے۔ جائزوں کو نشر کیا جا سکتا ہے۔ سائڈبار مستحکم ہوسکتی ہے۔ ٹوکری نہیں کرتا۔1314اگر آپ ہر چیز کو ایک اکائی کے طور پر دیکھتے ہیں، تو آپ ہمیشہ دو انتہاؤں میں سے ایک میں ختم ہوتے ہیں:1516- جارحانہ کیشنگ اور پرانے ڈیٹا کو دیکھنے کا خطرہ؛17- ہر جگہ متحرک رینڈرنگ اور کارکردگی ضرورت سے زیادہ خراب۔1819اس غلط انتخاب سے بچنے کے لیے Cache Components بالکل ٹھیک کام کرتا ہے۔2021## عملی طور پر ماڈل2223`cacheComponents: true` کے ساتھ، آپ `"use cache"` کا استعمال کرتے ہوئے اعلان کر سکتے ہیں کہ کیا کیش ایبل ہے۔ پھر آپ مدت اور ٹیگز کو `cacheLife()` اور `cacheTag()` کے ساتھ منسلک کر سکتے ہیں۔ متحرک حصے متحرک رہتے ہیں اور `Suspense` کے ساتھ الگ تھلگ ہوسکتے ہیں۔2425```mermaid26flowchart TD27 Request[صارف کی درخواست] --> Shell[کیش شدہ شیل]28 Request --> Dynamic[متحرک حصے]29 Shell --> FirstPaint[پہلا فوری مواد]30 Dynamic --> Stream[سسپنس کے اندر سلسلہ بندی]31 Stream --> Complete[پورا صفحہ]32```3334سیٹ اپ چھوٹا ہے:3536```typescript37// next.config.ts38import type { NextConfig } from 'next';3940const nextConfig: NextConfig = {41 cacheComponents: true,42};4344export default nextConfig;45```4647بڑی تبدیلی ترتیب میں نہیں ہے۔ یہ اس میں ہے کہ آپ اجزاء کو کیسے لکھنا شروع کرتے ہیں۔4849```tsx50// app/products/[slug]/page.tsx51import { Suspense } from 'react';52import { cacheLife, cacheTag } from 'next/cache';5354async function getProduct(slug: string) {55 'use cache';5657 cacheLife('hours');58 cacheTag(`product:${slug}`);5960 return db.product.findUnique({ where: { slug } });61}6263async function ProductDetails({ slug }: { slug: string }) {64 const product = await getProduct(slug);6566 return (67 <section>68 <h1>{product.name}</h1>69 <p>{product.description}</p>70 </section>71 );72}7374async function LiveInventory({ slug }: { slug: string }) {75 const inventory = await db.inventory.findFirst({ where: { slug } });76 return <p>{inventory.quantity} pezzi disponibili</p>;77}7879export default async function ProductPage({ params }: { params: Promise<{ slug: string }> }) {80 const { slug } = await params;8182 return (83 <>84 <ProductDetails slug={slug} />85 <Suspense fallback={<p>Controllo disponibilità...</p>}>86 <LiveInventory slug={slug} />87 </Suspense>88 </>89 );90}91```9293ضروری نہیں ہے کہ صفحہ تمام کیشڈ یا تمام متحرک ہو۔ پروڈکٹ شیٹ تیز اور دوبارہ قابل استعمال ہوسکتی ہے۔ انوینٹری تازہ رہ سکتی ہے۔ صارف سست ترین حصے کا انتظار کیے بغیر فوراً کچھ دیکھتا ہے۔9495## `use cache` قابل عمل دستاویزات ہے۔9697مجھے `"use cache"` کے بارے میں جو چیز پسند ہے وہ یہ ہے کہ یہ آپ کو کسی ارادے کو واضح کرنے پر مجبور کرتا ہے۔ جب آپ کوئی فنکشن پڑھتے ہیں، تو آپ فوراً سمجھ جاتے ہیں کہ کسی نے فیصلہ کیا ہے: "اس ڈیٹا کو دوبارہ استعمال کیا جا سکتا ہے"۔9899یہ خاص طور پر مفید ہے جب آپ `fetch` استعمال نہیں کر رہے ہوں۔ بہت سی ایپس Prisma، Drizzle، اندرونی SDKs، CMS کلائنٹس یا سروس فنکشنز سے ڈیٹا پڑھتی ہیں۔ ان معاملات میں صرف `fetch` اختیارات پر مبنی پرانی استدلال کافی نہیں تھا۔100101انگوٹھے کا اصول:102103- cachea مواد نسبتا مستحکم؛104- دانے دار ٹیگ استعمال کریں؛105- متحرک اجازتوں، سیشنز، کارٹس، اطلاعات اور لین دین کی حالتوں کو چھوڑتا ہے۔106- سست حصوں کو اندر رکھیں `Suspense`؛107- "ہم نے کارکردگی کو بہتر بنایا" کہنے سے پہلے پیمائش کریں۔108109## سب کچھ پھینکے بغیر باطل کر دیں۔110111کیشے صرف اس صورت میں مفید ہے جب آپ اسے درست طریقے سے اپ ڈیٹ کر سکیں۔ یہاں `cacheTag`، `revalidateTag` اور `updateTag` اہم ہو جاتے ہیں۔112113مثال:114115```typescript116'use server';117118import { updateTag } from 'next/cache';119120export async function updateProductName(productId: string, name: string) {121 await db.product.update({122 where: { id: productId },123 data: { name },124 });125126 updateTag(`product:${productId}`);127}128```129130اہم تفصیل ٹیگ ہے۔ `product:${productId}` ایک درست حد بتاتا ہے۔ `products` ایک بڑی بالٹی کو بتاتا ہے۔ سب سے پہلے بڑی بالٹی آرام دہ ہے؛ کچھ مہینوں کے بعد یہ وجہ بن جاتی ہے کہ آپ عنوان کو تبدیل کرنے کے لیے آدھی ایپ کو باطل کر دیتے ہیں۔131132## مستحکم ٹربوپیک: وہ حصہ جو آپ ہر روز سنتے ہیں۔133134Next.js 16 ٹربوپیک کو ترقی اور تعمیر کے لیے مرکز میں لاتا ہے۔ یہ سب سے زیادہ شاعرانہ خصوصیت نہیں ہے، لیکن یہ وہی ہے جو آپ کام کرتے وقت محسوس کرتے ہیں: سرور جو پہلے شروع ہوتا ہے، تیز تر تروتازہ ہوتا ہے، ایسا بناتا ہے جو زبردستی کافی وقفے کی طرح محسوس ہونے کو روکتا ہے۔135136اس نے کہا، میں اپنی آنکھیں بند کرکے کسٹم پلگ ان سے بھرے کوڈ بیس کو منتقل نہیں کروں گا۔ میں چیک کروں گا:137138- مقامی تعمیر؛139- غیر معیاری درآمد؛140- MDX، SVG اور CSS؛141- Webpack پلگ ان رہ گئے؛142- تنقیدی صفحات؛143- تعمیراتی اوقات میں فرق144145نئے منصوبوں کے لیے، میں پہلے سے طے شدہ سے شروع کروں گا۔ بالغوں کے لیے، میں ایک پیمائش شدہ ہجرت کروں گا۔146147## ری ایکٹ کمپائلر: شور کو ہٹا دیں، سوچا نہیں۔148149React Compiler 1.0 مستحکم ہے اور Next.js 16 اسے `reactCompiler` کے ساتھ سپورٹ کرتا ہے۔ وعدہ بہت زیادہ دستی یادداشت کو کم کرنے کا ہے: کم `memo`، کم `useMemo`، کم `useCallback` استعمال کیا جاتا ہے "حفاظت کے لئے"۔150151```typescript152// next.config.ts153import type { NextConfig } from 'next';154155const nextConfig: NextConfig = {156 reactCompiler: true,157};158159export default nextConfig;160```161162میں اسے جادوئی دھول کی طرح نہیں سمجھوں گا۔ کمپائلر اس وقت مدد کرتا ہے جب کوڈ React کے اصولوں پر اچھی طرح عمل کرتا ہے۔ اگر اجزاء کے عجیب ضمنی اثرات، پوشیدہ تغیرات یا بری طرح سے استعمال شدہ ہکس ہیں، تو اسے پہلے ٹھیک کرنے کی ضرورت ہے۔163164اسے آزمانے کا صحت مند طریقہ:1651661. اپ ڈیٹ `eslint-plugin-react-hooks`؛1672. اصل خلاف ورزیوں کو ٹھیک کرنا؛1683. اسے ایک کنٹرول شدہ علاقے پر فعال کریں؛1694. تعمیراتی وقت اور رویے کی پیمائش؛1705. دستی یادداشت کو صرف اس وقت ہٹا دیں جب اس کی مزید ضرورت نہ ہو۔171172مقصد ہر `useMemo` کو مٹانا نہیں ہے۔ مقصد یہ ہے کہ احتیاطی یادداشت لکھنا بند کر دیا جائے کیونکہ ہم رینڈرنگ سے ڈرتے ہیں۔173174## `proxy.ts` اور نیٹ ورک کی حد175176پرانا `middleware.ts` `proxy.ts` بن جاتا ہے۔ یہ نام کی تبدیلی ہے، لیکن یہ سمجھ میں آتا ہے: وہ فائل درخواست کی حد پر بیٹھتی ہے، یہ روایتی بیک اینڈ طرز کا عام مڈل ویئر نہیں ہے۔177178```typescript179// proxy.ts180import { NextRequest, NextResponse } from 'next/server';181182export default function proxy(request: NextRequest) {183 const isLoggedIn = Boolean(request.cookies.get('session'));184185 if (!isLoggedIn && request.nextUrl.pathname.startsWith('/dashboard')) {186 return NextResponse.redirect(new URL('/login', request.url));187 }188189 return NextResponse.next();190}191```192193یہاں اصول آسان ہے: اسے چھوٹا رکھیں۔ ری ڈائریکٹ، اوتھ روٹنگ، ہیڈر، ضروری دوبارہ لکھنا۔ اگر یہ دوسرے پسدید کی طرح محسوس ہونے لگتا ہے، تو یہ شاید بہت زیادہ کر رہا ہے۔194195## میں واقعی ہجرت کیسے کروں گا۔196197میں ایک ساتھ تمام خصوصیات کو آن نہیں کروں گا۔ میں یہ کروں گا:1981991. میں نیکسٹ، ری ایکٹ اور ری ایکٹ DOM کو اپ ڈیٹ کرتا ہوں۔2002. میں آفیشل کوڈ موڈ لانچ کرتا ہوں۔2013. میں `params`، `searchParams`، `cookies()`، `headers()` اور `draftMode()` پر بریکنگ تبدیلیوں کو ٹھیک کرتا ہوں؛2024. میں `middleware.ts` کو `proxy.ts` میں منتقل کرتا ہوں؛2035. میں تعمیرات اور تنقیدی صفحات کو چیک کرتا ہوں۔2046. میں ایک ایسے حصے پر کیشے کے اجزاء کو فعال کرتا ہوں جہاں کیش فی الحال رگڑ پیدا کرتا ہے۔2057. میں ٹیگز اور باطل ہونے کے لیے کنونشنز کی وضاحت کرتا ہوں؛2068. میں الگ سے React Compiler آزماتا ہوں۔2079. پہلے اور بعد کے میٹرکس کا موازنہ۔208209اچھی ہجرت وہ نہیں ہے جو تمام نئی خصوصیات کو استعمال کرے۔ یہی چیز ایپ کے رویے کو مزید پڑھنے کے قابل بناتی ہے۔210211## سوچ کے انداز میں کیا تبدیلی آتی ہے۔212213Next.js 16 کے بارے میں سب سے مفید چیز یہ ہے کہ یہ آپ کو ارادوں کو بہتر نام دینے پر مجبور کرتا ہے۔ ایک فنکشن صرف "ڈیٹا بیس سے پروڈکٹ حاصل کرنا" نہیں ہے۔ یہ ہے "پروڈکٹ حاصل کریں، میں اسے گھنٹوں کے لیے کیش کر سکتا ہوں، میں اسے اس ٹیگ سے باطل کرتا ہوں"۔ ایک جزو صرف "صفحہ رینڈر" نہیں ہوتا ہے۔ یہ "یہ تیز ترین شیل ہے، یہ ٹکڑا ذاتی ہے، یہ سٹریمنگ آتا ہے۔"214215پہلے تو یہ زیادہ کام لگتا ہے۔ پھر یہ سکون کی شکل اختیار کر لیتا ہے۔ کارکردگی کے فیصلے اب ڈیفالٹس، ہیورسٹکس اور قبائلی یادداشت کے امتزاج میں پوشیدہ نہیں ہیں۔ وہ کوڈ میں ہیں۔216217## مفید ذرائع218219- [Next.js 16 ریلیز نوٹ](https://nextjs.org/blog/next-16)220- [کیشے اجزاء - Next.js دستاویزات](https://nextjs.org/docs/app/getting-started/cache-components)221- [cache - Next.js دستاویزات کا استعمال کریں۔](https://nextjs.org/docs/app/api-reference/directives/use-cache)222- [ری ایکٹ کمپائلر v1.0](https://react.dev/blog/2025/10/07/react-compiler-1)223
:Next.js 16، Cache اجزاء اور React Compiler: واقعی کیا بدلتا ہے۔lines 1-223 (END) — press q to close