আপনার ওয়েব অ্যাপের জন্য App Hosting সাপোর্টের একটি অত্যন্ত গুরুত্বপূর্ণ অংশ হলো ক্লাউড সিডিএন। আপনার ব্যাকএন্ডে পাঠানো প্রতিটি অনুরোধ প্রথমে ক্লাউড সিডিএন-এর মধ্য দিয়ে যায়। সিডিএন-এ আগে থেকেই ক্যাশ করা কন্টেন্ট সরাসরি ব্যবহারকারীর কাছে পৌঁছে দেওয়া হয়, ফলে আপনার ওয়েব অ্যাপের সার্ভার কোড চালনাকারী ক্লাউড রান সার্ভিসে যাওয়ার প্রয়োজন হয় না। আপনি web.dev- এ সিডিএন-এর সাধারণ সুবিধাগুলো সম্পর্কে আরও জানতে পারবেন।
যদিও ক্লাউড সিডিএন-এর বেসিক কনফিগারেশন App Hosting দ্বারা সেট করা থাকে এবং তা পরিবর্তন করা যায় না, তবুও পেজ লোডের গতি বাড়াতে, বিলযোগ্য আনক্যাশড কনটেন্ট কমাতে এবং ক্লাউড রান-এর ট্র্যাফিক হ্রাস করতে আপনি আপনার ক্যাশিং অপ্টিমাইজ করার জন্য বেশ কিছু পদক্ষেপ নিতে পারেন।
ক্যাশেযোগ্য বিষয়বস্তু
নিম্নলিখিত সমস্ত শর্ত সত্য হলে ক্লাউড সিডিএন রেসপন্সগুলো ক্যাশে সংরক্ষণ করে:
অনুরোধটি একটি GET
প্রতিক্রিয়াটির স্ট্যাটাস কোড হলো
200,203,204,206,300,301,302,307,308,404,405,410,421,451, অথবা501।রেসপন্সটিতে
max-ageবাs-maxageডিরেক্টিভ সহ একটিCache-Controlহেডার, অথবা ভবিষ্যতের কোনো টাইমস্ট্যাম্প সহ একটিExpiresহেডার থাকে।রেসপন্সটিতে একটি
Ageহেডার অথবা একটিCache-Controlহেডার থাকে, যেখানে একটি সুস্পষ্টpublicডিরেক্টিভ উল্লেখ করা থাকে।প্রতিক্রিয়াটির আকার ১০ MiB-এর সমান বা তার চেয়ে কম।
এবং নিম্নলিখিতগুলির কোনটিই সত্য নয়:
প্রতিক্রিয়াটিতে একটি
Set-Cookieহেডার রয়েছে।রেসপন্সটিতে একটি
Varyহেডার আছে যার ভ্যালুAccept,Accept-Encoding,Access-Control-Request-Headers,Access-Control-Request-Method,Origin,Sec-Fetch-Dest,Sec-Fetch-Mode,Sec-Fetch-Site,X-Goog-Allowed-Resources,X-Origin,RSC,Next-Router-State-Tree,Next-Router-Prefetch,Next-Router-Segment-Prefetch, অথবাNext-Urlঅন্য কিছু।রেসপন্সটিতে
no-storeবাprivateডিরেক্টিভসহ একটিCache-Controlহেডার রয়েছে।অনুরোধটিতে একটি
Cache-Controlহেডার রয়েছে, যেখানে একটিno-storeনির্দেশিকা দেওয়া আছে।অনুরোধটিতে একটি
Authorizationহেডার থাকে, যদি না প্রতিক্রিয়াটিতে কোনো সুস্পষ্ট ক্যাশ নিয়ন্ত্রণ নির্দেশিকা থাকে।
ক্যাশে নিয়ন্ত্রণ নির্দেশাবলীর মাধ্যমে আচরণ কাস্টমাইজ করুন
নেক্সট.জেএস
Next.js বিভিন্ন বিষয়ের উপর ভিত্তি করে স্বয়ংক্রিয়ভাবে ক্যাশ-কন্ট্রোল নির্দেশিকা সেট করে। তবে, আপনি আপনার next.config.js ফাইলে ম্যানুয়ালি হেডার সেট করার মাধ্যমে এগুলোকে ওভাররাইড করতে পারেন। উদাহরণস্বরূপ, কোনো পেজ যাতে ক্লাউড সিডিএন-এ ক্যাশ না হয় তা নিশ্চিত করতে:
/** @type {import('next').NextConfig} */
const nextConfig = {
headers: async () => [{
source: "/YOUR_PRIVATE_PAGE",
headers: [{
key: "Cache-Control",
value: "private"
}],
}],
};
কৌণিক
অ্যাঙ্গুলার এসএসআর (Angular SSR) ডিফল্টভাবে কোনো সুস্পষ্ট ক্যাশ-কন্ট্রোল নির্দেশিকা সেট করে না। আপনি আপনার সার্ভার রাউটে ক্যাশ-কন্ট্রোল হেডার উল্লেখ করে নিজের নির্দেশিকা যোগ করতে পারেন। উদাহরণস্বরূপ, ক্লাউড সিডিএন-কে (Cloud CDN) এক ঘণ্টার জন্য সমস্ত পৃষ্ঠা ক্যাশ করার অনুমতি দিতে:
import { RenderMode, ServerRoute } from '@angular/ssr';
export const serverRoutes: ServerRoute[] = [
{
path: '**',
renderMode: RenderMode.Prerender,
headers: {
'Cache-Control': 'public, max-age=3600',
}
}
];
অথবা কোনো নির্দিষ্ট পৃষ্ঠা যাতে ক্যাশ না হয়, তা নিশ্চিত করতে:
import { RenderMode, ServerRoute } from '@angular/ssr';
export const serverRoutes: ServerRoute[] = [
// ... other routes
{
path: 'YOUR_PRIVATE_PAGE',
renderMode: RenderMode.Server,
headers: {
'Cache-Control': 'private',
}
}
];
সম্মানিত নির্দেশাবলী
Firebase App Hosting এর ক্লাউড সিডিএন ইনস্ট্যান্স নিম্নলিখিত ক্যাশ নিয়ন্ত্রণ নির্দেশাবলী মেনে চলে:
| নির্দেশিকা | অনুরোধ | প্রতিক্রিয়া |
|---|---|---|
no-store | অনুরোধে উপস্থিত থাকলে, প্রতিক্রিয়াটি ক্যাশ করা হবে না। | no-store সহ একটি প্রতিক্রিয়া ক্যাশ করা হয় না। |
no-cache | ক্লায়েন্টদের দ্বারা অরিজিনে সম্ভাব্য পুনঃযাচাই শুরু করা বা জোরপূর্বক তা করতে বাধা দেওয়ার জন্য no-cache রিকোয়েস্ট' নির্দেশিকাটি উপেক্ষা করা হয়। | no-cache সহ একটি প্রতিক্রিয়া ক্যাশ করা হয়, কিন্তু পরিবেশন করার আগে এটিকে অবশ্যই অরিজিনের সাথে পুনরায় যাচাই করতে হবে। |
public | প্রযোজ্য নয় | ক্যাশেযোগ্যতার জন্য এই নির্দেশিকাটি আবশ্যক নয়, তবে যে কন্টেন্ট প্রক্সির মাধ্যমে ক্যাশ করা উচিত, তার জন্য এটি অন্তর্ভুক্ত করা একটি উত্তম অনুশীলন। |
private | প্রযোজ্য নয় | private ডিরেক্টিভ সহ কোনো রেসপন্স ক্লাউড সিডিএন দ্বারা ক্যাশ করা হয় না, এমনকি যদি রেসপন্সটি অন্যথায় ক্যাশেবল বলে বিবেচিত হয়। ক্লায়েন্টরা (যেমন ব্রাউজার) তবুও ফলাফলটি ক্যাশ করতে পারে। রেসপন্সের সমস্ত ক্যাশিং প্রতিরোধ করতে no-store ব্যবহার করুন। |
max-age=SECONDS | max-age রিকোয়েস্ট ডিরেক্টিভটি উপেক্ষা করা হয়। একটি ক্যাশ করা রেসপন্স ফেরত দেওয়া হয়, যেন এই হেডারটি রিকোয়েস্টে অন্তর্ভুক্ত করা হয়নি। | max-age নির্দেশিকা সহ একটি প্রতিক্রিয়া নির্ধারিত সেকেন্ড পর্যন্ত ক্যাশ করা হয়। |
s-maxage=SECONDS | প্রযোজ্য নয় | s-maxage ডিরেক্টিভ সহ একটি রেসপন্স নির্দিষ্ট সেকেন্ড পর্যন্ত ক্যাশ করা হয়। যদি max-age এবং s-maxage উভয়ই উপস্থিত থাকে, তাহলে ক্লাউড সিডিএন s‑maxage ব্যবহার করে। এই ডিরেক্টিভ সহ রেসপন্সগুলো বাসি বা পুরোনো হিসেবে পরিবেশন করা হয় না। ক্যাশিংয়ের উদ্দেশ্যে s-max-age (দুটি হাইফেন) বৈধ নয়। |
max-stale=SECONDS | max-stale request` নির্দেশিকাটি নির্ধারণ করে যে ক্লায়েন্ট সর্বোচ্চ কত সেকেন্ড পর্যন্ত অনুরোধের পুরোনো অবস্থা ( staleness ) গ্রহণ করতে ইচ্ছুক। ক্লাউড সিডিএন এটি মেনে চলে এবং শুধুমাত্র তখনই একটি পুরোনো ক্যাশ করা প্রতিক্রিয়া ফেরত দেয়, যখন প্রতিক্রিয়ার পুরোনো অবস্থা max-stale নির্দেশিকার চেয়ে কম হয়। অন্যথায়, অনুরোধটি পরিবেশন করার আগে এটি পুনরায় যাচাই করে নেয়। | প্রযোজ্য নয় |
stale-while-revalidate=SECONDS | প্রযোজ্য নয় | অ্যাসিঙ্ক্রোনাসভাবে পুনঃযাচাইকরণ চলাকালীন, ক্লায়েন্টকে সর্বোচ্চ কয়েক সেকেন্ড পর্যন্ত stale-while-revalidate সহ একটি প্রতিক্রিয়া পরিবেশন করা হয়। |
must-revalidate | প্রযোজ্য নয় | must-revalidate সহ একটি রেসপন্স মেয়াদোত্তীর্ণ হওয়ার পর অরিজিন সার্ভারের মাধ্যমে পুনরায় যাচাই করা হয়। এই নির্দেশিকা সহ রেসপন্সগুলো বাসি অবস্থায় পরিবেশন করা হয় না। |
proxy-revalidate | proxy-revalidate সহ একটি রেসপন্স মেয়াদোত্তীর্ণ হওয়ার পর অরিজিন সার্ভারের সাথে পুনরায় যাচাই করা হয়। এই নির্দেশিকা সহ রেসপন্সগুলো বাসি অবস্থায় পরিবেশন করা হয় না। | |
no-transform | প্রযোজ্য নয় | ক্লাউড সিডিএন কোনো রূপান্তর প্রয়োগ করে না। |
ক্যাশ করা এবং ক্যাশ না করা ট্র্যাফিক পরিমাপ করুন
Firebase কনসোলের App Hosting > Usage ট্যাবে, 'Cloud CDN - Outgoing Bandwidth' গ্রাফটি ক্যাশড এবং আনক্যাশড বাইট সার্ভ করার পরিমাণ দেখায় এবং এতে প্রতিটি রোলআউটের জন্য একটি চিহ্ন থাকে। আপনার ক্যাশ অপ্টিমাইজেশন প্রচেষ্টার কার্যকারিতা পরিমাপ করতে আপনি এই গ্রাফটি ব্যবহার করতে পারেন।
এছাড়াও আপনি রাউট-ভিত্তিক মনিটরিং-এর মাধ্যমে আপনার ওয়েব অ্যাপের নির্দিষ্ট রাউটগুলোর ক্যাশে হিট রেট দেখতে পারেন।