همه مرورگرها برای مقدار فضای ذخیرهسازی که مبدأ برنامه وب شما مجاز به استفاده از آن است حد بالایی تعیین میکنند. میتوانید Workbox را پیکربندی کنید تا دادههایی را که در زمان اجرا ذخیره میکند بهطور خودکار پاکسازی کند تا با محدودیتهای سهمیه فضای ذخیرهسازی که ممکن است بر کارایی و قابلیت اطمینان ذخیرهسازی وبسایت شما تأثیر بگذارد مواجه نشوید.
از چه گزینههای پیکربندی پشتیبانی میشود؟
هنگام راهاندازی مسیر و استراتژی ذخیره کردن در حافظه نهان زمان اجرا، میتوانید نمونهای از ExpirationPlugin را از workbox-expiration اضافه کنید که با تنظیماتی پیکربندی شده است که برای نوع داراییهایی که در حافظه نهان ذخیره میکنید منطقیترین است.
برای مثال، از پیکربندی زیر میتوان برای ذخیره کردن تصاویر در زمان اجرا استفاده کرد، هم با محدودیتهای صریح و هم با پاکسازی خودکار درصورت تجاوز از سهمیه:
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
این امر حد بالایی را برای تعداد ورودیها (یعنی نشانیهای وب منحصربهفرد) برای یک حافظه نهان معین تعیین میکند.
تنظیم این مورد معمولاً ایده خوبی است، مگر اینکه بدانید فقط تعداد کمی نشانی وب ممکن است توسط یک استراتژی خاص مدیریت شود.
maxAgeSeconds
ورودیهایی که بیشاز این تعداد ثانیه پیش به حافظه نهان اضافه شدهاند قدیمی درنظر گرفته میشوند و دفعه بعدی که به حافظه نهان دسترسی پیدا شود بهطور خودکار پاکسازی میشوند.
این روش در مدیریت سهمیه فضای ذخیرهسازی به اندازه maxEntries مؤثر نیست، زیرا حافظههای نهان شما میتوانند بهطور دلخواه بزرگ شوند تا زمانی که همه ورودیها در یک دوره زمانی کوتاه اضافه شده باشند. این ویژگی زمانی مفیدتر است که بدانید برای تازگی حد بالایی وجود دارد که میخواهید اعمال کنید و نگه داشتن ورودیهای قدیمیتر برای برنامه وب شما ارزش چندانی ندارد.
purgeOnQuotaError
این گزینه به شما امکان میدهد حافظه نهان دادهشدهای را بهعنوان ایمن علامتگذاری کنید تا درصورت فراتر رفتن برنامه وب از فضای ذخیرهسازی دردسترس، بهطور خودکار حذف شود.
این گزینه درحالحاضر بهطور پیشفرض روی false تنظیم شده است. بهطورکلی، حافظههای نهان زمان اجرا باید دربرابر حذف مقاوم باشند، بنابراین تنظیم این گزینه روی true روال خوبی است و کمک میکند مطمئن شوید برنامه وب شما میتواند درصورت محدودیت فضای ذخیرهسازی بهطور خودکار بازیابی شود.
چه مقدار داده مجاز به ذخیره کردن هستید؟
هر مرورگر محدودیتهای بالایی برای فضای ذخیرهسازی خود دارد، بنابراین پاسخ واحدی وجود ندارد. علاوهبراین، برخیاز مرورگرها دارای حد پویایی هستند که براساس میزان فضای ذخیرهسازی آزاد در یک دستگاه معین تغییر میکند، بنابراین حد بالای مؤثر ممکن است بدون اطلاع قبلی تغییر کند.
برخیاز مرورگرها رابطی را برای پُرسمان کردن مقدار تقریبی فضای ذخیرهسازی که مبدأ شما استفاده میکند، بههمراه حد بالایی، ازطریق navigator.storage.estimate() آشکار میکنند. مقاله «تخمین فضای ذخیرهسازی دردسترس» اطلاعات بیشتری درباره نحوه استفاده از آن در برنامههای وب خودتان دارد.
ملاحظات ویژه «حالت ناشناس» Chrome
باز کردن برنامه وب در حالت ناشناس Chrome محدودیت ویژهای برای فضای ذخیرهسازی اعمال میکند که برای زمینههای مرور عادی اعمال نمیشود: سهمیه حدود ۱۰۰ مگابایت وجود دارد، صرفنظر از فضای آزاد موجود در دستگاه شما.
مراقب پاسخهای مبهم باشید!
یکی از منابع رایج استفاده غیرمنتظره از سهمیه بالا، بهدلیل ذخیره کردن در حافظه نهان زمان اجرا پاسخهای مبهم است، یعنی پاسخهای میانمبدئی به درخواستهایی که بدون فعال کردن CORS انجام شدهاند.
مرورگرها بهدلیل ملاحظات امنیتی، تأثیر سهمیه آن پاسخهای مبهم را بهطور خودکار افزایش میدهند. برای مثال، در Chrome، حتی پاسخ مبهم چند کیلوبایتی درنهایت حدود ۷ مگابایت به استفاده از سهمیه شما اضافه میکند.
وقتی شروع به ذخیره کردن پاسخهای مبهم میکنید، میتوانید بهسرعت از سهمیه بسیار بیشتری از آنچه پیشبینی کردهاید استفاده کنید، بنابراین بهترین روش این است که از ExpirationPlugin با maxEntries و احتمالاً purgeOnQuotaError که بهدرستی پیکربندی شدهاند استفاده کنید.