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