আপনার ওয়েব অ্যাপের জন্য App Hosting-এর সহায়তার একটি গুরুত্বপূর্ণ অংশ হল Cloud CDN। আপনার ব্যাকএন্ডে করা প্রতিটি অনুরোধ প্রথমে Cloud CDN-এর মাধ্যমে যায়। CDN-এ আগে থেকেই ক্যাশে করা কন্টেন্ট ব্যবহারকারীকে সাথে সাথে দেখানো হয়, যার ফলে আপনার ওয়েব অ্যাপের সার্ভার কোড রান করা Cloud Run পরিষেবাতে যাওয়ার প্রয়োজন হয় না। আপনি web.dev-এ CDN-এর সাধারণ সুবিধা সম্পর্কে আরও জানতে পারবেন।
যদিও Cloud CDN-এর প্রাথমিক কনফিগারেশন App Hosting দ্বারা সেট করা হয় এবং এটি পরিবর্তন করা যায় না, তবে পৃষ্ঠা লোড হওয়ার স্পিড বাড়াতে, বিল করা আনক্যাশড কন্টেন্ট কমাতে এবং Cloud Run-এ ট্রাফিক কমাতে, ক্যাশিং অপ্টিমাইজ করার জন্য আপনি অনেক কিছু করতে পারেন।
ক্যাশে করা যায় এমন কন্টেন্ট
Cloud CDN ক্যাশেতে উত্তর স্টোর করে যদি নিম্নলিখিত সব শর্ত সত্য হয়:
অনুরোধটি হল 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হেডার আছে।অনুরোধটিতে
no-storeনির্দেশিকা সহ একটিCache-Controlহেডার রয়েছে।অনুরোধে একটি
Authorizationহেডার আছে, যদি না উত্তরে একটি স্পষ্ট ক্যাশে কন্ট্রোল নির্দেশিকা থাকে।
ক্যাশে কন্ট্রোল ডিরেক্টিভের মাধ্যমে আচরণ কাস্টমাইজ করুন
Next.js
Next.js বিভিন্ন বিষয়ের উপর ভিত্তি করে ক্যাশে-কন্ট্রোল নির্দেশাবলী
ইমপ্লিসিটভাবে সেট করে। তবে, আপনি
আপনার next.config.js ফাইলে ম্যানুয়ালি হেডার সেট করে
এগুলি ওভাররাইড করতে পারবেন। যেমন, Cloud CDN-এ কোনও পৃষ্ঠা ক্যাশে করা হয়নি তা নিশ্চিত করতে:
/** @type {import('next').NextConfig} */
const nextConfig = {
headers: async () => [{
source: "/YOUR_PRIVATE_PAGE",
headers: [{
key: "Cache-Control",
value: "private"
}],
}],
};
Angular
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-এর Cloud CDN ইনস্ট্যান্স নিম্নলিখিত ক্যাশে কন্ট্রোল নির্দেশাবলী মেনে চলে:
| নির্দেশিকা | অনুরোধ | উত্তর |
|---|---|---|
no-store |
অনুরোধে উপস্থিত থাকলে, উত্তর ক্যাশে করা হবে না। | no-store-এর সাথে উত্তর ক্যাশে করা হয়নি। |
no-cache |
ক্লায়েন্ট যাতে সম্ভাব্যভাবে অরিজিনে রিভ্যালিডেশন শুরু বা জোর করতে না পারে, তার জন্য no-cache অনুরোধের নির্দেশিকা উপেক্ষা করা হয়। |
no-cache সহ একটি উত্তর ক্যাশে করা হয়েছে তবে পরিবেশন করার আগে অবশ্যই অরিজিনের সাথে পুনরায় যাচাই করা উচিত। |
public |
প্রযোজ্য নয় | ক্যাশে করার জন্য এই নির্দেশিকা প্রয়োজন হয় না, তবে প্রক্সি দ্বারা ক্যাশে করা উচিত এমন কন্টেন্টের জন্য এটি অন্তর্ভুক্ত করা একটি পেশাদার পদ্ধতি। |
private |
প্রযোজ্য নয় | private নির্দেশিকা সহ রেসপন্স Cloud CDN-এর মাধ্যমে ক্যাশে করা হয় না, এমনকি রেসপন্সটি অন্যভাবে ক্যাশে করার উপযুক্ত বলে বিবেচিত হলেও। ক্লায়েন্ট (যেমন ব্রাউজার) এখনও ফলাফল ক্যাশে করতে পারে। উত্তরের সব ক্যাশিং প্রতিরোধ করতে no-store ব্যবহার করুন। |
max-age=SECONDS |
max-age অনুরোধের নির্দেশিকা উপেক্ষা করা হয়েছে। ক্যাশে করা রেসপন্স এমনভাবে ফেরত পাঠানো হয় যেন অনুরোধে এই হেডার অন্তর্ভুক্ত করা হয়নি। |
max-age নির্দেশিকা সহ একটি রেসপন্স নির্দিষ্ট করা সেকেন্ড পর্যন্ত ক্যাশে করা হয়। |
s-maxage=SECONDS |
প্রযোজ্য নয় | s-maxage নির্দেশিকা সহ একটি রেসপন্স নির্দিষ্ট করা সেকেন্ড পর্যন্ত ক্যাশে করা হয়। max-age এবং s-maxage, দুটিই থাকলে, Cloud CDN-এর মাধ্যমে s‑maxage ব্যবহার করা হয়। এই নির্দেশিকা সহ উত্তরগুলি বাসি পরিবেশন করা হয় না। s-max-age (দুটি হাইফেন) ক্যাশিংয়ের জন্য সঠিক নয়। |
max-stale=SECONDS |
max-stale অনুরোধ নির্দেশিকা সর্বাধিক স্টেলনেস (সেকেন্ডে) নির্দেশ করে যা ক্লায়েন্ট গ্রহণ করতে ইচ্ছুক। Cloud CDN এটি মেনে চলে এবং শুধুমাত্র তখনই একটি বাসি ক্যাশে করা উত্তর ফেরত দেয় যদি উত্তরের বাসি হওয়ার সময় max-stale নির্দেশিকার চেয়ে কম হয়। অন্যথায়, অনুরোধ পূরণ করার আগে এটি আবার যাচাই করে। |
প্রযোজ্য নয় |
stale-while-revalidate=SECONDS |
প্রযোজ্য নয় | অ্যাসিঙ্ক্রোনাসভাবে রিভ্যালিডেশন চলাকালীন, ক্লায়েন্টকে SECONDS পর্যন্ত stale-while-revalidate সহ একটি উত্তর পাঠানো হয়। |
must-revalidate |
প্রযোজ্য নয় | must-revalidate সহ একটি রেসপন্স মেয়াদ শেষ হওয়ার পরে অরিজিন সার্ভারের সাথে আবার যাচাই করা হয়। এই নির্দেশিকা সহ উত্তরগুলি বাসি পরিবেশন করা হয় না। |
proxy-revalidate |
proxy-revalidate সহ একটি রেসপন্স মেয়াদ শেষ হওয়ার পরে অরিজিন সার্ভারের সাথে আবার যাচাই করা হয়। এই নির্দেশিকা সহ উত্তরগুলি বাসি পরিবেশন করা হয় না। |
|
no-transform |
প্রযোজ্য নয় | Cloud CDN-এর মাধ্যমে কোনও ট্রান্সফর্ম প্রয়োগ করা হয় না। |
ক্যাশে করা ও ক্যাশে না করা ট্রাফিক পরিমাপ করুন
Firebase কনসোলের App Hosting > ব্যবহার ট্যাবে, "Cloud CDN - আউটগোয়িং ব্যান্ডউইথ" গ্রাফে ক্যাশে করা ও ক্যাশে না করা বাইট দেখানো হয়, এবং প্রতিটি রোলআউটের জন্য এতে একটি চিহ্ন থাকে। আপনার ক্যাশে অপ্টিমাইজেশনের প্রচেষ্টা কতটা কার্যকর তা পরিমাপ করতে আপনি এই গ্রাফটি ব্যবহার করতে পারেন।
এছাড়াও, আপনি রুট-ভিত্তিক মনিটরিং-এর মাধ্যমে আপনার ওয়েব অ্যাপে নির্দিষ্ট রুটের জন্য ক্যাশে হিট রেট দেখতে পারেন।