ذخیره سازی کارآمدتر IndexedDB در کروم

یک بهینه سازی جدید در کروم نحوه ذخیره داده های IndexedDB روی دیسک را بهبود می بخشد. این پیشرفت بر نحوه مدیریت مقادیر بزرگ در سیستم ذخیره‌سازی Chrome متمرکز است، به‌ویژه با ارائه فشرده‌سازی به فایل‌های خاصی که روی دیسک ذخیره شده‌اند. در این مقاله نکات کلیدی این به روز رسانی خلاصه می شود.

مکانیسم ذخیره سازی کروم قبل از نسخه 129

Chrome از LevelDB برای ذخیره داده های IndexedDB روی دیسک استفاده می کند. LevelDB یک کتابخانه ذخیره‌سازی کلید-مقدار سریع است، اما زمانی که مقادیر فردی از اندازه یک صفحه پایگاه داده فراتر می‌رود، با مشکل مواجه می‌شود. برای رفع این مشکل، کروم از سال 2017 مقادیر بزرگتر از یک صفحه را به عنوان فایل های ساده روی دیسک در کنار فایل پایگاه داده ذخیره کرده است.

ذخیره سازی از نسخه 129

فشرده سازی مقادیر بزرگ

برخلاف محتویاتی که مستقیماً در پایگاه داده LevelDB ذخیره می‌شوند، که قبل از نوشتن روی دیسک فشرده شده و پس از خواندن از حالت فشرده خارج می‌شوند، فایل‌های بزرگی که به‌عنوان فایل‌های ساده ذخیره می‌شوند فشرده نشده‌اند. با به‌روزرسانی جدید، Chrome اکنون این فایل‌های بزرگ را با استفاده از کتابخانه فشرده‌سازی بلادرنگ Snappy فشرده می‌کند و در نتیجه باعث صرفه‌جویی قابل توجهی در فضا می‌شود. این به ویژه برای داده های ساختاریافته، مانند آرایه های بزرگ مقادیر جاوا اسکریپت، XML یا JSON موثر است. برای فایل‌های رسانه‌ای که بزرگ هستند، اما قبلاً فشرده شده‌اند، یا اگر سایت قبلاً خود فشرده‌سازی و باز کردن فشرده‌سازی را انجام می‌دهد، مؤثر نیست.

تاثیر بر کارایی ذخیره سازی

اگر فشرده سازی اندازه فایل را به کمتر از اندازه یک صفحه LevelDB کاهش دهد، داده ها به LevelDB برمی گردند. این تغییر نه تنها باعث صرفه جویی در فضا می شود، بلکه عملیات ورودی/خروجی دیسک را نیز کاهش می دهد و عملکرد کلی را بهبود می بخشد.

الگوریتم فشرده سازی Snappy

تیم کروم Snappy را برای فشرده‌سازی انتخاب کرد زیرا سرعت را به‌جای حداکثر فشرده‌سازی بهینه می‌کند. به اندازه کافی سریع است که هیچ جریمه عملکرد قابل اندازه گیری در طول فشرده سازی یا رفع فشار وارد نمی کند.

بهبود عملکرد

فشرده سازی و رفع فشرده سازی در فرآیند رندر، بخشی از معماری چند فرآیندی کروم، انجام می شود. این باعث کاهش حجم پیام های ارسال شده به فرآیند مرورگر می شود که منجر به بهبود عملکرد بیشتر می شود. بنچمارک‌های مصنوعی نشان داده‌اند که این به‌روزرسانی به دلیل کاهش IPC (ارتباط بین فرآیندی) و ورودی/خروجی دیسک، می‌تواند برخی از عملیات‌ها را دو تا سه برابر سریع‌تر از قبل انجام دهد. در عمل، در اندازه‌گیری‌های تیم Chrome، 1 مگابایت محموله‌های داده ساختاریافته از دیسکی به صفحه دیگر در حدود یک چهارم زمان تحویل داده می‌شوند (با تنوع بالا بر اساس سخت‌افزار دستگاه و فعالیت سیستم).

تاثیر توسعه دهنده و کاربر

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

  • صرفه جویی در فضا: فشرده سازی فقط برای داده های جدید ذخیره شده پس از این به روز رسانی اعمال می شود. صرفه جویی در فضا را می توان به طور غیر مستقیم با استفاده از API های وب مانند navigator.storage.estimate() یا در بخش Storage در Chrome DevTools زیر پانل برنامه مشاهده کرد.
  • آزمایش این ویژگی: برنامه‌نویسان می‌توانند این رفتار را در نسخه‌های پیش از انتشار Chrome (قبل از ۱۲۹) با فعال کردن این ویژگی با پرچم آزمایش کنند: --enable-features="IndexedDBCompressValuesWithSnappy" .

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

قدردانی

این سند توسط ایوان استاد و ریچل اندرو بررسی شد.