সব ব্রাউজারই আপনার ওয়েব অ্যাপের অরিজিন ব্যবহার করতে পারে এমন স্টোরেজের পরিমাণের উপর একটি সর্বোচ্চ সীমা আরোপ করে। আপনার ওয়েবসাইটের ক্যাশিংয়ের কার্যকারিতা ও বিশ্বাসযোগ্যতার উপর প্রভাব ফেলতে পারে এমন স্টোরেজ কোটা সংক্রান্ত সীমাবদ্ধতা এড়াতে, রানটাইমে Workbox-এর ক্যাশ করা ডেটা অটোমেটিক ক্লিন-আপ করার জন্য আপনি এটি কনফিগার করতে পারবেন।
কোন কোন কনফিগারেশন বিকল্প কাজ করে?
রুট ও রানটাইম ক্যাশিং স্ট্র্যাটেজি সেট-আপ করার সময়, আপনি workbox-expiration থেকে ExpirationPlugin-এর একটি ইনস্ট্যান্স যোগ করতে পারেন, যা এমন সেটিংসের সাথে কনফিগার করা হয় যা আপনার ক্যাশ করা অ্যাসেটের ধরনের জন্য সবচেয়ে বেশি উপযুক্ত।
যেমন, রানটাইমে ছবি ক্যাশে করার জন্য নিম্নলিখিত কনফিগারেশন ব্যবহার করা হতে পারে, এতে কোটা পেরিয়ে গেলে অটোমেটিক ক্লিন-আপের পাশাপাশি স্পষ্ট সীমাও থাকে:
import {registerRoute} from 'workbox-routing';
import {CacheFirst} from 'workbox-strategies';
import {ExpirationPlugin} from 'workbox-expiration';
registerRoute(
({request}) => request.destination === 'image',
// Use a cache-first strategy with the following config:
new CacheFirst({
// You need to provide a cache name when using expiration.
cacheName: 'images',
plugins: [
new ExpirationPlugin({
// Keep at most 50 entries.
maxEntries: 50,
// Don't keep any entries for more than 30 days.
maxAgeSeconds: 30 * 24 * 60 * 60,
// Automatically cleanup if quota is exceeded.
purgeOnQuotaError: true
})
]
})
);
ExpirationPlugin ব্যবহার করার সময় আপনাকে maxEntries, maxAgeSeconds বা দুটিই সেট করতে হবে। purgeOnQuotaError ঐচ্ছিক।
maxEntries
এর ফলে, কোনও নির্দিষ্ট ক্যাশের জন্য এন্ট্রি (অর্থাৎ, অনন্য URL) সংখ্যার উপর একটি সর্বোচ্চ সীমা আরোপ করা হয়।
আপনি যদি জানেন যে কোনও নির্দিষ্ট স্ট্র্যাটেজি দ্বারা সম্ভাব্য URL-এর সংখ্যা খুব কম, তাহলে এটি সেট করা সাধারণত একটি ভাল ধারণা।
maxAgeSeconds
এই সময়ের বেশি আগে ক্যাশে যোগ করা এন্ট্রিগুলি পুরনো হিসেবে বিবেচিত হবে এবং পরবর্তীকালে ক্যাশে অ্যাক্সেস করার সময় সেগুলি অটোমেটিক মুছে দেওয়া হবে।
maxEntries-এর মতো এটি স্টোরেজ কোটা ম্যানেজ করার ক্ষেত্রে ততটা কার্যকর নয়, কারণ এন্ট্রিগুলি যদি অল্প সময়ের মধ্যে যোগ করা হয়, তাহলে আপনার ক্যাশে অনির্দিষ্টভাবে বড় হতে পারে। আপনি যদি জানেন যে ফ্রেশনেসের উপর একটি সর্বোচ্চ সীমা আছে যা আপনি আরোপ করতে চান এবং পুরানো এন্ট্রিগুলি আপনার ওয়েব অ্যাপের জন্য খুব কমই কাজে লাগে, তাহলে এটি সবচেয়ে উপযোগী।
purgeOnQuotaError
এই বিকল্প আপনাকে কোনও প্রদত্ত ক্যাশে নিরাপদ হিসেবে চিহ্নিত করতে দেয় যাতে আপনার ওয়েব অ্যাপ উপলভ্য স্টোরেজ অতিক্রম করলে সেটি অটোমেটিক মুছে ফেলা যায়।
এই বিকল্পটি বর্তমানে ডিফল্ট হিসেবে false ভাষায় সেট করা আছে। সাধারণত, রানটাইম ক্যাশে মুছে ফেলা হলেও তা যেন অক্ষত থাকে, তাই এই বিকল্পটি true হিসেবে সেট করা ভাল অভ্যাস এবং এটি নিশ্চিত করতে সাহায্য করে যে স্টোরেজ সংক্রান্ত সীমাবদ্ধতা থাকলেও আপনার ওয়েব অ্যাপ অটোমেটিক রিকভার করতে পারবে।
আপনাকে কত ডেটা স্টোর করতে দেওয়া হয়?
প্রতিটি ব্রাউজারের স্টোরেজের নিজস্ব সর্বোচ্চ সীমা আছে, তাই এর কোনও নির্দিষ্ট উত্তর নেই। এছাড়াও, কিছু ব্রাউজারে ডায়নামিক সীমা থাকে যা কোনও ডিভাইসে ফ্রি স্টোরেজের পরিমাণের উপর নির্ভর করে পরিবর্তিত হয়, তাই কার্যকর সর্বোচ্চ সীমা বিজ্ঞপ্তি ছাড়াই পরিবর্তিত হতে পারে।
navigator.storage.estimate()-এর মাধ্যমে, কিছু ব্রাউজার আপনার অরিজিন ব্যবহার করছে এমন স্টোরেজের আনুমানিক পরিমাণ কোয়েরি করার জন্য একটি ইন্টারফেস প্রকাশ করে, সাথে সাথে সর্বোচ্চ সীমাও প্রকাশ করে। "উপলভ্য স্টোরেজ স্পেস অনুমান করা" নিবন্ধে আপনি কীভাবে নিজের ওয়েব অ্যাপে এটি ব্যবহার করতে পারবেন সেই সম্পর্কে আরও তথ্য রয়েছে।
Chrome ছদ্মবেশী মোড সংক্রান্ত বিশেষ বিবেচনা
Chrome-এর ছদ্মবেশী মোডে কোনও ওয়েব অ্যাপ খুললে স্টোরেজের উপর বিশেষ বিধিনিষেধ আরোপ করা হয় যা সাধারণ ব্রাউজিংয়ের ক্ষেত্রে প্রযোজ্য নয়: প্রায় ১০০ মেগাবাইট কোটা সীমা থাকে, আপনার ডিভাইসে কতটা খালি জায়গা আছে তা নির্বিশেষে।
অস্পষ্ট উত্তর সম্পর্কে সতর্ক থাকুন!
অপ্রত্যাশিতভাবে কোটা বেশি ব্যবহার হওয়ার একটি সাধারণ কারণ হল অস্বচ্ছ উত্তরের রানটাইম ক্যাশিং। অর্থাৎ, CORS চালু না করে করা অনুরোধের ক্রস-অরিজিন উত্তর।
নিরাপত্তার কথা বিবেচনা করে, ব্রাউজার অটোমেটিক সেইসব অস্পষ্ট উত্তরের কোটা সংক্রান্ত প্রভাব বাড়িয়ে দেয়। যেমন, Chrome-এ, এমনকি কয়েক কিলোবাইট সাইজের কোনও অস্বচ্ছ উত্তরও আপনার কোটা ব্যবহারের ক্ষেত্রে প্রায় ৭ মেগাবাইট কন্ট্রিবিউট করবে।
আপনি একবার অস্বচ্ছ উত্তর ক্যাশে করা শুরু করলে, আপনি যতটা আশা করেছিলেন তার চেয়ে অনেক বেশি কোটা দ্রুত ব্যবহার করতে পারবেন, তাই maxEntries-এর সাথে ExpirationPlugin এবং সম্ভাব্য purgeOnQuotaError সঠিকভাবে কনফিগার করে ব্যবহার করাই হল সবচেয়ে ভালো উপায়।