ক্যাশে আচরণ পরিচালনা করুন

Firebase Hosting আপনার সাইটকে যত দ্রুত সম্ভব করতে একটি শক্তিশালী গ্লোবাল CDN ব্যবহার করে।

যেকোনো অনুরোধকৃত স্ট্যাটিক কন্টেন্ট স্বয়ংক্রিয়ভাবে CDN-এ ক্যাশ করা হয় । আপনি যদি আপনার সাইটের বিষয়বস্তু পুনরায় স্থাপন করেন, Firebase Hosting স্বয়ংক্রিয়ভাবে পরবর্তী অনুরোধ পর্যন্ত CDN জুড়ে আপনার সমস্ত ক্যাশে করা সামগ্রী সাফ করে দেয়।

যাইহোক, যেহেতু Cloud Functions এবং Cloud Run পরিষেবাগুলি গতিশীলভাবে বিষয়বস্তু তৈরি করে, তাই একটি প্রদত্ত URL-এর বিষয়বস্তু ব্যবহারকারীর ইনপুট বা ব্যবহারকারীর পরিচয়ের উপর ভিত্তি করে পরিবর্তিত হতে পারে। এটির জন্য অ্যাকাউন্ট করার জন্য, ব্যাকএন্ড কোড দ্বারা পরিচালিত অনুরোধগুলি ডিফল্টরূপে CDN-এ ক্যাশে হয় না

আপনি, যদিও, গতিশীল বিষয়বস্তুর জন্য ক্যাশিং আচরণ কনফিগার করতে পারেন। উদাহরণস্বরূপ, যদি একটি ফাংশন শুধুমাত্র পর্যায়ক্রমে নতুন বিষয়বস্তু তৈরি করে, তাহলে আপনি অন্তত অল্প সময়ের জন্য জেনারেট করা বিষয়বস্তু ক্যাশ করে আপনার অ্যাপের গতি বাড়াতে পারেন।

আপনি একইভাবে ক্যাশিং আচরণ কনফিগার করতে পারেন সম্ভাব্যভাবে ফাংশন নির্বাহের খরচ কমাতে কারণ বিষয়বস্তু একটি ট্রিগার ফাংশনের পরিবর্তে CDN থেকে পরিবেশিত হয়। Cloud Functions এবং Cloud Run ডকুমেন্টেশনে ফাংশন এক্সিকিউশন এবং পরিষেবাগুলি অপ্টিমাইজ করার বিষয়ে আরও পড়ুন৷

ব্যতিক্রম হল সেই অনুরোধ যা 404টি ত্রুটি ফেরত দেয়। CDN 10 মিনিটের জন্য একটি অস্তিত্বহীন URL-এ আপনার পরিষেবার 404 প্রতিক্রিয়া ক্যাশ করে, যাতে সেই URL-এর জন্য পরবর্তী অনুরোধগুলি CDN-এর বাইরে দেওয়া হয়৷ আপনি যদি আপনার পরিষেবা পরিবর্তন করেন যাতে এই URL-এ সামগ্রী এখন বিদ্যমান থাকে, CDN 10 মিনিটের জন্য (সর্বোচ্চ) যেকোনও ক্যাশে করা 404s পরিবেশন করতে থাকে এবং তারপরে সেই URL থেকে সাধারণভাবে সামগ্রী পরিবেশন করে।

যদি একটি 404 প্রতিক্রিয়া ইতিমধ্যেই আপনার Cloud Functions বা Cloud Run পরিষেবা দ্বারা সেট করা ক্যাশিং শিরোনাম থাকে, তাহলে তারা 10 মিনিটের ডিফল্টকে ওভাররাইড করে এবং CDN-এর ক্যাশিং আচরণ সম্পূর্ণরূপে নির্ধারণ করে৷

Google এর ওয়েব ডেভেলপার ডকুমেন্টেশনে ক্যাশিং আচরণ সম্পর্কে আরও জানুন।

ক্যাশে-কন্ট্রোল সেট করুন

ডায়নামিক কন্টেন্টের জন্য ক্যাশে পরিচালনা করতে আপনি যে প্রধান টুলটি ব্যবহার করেন তা হল Cache-Control হেডার। এই শিরোনামটি কনফিগার করার মাধ্যমে, আপনি ব্রাউজার এবং CDN উভয়ের সাথেই যোগাযোগ করতে পারেন কতক্ষণ আপনার সামগ্রী ক্যাশে করা যাবে৷ আপনার ফাংশনে, আপনি Cache-Control সেট করুন এভাবে:

res.set('Cache-Control', 'public, max-age=300, s-maxage=600');

এই উদাহরণ শিরোনামে, নির্দেশাবলী তিনটি জিনিস করে:

  • public — ক্যাশেকে public হিসাবে চিহ্নিত করে। এর মানে হল যে ব্রাউজার এবং মধ্যবর্তী সার্ভার উভয়ই (অর্থাৎ Firebase Hosting জন্য CDN) বিষয়বস্তু ক্যাশে করতে পারে।

  • max-age — ব্রাউজার এবং CDN কে কত সেকেন্ডে কন্টেন্ট ক্যাশে করতে পারে তা বলে। নির্ধারিত সময় শেষ হয়ে গেলে, ব্রাউজার এবং সিডিএনকে অবশ্যই মূল সার্ভারের সাথে বিষয়বস্তুটিকে পুনরায় যাচাই করতে হবে। উদাহরণের শিরোনামে, আমরা ব্রাউজার এবং CDN-কে পাঁচ মিনিটের জন্য বিষয়বস্তু ক্যাশে করার অনুমতি দিচ্ছি (CDN ক্যাশিংয়ের জন্য নির্দিষ্ট নিয়ন্ত্রণের জন্য নিচের s-maxage দেখুন)।

  • s-maxage — শুধুমাত্র CDN-ক্যাশিংয়ের জন্য max-age নির্দেশিকাকে ওভাররাইড করে; CDN কে কত সেকেন্ডে কন্টেন্ট ক্যাশে করতে পারে তা বলে। যখন নির্ধারিত সময়ের মেয়াদ শেষ হয়ে যায়, তখন CDN অবশ্যই মূল সার্ভারের সাথে বিষয়বস্তুটিকে পুনরায় যাচাই করতে হবে। উদাহরণের শিরোনামে, আমরা শুধুমাত্র CDN-এর জন্য max-age সেটিং ওভাররাইড করছি এবং CDN-কে দশ মিনিটের জন্য বিষয়বস্তু ক্যাশে করার অনুমতি দিচ্ছি।

max-age এবং s-maxage জন্য, তাদের মানগুলি দীর্ঘতম সময়ে সেট করুন যাতে ব্যবহারকারীরা পুরানো বিষয়বস্তু প্রাপ্তির সাথে স্বাচ্ছন্দ্য বোধ করেন৷ যদি একটি পৃষ্ঠা প্রতি কয়েক সেকেন্ড পরিবর্তিত হয়, একটি ছোট সময় মান ব্যবহার করুন। যাইহোক, অন্যান্য ধরনের বিষয়বস্তু নিরাপদে ঘন্টা, দিন, এমনকি মাসের জন্য ক্যাশে করা যেতে পারে।

আপনি Mozilla ডেভেলপার নেটওয়ার্কে এবং Google এর ওয়েব ডেভেলপার ডকুমেন্টেশনে Cache-Control শিরোনাম সম্পর্কে আরও জানতে পারেন।

ক্যাশে কন্টেন্ট কখন পরিবেশন করা হয়?

ব্রাউজার এবং CDN আপনার বিষয়বস্তু ক্যাশে এর উপর ভিত্তি করে:

  • হোস্টনাম
  • পথ
  • ক্যোয়ারী স্ট্রিং
  • Vary হেডারে উল্লেখ করা অনুরোধ শিরোনামের বিষয়বস্তু

হেডার পরিবর্তন করুন

Vary হেডার নির্ধারণ করে যে কোন অনুরোধের শিরোনামগুলি একটি উপযুক্ত প্রতিক্রিয়া প্রদান করতে ব্যবহার করা উচিত (ক্যাশে করা সামগ্রীটি বৈধ কিনা বা বিষয়বস্তুটি মূল সার্ভারের সাথে পুনরায় যাচাই করা উচিত কিনা)৷

Firebase Hosting স্বয়ংক্রিয়ভাবে সাধারণ পরিস্থিতির জন্য আপনার প্রতিক্রিয়াতে একটি উপযুক্ত Vary হেডার সেট করে। বেশিরভাগ সময়, আপনাকে Vary হেডার নিয়ে চিন্তা করতে হবে না। যাইহোক, কিছু উন্নত ব্যবহারের ক্ষেত্রে, ক্যাশে প্রভাবিত করার জন্য আপনার অন্যান্য হেডার থাকতে পারে। যখন এটি হয়, আপনি আপনার প্রতিক্রিয়াতে Vary হেডার সেট করতে পারেন। যেমন:

res.set('Vary', 'Accept-Encoding, X-My-Custom-Header');

এই ক্ষেত্রে, Vary হেডারের মান হল:

vary: X-My-Custom-Header, x-fh-requested-host, accept-encoding, cookie, authorization

এই সেটিংসের সাথে, ভিন্ন ভিন্ন X-My-Custom-Header শিরোনাম সহ দুটি অন্যথায় অভিন্ন অনুরোধ আলাদাভাবে ক্যাশে করা হয়। লক্ষ্য করুন যে যখন গতিশীল বিষয়বস্তুর জন্য অনুরোধ করা হয় তখন Hosting ডিফল্টভাবে Vary হেডারে Cookie এবং Authorization যোগ করে। এটি নিশ্চিত করে যে আপনার ব্যবহার করা যেকোনো সেশন বা কুকি অনুমোদনের শিরোনাম ক্যাশে কী-এর অংশ তৈরি করা হয়েছে, যা দুর্ঘটনাজনিত বিষয়বস্তু ফাঁস প্রতিরোধ করে।

এছাড়াও নোট করুন:

  • শুধুমাত্র GET এবং HEAD অনুরোধ ক্যাশে করা যেতে পারে। অন্যান্য পদ্ধতি ব্যবহার করে HTTPS অনুরোধগুলি কখনই ক্যাশে করা হয় না।

  • Vary হেডারে সেটিংস যোগ করার সময় সতর্ক থাকুন। আপনি যত বেশি সেটিংস যোগ করবেন, CDN ক্যাশে করা বিষয়বস্তু পরিবেশন করার সম্ভাবনা তত কম। এছাড়াও মনে রাখবেন যে Vary অনুরোধ শিরোনামের উপর ভিত্তি করে, প্রতিক্রিয়া শিরোনাম নয়।

কুকিজ ব্যবহার করে

Cloud Functions বা Cloud Run সাথে Firebase Hosting ব্যবহার করার সময়, কুকিগুলি সাধারণত আগত অনুরোধগুলি থেকে ছিনিয়ে নেওয়া হয়। দক্ষ CDN ক্যাশে আচরণের জন্য এটি প্রয়োজনীয়। শুধুমাত্র বিশেষভাবে-নামিত __session কুকিগুলিকে আপনার অ্যাপটি কার্যকর করার অনুমতি দেওয়া হয়েছে৷

উপস্থিত থাকলে, __session কুকি স্বয়ংক্রিয়ভাবে ক্যাশে কী-এর একটি অংশ হয়ে যায়, যার অর্থ ভিন্ন কুকি সহ দুই ব্যবহারকারীর পক্ষে অন্যের ক্যাশে করা প্রতিক্রিয়া পাওয়া অসম্ভব। যদি আপনার অ্যাপ ব্যবহারকারীর অনুমোদনের উপর নির্ভর করে ভিন্ন বিষয়বস্তু পরিবেশন করে তবেই শুধুমাত্র __session কুকি ব্যবহার করুন।