পেজ ক্যাশিং, CDN ও সম্মতি ব্যানার: ভুল সম্মতি অবস্থা পরিবেশন এড়ানোর উপায়
দ্রুত পেজ, ভুল সম্মতি
পেজ ক্যাশিং গতি ও হোস্টিং খরচের জন্য আপনার করা সেরা কাজগুলোর একটি। একই সঙ্গে এটি না বুঝেই সম্মতি সেটআপ ভেঙে ফেলার সবচেয়ে সহজ উপায়গুলোর একটিও। ক্যাশ ঠিক তা-ই করে যা বলা হয়: একটি রেসপন্স একবার সংরক্ষণ করে এবং একই কী মেলে এমন সবাইকে পরিবেশন করে। সংরক্ষিত রেসপন্সে একজন ভিজিটরের সম্মতির পছন্দ বা অবস্থান সংক্রান্ত কিছু থাকলে পরের ভিজিটরও সেটি পায়।
এই গাইড সেই ক্যাশিং স্তরগুলো কভার করে যা সাধারণত পাবলিশার সাইটের সামনে থাকে — CDN এজ ক্যাশ, ফুল-পেজ ক্যাশিং প্লাগইন, রিভার্স প্রক্সি, সার্ভিস ওয়ার্কার এবং ব্রাউজার নিজে — এবং এগুলোর প্রতিটিকে কীভাবে ভুল সম্মতি অভিজ্ঞতা পরিবেশন থেকে বিরত রাখবেন।
মূল নিয়ম: সম্মতিকে ক্যাশ করা HTML-এর বাইরে রাখুন
সবচেয়ে নিরাপদ স্থাপত্যে ক্যাশ করা HTML পেজ সম্মতি-নিরপেক্ষ হিসেবে রেন্ডার হয়। পেজে CMP লোডার এবং আপনার ট্যাগ ব্লক বা অপেক্ষমাণ অবস্থায় থাকে, কিন্তু এই নির্দিষ্ট ভিজিটর সম্পর্কে কোনো সিদ্ধান্ত থাকে না। তারপর CMP ব্রাউজারে চলে, সংরক্ষিত পছন্দ পড়ে, ব্যানার দেখানো হবে কি না ঠিক করে এবং সেই অনুযায়ী ট্যাগ ছাড়ে।
সমস্যা শুরু হয় যখন সার্ভার রেন্ডারের সময় সম্মতির সিদ্ধান্ত নেয়, যেমন:
- কোনো থিম বা প্লাগইন যা সম্মতি কুকি থাকলেই কেবল বিজ্ঞাপন বা অ্যানালিটিক্স ট্যাগ প্রিন্ট করে;
- সার্ভার-সাইড কোড যা আগে পছন্দ করে ফেলেছেন এমন ভিজিটরদের জন্য ব্যানার মার্কআপ বাদ দেয়;
- টেমপ্লেট যা ভিজিটরের সম্মতির অবস্থা ইনলাইন স্ক্রিপ্ট ভেরিয়েবলে এমবেড করে।
সেই পেজ ক্যাশ হয়ে গেলে প্রথম ভিজিটরের অবস্থা সবার অবস্থা হয়ে যায়। যে ভিজিটর ট্র্যাকিং প্রত্যাখ্যান করেছেন তিনি এমন পেজ পেতে পারেন যেখানে ট্যাগ আগে থেকেই সক্রিয়, অথবা কোনো নতুন ভিজিটর কখনও ব্যানারই দেখতে না পারেন কারণ ক্যাশ করা কপি এমন কারও কাছ থেকে এসেছিল যিনি আগেই তা বন্ধ করে দিয়েছিলেন।
“Vary: Cookie” কেন খুব কমই সমাধান
প্রতি-ভিজিটর কনটেন্টের পাঠ্যবইয়ের সমাধান হলো ক্যাশকে কুকি হেডারে vary করতে বলা। বাস্তবে ভিজিটরদের কাছে অনন্য মানের অনেক কুকি থাকে, তাই পুরো কুকি হেডারে vary করলে আপনার ক্যাশ হিট রেট সাধারণত প্রায় শূন্যে নেমে আসে। কিছু CDN একটিমাত্র কুকি মান থেকে ক্যাশ কী তৈরি করতে দেয়, যা আপনার সম্মতি কুকির সম্ভাব্য অবস্থা অল্প হলে কাজ করে, কিন্তু এতে জটিলতা বাড়ে এবং ক্যাশ করা কপির সংখ্যা তবুও বাড়ে। সিদ্ধান্তটি ব্রাউজারে সরিয়ে নেওয়া সহজ এবং ক্যাশকে কার্যকর রাখে।
এজে ভূগোল
অনেক পাবলিশার অঞ্চলভেদে আলাদা ব্যানার দেখান: EU ও UK-র জন্য ওপ্ট-ইন ব্যানার, মার্কিন রাজ্যগুলোর জন্য ওপ্ট-আউট নোটিস, এবং অন্যত্র কিছুটা হালকা কিছু। সার্ভার ভিজিটরের IP ঠিকানা থেকে ভ্যারিয়েন্ট বেছে নিলে এবং সেই পেজ ক্যাশ হলে একজন ইউরোপীয় পাঠক ক্যাশ করা মার্কিন পেজ পেতে পারেন, অথবা উল্টোটা।
তিনটি প্যাটার্ন এটি এড়ায়:
- ক্লায়েন্ট-সাইড জিওলোকেশন। CMP-কে ব্রাউজারে অঞ্চল নির্ধারণ করতে দিন, যাতে ক্যাশ করা HTML সবার জন্য একই থাকে।
- ক্যাশ কী-তে দেশ। এজেই সিদ্ধান্ত নিতে হলে আপনার CDN-এর দেওয়া দেশ কোড ক্যাশ কী-তে অন্তর্ভুক্ত করুন। প্রতি দেশে একটি করে ক্যাশ কপি পাবেন, যা অনুমানযোগ্য।
- আনক্যাশড এজ লজিক। আঞ্চলিক সিদ্ধান্তটি এমন একটি এজ ফাংশনে চালান যা অন্যথায় ক্যাশ করা পেজে একটি ছোট, আনক্যাশড মান ঢোকায়।
যেটিই বেছে নিন, নথিভুক্ত করুন। জিও বাগ পুনরুৎপাদন করা সবচেয়ে কঠিনগুলোর একটি, কারণ এগুলো কেবল এক জায়গার সেই ভিজিটরদের জন্য দেখা দেয় যারা ঘটনাক্রমে অন্য জায়গার কারও ক্যাশ করা পেজ পান।
CMP স্ক্রিপ্ট নিজে ক্যাশ করা
CMP লোডার দীর্ঘ সময় ক্যাশ করা কার্যক্ষমতার জন্য ভালো, কিন্তু কনফিগারেশন বদলালে এর একটি মূল্য আছে। ভেন্ডর, উদ্দেশ্য বা ব্যানারের লেখা হালনাগাদ করলে এবং স্ক্রিপ্ট বা কনফিগারেশন ফাইল এক বছরের জন্য ক্যাশ থাকলে কিছু ভিজিটর পুরোনো সংস্করণই দেখতে থাকবে। আপনার CMP তার ফাইলের সংস্করণ কীভাবে করে তা দেখুন: পরিবর্তনশীল ফাইলের নাম বা ভার্সন প্যারামিটার আপনাকে আক্রমণাত্মকভাবে ক্যাশ করতে এবং তবুও পরিবর্তন তৎক্ষণাৎ চালু করতে দেয়। এছাড়া CMP যদি কোয়েরি স্ট্রিংয়ের ওপর নির্ভর করে, তবে নিশ্চিত করুন আপনার নিজের CDN তৃতীয়-পক্ষ স্ক্রিপ্ট URL থেকে কোয়েরি স্ট্রিং মুছে ফেলছে না।
সার্ভিস ওয়ার্কার ও অফলাইন ক্যাশ
প্রগ্রেসিভ ওয়েব অ্যাপ স্তর থাকা সাইট প্রায়ই সার্ভিস ওয়ার্কারে HTML ক্যাশ করে। একই নিয়ম প্রযোজ্য: নির্দিষ্ট সম্মতি সিদ্ধান্ত প্রতিফলিত করে এমন পেজ কখনও সংরক্ষণ করবেন না। সম্মতি-সংক্রান্ত এন্ডপয়েন্ট ও প্রেফারেন্স সেন্টার পেজ সার্ভিস ওয়ার্কার ক্যাশিং থেকে বাদ দিন, এবং নিশ্চিত করুন নতুন CMP কনফিগারেশন সবসময় আনা যায়।
ব্যাক/ফরওয়ার্ড ক্যাশ
আধুনিক ব্রাউজার সম্প্রতি দেখা পেজ মেমরিতে রাখে, যাতে ব্যাক বাটন সেগুলো তৎক্ষণাৎ ফিরিয়ে আনে। কোনো ভিজিটর একটি পেজে প্রেফারেন্স সেন্টার খুলে সম্মতি প্রত্যাহার করে ব্যাক চাপলে ফিরে আসা পেজে আগের ট্যাগ এখনও চলতে পারে। pageshow ইভেন্ট শুনুন এবং এর persisted প্রপার্টি পরীক্ষা করুন: এই ক্যাশ থেকে পেজ ফিরলে সংরক্ষিত সম্মতির অবস্থা আবার পড়ুন এবং তার সঙ্গে মিলিয়ে ট্যাগ বন্ধ বা চালু করুন।
পরীক্ষার রুটিন
- পরিষ্কার সেশনে একটি পেজ লোড করুন, প্রত্যাখ্যান করুন, তারপর দ্বিতীয় পেজ লোড করুন এবং নিশ্চিত করুন কোনো ট্র্যাকিং ট্যাগ চলছে না।
- দ্বিতীয় পরিষ্কার ব্রাউজার দিয়ে পুনরাবৃত্তি করুন এবং নিশ্চিত করুন ব্যানার দেখা যাচ্ছে, যা প্রমাণ করে ক্যাশে সেটি হারিয়ে যায়নি।
- রেসপন্স হেডার দেখুন পেজ ক্যাশ থেকে আসছে কি না, এবং সম্মতি কুকিসহ ও ছাড়া HTML তুলনা করুন — একই হওয়া উচিত।
- ক্যাশ পার্জ করার পর অন্তত দুটি অঞ্চল থেকে পরীক্ষা করুন, তারপর ক্যাশ গরম হওয়ার পর আবার।
- সম্মতি প্রত্যাহার করুন, ব্যাক বাটন ব্যবহার করুন এবং যাচাই করুন ট্যাগ বন্ধ হয়।
মূল কথা
- ক্যাশ করা HTML সম্মতি-নিরপেক্ষ হওয়া উচিত; CMP-কে ব্রাউজারে সিদ্ধান্ত নিতে দিন।
- পুরো কুকি হেডারে vary করা এড়ান; এটি হিট রেট নষ্ট করে।
- অঞ্চলভেদে ব্যানার আলাদা হলে ক্লায়েন্ট-সাইডে সিদ্ধান্ত নিন বা ক্যাশ কী-তে দেশ যোগ করুন।
- CMP ফাইলের সংস্করণ রাখুন, যাতে দীর্ঘ ক্যাশ মেয়াদ কনফিগারেশন পরিবর্তনে দেরি না ঘটায়।
- সার্ভিস ওয়ার্কার ও ব্যাক/ফরওয়ার্ড ক্যাশ সামলান, এবং শুধু পার্জের পরে নয়, ক্যাশ গরম অবস্থায়ও পরীক্ষা করুন।