مدیریت فضای ذخیره سازی آفلاین HTML5

HTML5 بسیاری از API های ذخیره سازی را معرفی کرد که به شما امکان می دهند حجم زیادی از داده ها را به صورت محلی در مرورگرهای کاربران خود ذخیره کنید. اما مقدار فضای اختصاص داده شده برای هر برنامه به طور پیش فرض به چند مگابایت محدود شده است. Google Chrome به شما امکان می‌دهد تا سهمیه فضای ذخیره‌سازی بزرگ‌تری، فراتر از محدودیت قبلی فقط ۵ مگابایت درخواست کنید.

این سند شما را با مفاهیم اساسی در مورد انواع فضای ذخیره‌سازی مورد استفاده در Chrome آشنا می‌کند و API آزمایشی Quota Management را توضیح می‌دهد که به شما امکان می‌دهد سهمیه فضای ذخیره‌سازی خود را مدیریت کنید. این سند فرض می‌کند که شما قبلاً با مفاهیم کلی ذخیره‌سازی سمت سرویس گیرنده آشنا هستید و نحوه استفاده از APIهای آفلاین را می‌دانید.

مطالب

  1. انواع ذخیره سازی
    1. موقت
    2. ماندگار
    3. نامحدود
    4. مقایسه انواع ذخیره سازی
  2. مدیریت سهمیه خود
    1. استفاده و در دسترس بودن فضای ذخیره سازی را پرس و جو کنید
    2. برای ذخیره سازی بیشتر بخواهید
    3. بازنشانی سهمیه برای آزمایش
  3. مرجع API
    1. ثابت ها
    2. مروری بر روش
    3. روش ها
  4. توسعه آینده

انواع ذخیره سازی

در Google Chrome، می‌توانید سه نوع فضای ذخیره‌سازی را درخواست کنید:

این انواع ذخیره سازی با جزئیات بیشتری در بخش های زیر توضیح داده شده و در جدول زیر با یکدیگر مقایسه شده اند.

ذخیره سازی موقت

ذخیره سازی موقت، ذخیره سازی موقتی است که برای هر برنامه وب در دسترس است. Chrome به طور خودکار به برنامه شما فضای ذخیره موقت می دهد، بنابراین نیازی به درخواست تخصیص ندارید.

استخر را به اشتراک بگذارید

فضای ذخیره سازی موقت بین همه برنامه های وب در حال اجرا در مرورگر به اشتراک گذاشته شده است. استخر مشترک می تواند تا 1/3 فضای دیسک موجود باشد. فضای ذخیره سازی که قبلاً توسط برنامه ها استفاده شده است در محاسبه استخر مشترک گنجانده شده است. یعنی محاسبه بر اساس (available storage space + storage being used by apps) * .333 است.

هر برنامه می تواند تا 20 درصد از استخر مشترک را داشته باشد. به عنوان مثال، اگر کل فضای دیسک موجود 60 گیگابایت باشد، استخر مشترک 20 گیگابایت است و برنامه می تواند تا 4 گیگابایت داشته باشد. این از 20٪ (تا 4 گیگابایت) از 1/3 (تا 20 گیگابایت) فضای دیسک موجود (60 گیگابایت) محاسبه می شود.

درخواست فضای بیشتر

اگرچه می‌توانید مقدار فضای ذخیره‌سازی موجود برای برنامه‌تان و مقدار داده‌هایی که قبلاً برای برنامه‌تان ذخیره شده است را جستجو کنید ، نمی‌توانید فضای ذخیره‌سازی موقت بیشتری را درخواست کنید. اگر برنامه ای از سهمیه اختصاص داده شده فراتر رود، خطایی رخ می دهد.

در حال تمام شدن فضای ذخیره سازی

هنگامی که از سهمیه ذخیره سازی کل استخر فراتر رفت، کل داده های ذخیره شده برای میزبانی که اخیراً کمتر استفاده شده است حذف می شود. با این حال، مرورگر داده‌های LocalStorage و SessionStorage را حذف نمی‌کند. برای داده های ذخیره شده در سایر API های آفلاین، مرورگر داده ها را به طور کامل و نه جزئی حذف می کند تا داده های برنامه به روش های غیرمنتظره خراب نشود.

از آنجایی که هر برنامه به حداکثر 20٪ از فضای ذخیره سازی محدود است، حذف تنها در صورتی امکان پذیر است که کاربر به طور فعال بیش از پنج برنامه آفلاین را اجرا کند که هر کدام از حداکثر فضای ذخیره سازی استفاده می کنند.

با این حال، فضای ذخیره‌سازی موجود می‌تواند با افزودن فایل‌های بیشتر بر روی هارد دیسک‌های کاربران، کوچک شود. هنگامی که فضای دیسک موجود کم می شود (به یاد داشته باشید، استخر مشترک فقط نیمی از فضای موجود موجود در دیسک را دریافت می کند)، مرورگر تمام داده های ذخیره شده برای میزبانی که اخیراً استفاده شده است را حذف می کند.

ذخیره سازی دائمی

ذخیره سازی دائمی فضای ذخیره سازی است که در مرورگر باقی می ماند مگر اینکه کاربر آن را حذف کند. این فقط برای برنامه‌هایی که از File System API استفاده می‌کنند در دسترس است، اما در نهایت برای سایر APIهای آفلاین مانند IndexedDB و Application Cache در دسترس خواهد بود.

یک برنامه می‌تواند سهمیه بیشتری برای ذخیره‌سازی دائمی نسبت به ذخیره‌سازی موقت داشته باشد، اما شما باید با استفاده از Quota Management API فضای ذخیره‌سازی را درخواست کنید و کاربر باید به شما اجازه استفاده از فضای بیشتری را بدهد. Chrome نوار اطلاعاتی را ارائه می‌کند که از کاربر می‌خواهد فضای ذخیره‌سازی محلی بیشتری را به برنامه بدهد.

ذخیره سازی نامحدود

فضای ذخیره‌سازی نامحدود مشابه فضای ذخیره‌سازی دائمی است، اما فقط برای برنامه‌ها و برنامه‌های افزودنی Chrome (فایل‌های crx.) در دسترس است. اندازه فضای ذخیره سازی نامحدود فقط با در دسترس بودن فضای در هارد دیسک کاربر محدود می شود. می‌توانید مجوز unlimitedStorage را در فایل مانیفست برای یک برنامه یا برنامه افزودنی درخواست کنید. هنگام نصب، کاربر از مجوزهای مورد نیاز برنامه یا برنامه افزودنی مطلع می شود. با ادامه نصب، کاربر به طور ضمنی برای تمام صفحاتی که آدرس آنها در فایل manifest.json فهرست شده است، مجوز می دهد.

برای کسب اطلاعات بیشتر، به راهنمای برنامه‌نویس مربوطه برای برنامه‌ها و برنامه‌های افزودنی مراجعه کنید.

مقایسه انواع ذخیره سازی

جدول زیر تفاوت بین سه نوع ذخیره سازی را توضیح می دهد.

ذخیره سازی موقت ذخیره سازی دائمی ذخیره سازی نامحدود
توضیحات اولیه

فضای ذخیره سازی گذرا که برای هر برنامه وب در دسترس است.

خودکار است و نیازی به درخواست نیست.

فضای ذخیره سازی دائمی که باید از طریق Quota Management API درخواست شود و توسط کاربران اعطا شود.

فضای ذخیره‌سازی دائمی برای برنامه‌ها و برنامه‌های افزودنی Chrome.

در فایل مانیفست تنظیم شده است و باید توسط کاربران اعطا شود.

در دسترس بودن

همه برنامه های وب

همه برنامه های وب منحصر به فرد برای برنامه های افزودنی Chrome و همچنین برنامه های وب میزبانی شده و نصب شده.
اجازه هیچ کدام. می توانید بدون درخواست صریح از آن استفاده کنید.

شما باید با استفاده از Quota Management API فضای ذخیره بیشتری درخواست کنید.

می‌توانید مجوز unlimitedStorage را در فایل مانیفست برای برنامه یا برنامه افزودنی درخواست کنید.
تجربه کاربری در اولین استفاده برای کاربر نامرئی است. برنامه فقط اجرا می شود.

Chrome نوار اطلاعاتی را نمایش می دهد که از کاربر می خواهد درخواست ذخیره سازی را بپذیرد یا رد کند.

اما اگر مقدار سهمیه ای که درخواست می کنید در واقع کمتر از تخصیص فعلی برنامه باشد، هیچ درخواستی نشان داده نمی شود. سهمیه بزرگتر حفظ می شود.

هنگام نصب، کاربر از مجوزهای مورد نیاز برنامه یا برنامه افزودنی مطلع می شود. با ادامه نصب، کاربر به طور ضمنی به همه صفحاتی که URL آنها در فایل manifest.json برای برنامه یا پسوند فهرست شده است، مجوز می دهد.

تجربه کاربر در درخواست‌های بعدی برای افزایش فضای ذخیره‌سازی قابل اجرا نیست. شما نمی توانید برای ذخیره سازی موقت بیشتری درخواست کنید.

کروم دوباره از کاربر درخواست می کند.

Chrome پس از نصب، بدون توجه به درخواست افزایش سهمیه توسط برنامه یا برنامه افزودنی، از کاربر درخواستی نمی‌کند.
ماندگاری داده ها

گذرا مرورگر می تواند داده ها را حذف کند.

ماندگار. مرورگر داده ها را حذف نمی کند مگر اینکه کاربر به آن دستور دهد. داده ها در دسترسی های بعدی در دسترس هستند.

فرض نکنید که داده ها دائمی هستند، زیرا کاربر می تواند آن را حذف کند.

مانند ذخیره سازی مداوم.

فضای ذخیره سازی پیش فرض

تا 20 درصد از استخر مشترک.

0 مگابایت شما باید صریحاً فضای ذخیره سازی خاصی را بخواهید.

0 مگابایت شما باید صریحاً در فایل مانیفست درخواست unlimitedStorage کنید.

اگر فضای ذخیره‌سازی مورد نیاز خود را مشخص نکنید، Chrome فضای ذخیره‌سازی را از استخر مشترک حافظه موقت به برنامه اختصاص می‌دهد.

حداکثر فضای ذخیره سازی تا 20 درصد از استخر مشترک. به اندازه فضای موجود روی هارد دیسک. هیچ استخر ثابتی برای ذخیره سازی ندارد. به اندازه فضای موجود روی هارد دیسک.
مورد استفاده توصیه شده ذخیره سازی. برنامه هایی که به صورت آفلاین کار می کنند یا دارایی های زیادی دارند. برنامه هایی که برای اجرا در Google Chrome طراحی شده اند.
API هایی که می توانند از آن استفاده کنند

API های آفلاین

  • کش برنامه
  • سیستم فایل
  • IndexedDB
  • WebSQL ( منسوخ شده از 18 نوامبر 2010)

توجه: API های ذخیره سازی وب مانند LocalStorage و SessionStorage در 5 مگابایت ثابت باقی می مانند.

API سیستم فایل

API های آفلاین

  • کش برنامه
  • سیستم فایل
  • IndexedDB
  • WebSQL (منسوخ شده)

توجه: API های ذخیره سازی وب مانند LocalStorage و SessionStorage در 5 مگابایت ثابت باقی می مانند.

مدیریت سهمیه خود

با استفاده از Quota Management API که در کروم 13 معرفی شده است، می توانید کارهای زیر را انجام دهید:

API با شی جهانی window.webkitStorageInfo پیاده سازی می شود.

برای مستندات مرجع، بخش بعدی را ببینید.

پرس و جو استفاده از فضای ذخیره سازی و در دسترس بودن

برای پرس و جو از اندازه فضای مورد استفاده و فضای موجود برای میزبان، queryUsageAndQuota() را با عبارت زیر فراخوانی کنید:

  • نوع فضای ذخیره‌سازی که می‌خواهید بررسی کنید
  • پاسخ به تماس موفقیت آمیز

استفاده گزارش شده توسط API ممکن است با اندازه واقعی داده های کاربر مطابقت نداشته باشد، زیرا هر ذخیره سازی ممکن است برای ذخیره ابرداده خود به مقداری بایت اضافی نیاز داشته باشد. همچنین، به‌روزرسانی‌های وضعیت ممکن است تأخیر داشته باشند و در نتیجه API آخرین وضعیت ذخیره‌سازی را منعکس نکند.

قطعه کد زیر نشان می دهد که چگونه می توانید در مورد فضای ذخیره سازی سوال کنید:

// Request storage usage and capacity left
// Choose either Temporary or Persistent
navigator.webkitTemporaryStorage.queryUsageAndQuota (
    function(usedBytes, grantedBytes) {
        console.log('we are using ', usedBytes, ' of ', grantedBytes, 'bytes');
    },
    function(e) { console.log('Error', e);  }
);

اگر می‌خواهید وضعیت ذخیره‌سازی دائمی را بپرسید، به سادگی webkitStorageInfo.TEMPORARY را با webkitStorageInfo.PERSISTENT جایگزین کنید. enum نیز در شی window (فضای نام جهانی) است، بنابراین می توانید از window.PERSISTENT و window.TEMPORARY نیز استفاده کنید.

درخواست ذخیره سازی بیشتر

نیازی به درخواست ذخیره سازی موقت بیشتری ندارید زیرا تخصیص خودکار است و نمی توانید از حداکثر حد مجاز فراتر بروید (همانطور که در جدول توضیح داده شده است).

برای ذخیره سازی دائمی برای File System API، سهمیه پیش فرض 0 است، بنابراین باید صریحاً برای برنامه خود درخواست ذخیره سازی کنید. requestQuota() را با موارد زیر فراخوانی کنید:

  • نوع ذخیره سازی
  • اندازه
  • پاسخ به تماس موفقیت آمیز

بسته به آنچه شما درخواست می کنید، موارد زیر رخ می دهد:

  • اگر سهمیه بیشتری بخواهید، مرورگر یک نوار اطلاعات به کاربر ارائه می‌کند و از او می‌خواهد که اجازه افزایش سهمیه را اعطا کند یا رد کند. در برخی موارد، درخواست ممکن است بی سر و صدا رد شود و سهمیه فعلی یا سهمیه کوچکتر برگردانده شود.
  • اگر مقدار سهمیه ای که درخواست می کنید کمتر از تخصیص فعلی برنامه باشد، هیچ درخواستی نشان داده نمی شود.
  • اگر برای فضای ذخیره‌سازی بیشتر از حد مجاز درخواست کنید، با خطا ( QUOTA_EXCEEDED_ERR ) مواجه می‌شوید.
  • اگر پس از اینکه کاربر قبلاً مجوز را صادر کرده است، requestQuota() دوباره فراخوانی کنید، هیچ اتفاقی نمی‌افتد. پس زحمت تماس مجدد با متد را نداشته باشید.

موارد زیر نشان می دهد که چگونه می توانید فضای ذخیره سازی بیشتری درخواست کنید:

// Request Quota (only for File System API)
var requestedBytes = 1024*1024*10; // 10MB

navigator.webkitPersistentStorage.requestQuota (
    requestedBytes, function(grantedBytes) {
        window.requestFileSystem(PERSISTENT, grantedBytes, onInitFs, errorHandler);

    }, function(e) { console.log('Error', e); }
);
});

بازنشانی سهمیه برای آزمایش

هنگامی که در حال آزمایش فضای ذخیره سازی در برنامه خود هستید، ممکن است بخواهید داده های ذخیره شده را پاک کنید تا بتوانید مدیریت سهمیه را مجدداً در برنامه خود آزمایش کنید. برای انجام این کار:

  1. chrome://settings/cookies در omnibox (نوار آدرس) وارد کنید.
  2. برنامه خود را جستجو کنید.
  3. برنامه خود را انتخاب کنید.
  4. روی X در سمت راست انتخاب برجسته کلیک کنید.

مرجع API

این بخش روش های Quota Management API را مستند می کند.

ثابت ها

موارد زیر ثابت‌های webkitStorageInfo هستند که نوع ذخیره‌سازی را نشان می‌دهند.

ثابت ارزش توضیحات
TEMPORARY 0 ذخیره سازی موقت
PERSISTENT 1 ذخیره سازی دائمی

مروری بر روش

queryUsageAndQuota
requestQuota

روش ها

queryUsageAndQuota

اندازه فضای ذخیره‌سازی مورد استفاده و فضای موجود برای میزبان را بررسی کنید.

 // you could also use it from webkitPersistentStorage
navigator.webkitTemporaryStorage.queryUsageAndQuota(
      successCallback,
      errorCallback);
  • successCallback : پاسخ به تماس اختیاری با دو پارامتر:

    • تعداد فعلی بایت هایی که برنامه استفاده می کند.
    • تعداد بایت های باقی مانده در سهمیه.
  • errorCallback : پاسخ به تماس خطای اختیاری.

درخواست سهمیه

برای ذخیره سازی بیشتر بخواهید. مرورگر نوار اطلاعاتی را ارائه می‌کند تا از کاربر بخواهد مجوز ذخیره سازی بیشتر را به برنامه اعطا یا رد کند.

 // you could also use it from webkitTemporaryStorage
navigator.webkitPersistentStorage.requestQuota (
      newQuotaInBytes,
      quotaCallback,
      errorCallback);
پارامترها
  • newQuotaInBytes : مقدار بایتی که در سهمیه ذخیره سازی خود می خواهید.
  • successCallback : پاسخ به تماس اختیاری که مقدار بایت های داده شده را ارسال می کند.
  • errorCallback : پاسخ به تماس خطای اختیاری.

توسعه آینده

برنامه این است که همه APIهای ذخیره سازی آفلاین HTML5 - از جمله IndexedDB، Application Cache، File System و سایر APIهایی که ممکن است مشخص شوند - تحت API مدیریت سهمیه قرار گیرند. با آن می‌توانید تمام تخصیص فضای ذخیره‌سازی را مدیریت کنید.