אופטימיזציה חדשה ב-Chrome משפרת את האופן שבו נתוני IndexedDB מאוחסנים בדיסק. השיפור הזה מתמקד בניהול ערכים גדולים במערכת האחסון של Chrome, ובמיוחד בהוספת דחיסת קבצים מסוימים ששמורים בדיסק. המאמר מסכם את הנקודות העיקריות של העדכון הזה.
מנגנון האחסון של Chrome לפני גרסה 129
Chrome משתמש ב-LevelDB כדי לאחסן נתוני IndexedDB בדיסק. LevelDB היא ספריית אחסון מהירה של מפתחות וערכים, אבל היא מתקשה כשערכים בודדים חורגים מהגודל של דף במסד נתונים. כדי לטפל בבעיה הזו, החל משנת 2017, Chrome שומר ערכים גדולים מדף אחד כקבצים רגילים בדיסק לצד קובץ מסד הנתונים.
אחסון מגרסה 129
דחיסת ערכים גדולים
בניגוד לתוכן שנשמר ישירות במסד הנתונים של LevelDB, שדחוס לפני שהוא נכתב לדיסק ונדחס אחרי שהוא נקרא, הקבצים הגדולים שנשמרו כקבצים רגילים לא דחוסים. בעקבות העדכון החדש, Chrome ידחוס עכשיו את הקבצים הגדולים האלה באמצעות ספריית הדחיסה בזמן אמת Snappy, וכתוצאה מכך תוכלו לחסוך מקום אחסון רב. הפתרון הזה יעיל במיוחד לנתונים מובְנים, כמו מערכי נתונים גדולים של ערכי JavaScript, XML או JSON. היא לא יעילה לקבצי מדיה גדולים שכבר דחוסים, או, במקרים פחות נפוצים, אם האתר כבר מבצע דחיסה וביטול דחיסה בעצמו.
ההשפעה על יעילות האחסון
אם הדחיסה מצמצמת את גודל הקובץ מתחת לגודל של דף LevelDB, הנתונים מועברים חזרה ל-LevelDB. השינוי הזה לא רק חוסך מקום, אלא גם מפחית את פעולות הקלט/הפלט בדיסק, וכך משפר את הביצועים הכוללים.
אלגוריתם דחיסת הנתונים של Snappy
צוות Chrome בחר ב-Snappy לדחיסה כי הוא מבצע אופטימיזציה למהירות ולא לדחיסה מקסימלית. הוא מהיר מספיק כדי שלא תהיה פגיעה ניכרת בביצועים במהלך הדחיסה או הלחץ.
שיפורי ביצועים
הדחיסה וההוצאה מהלחץ מתבצעות בתהליך הרינדור, שהוא חלק מארכיטקטורת התהליכים המרובים של Chrome. כך מקטינים את גודל ההודעות שנשלחות לתהליך הדפדפן, וכתוצאה מכך יש שיפורים נוספים בביצועים. לפי בדיקות ביצועים סינתטיות, העדכון הזה יכול להאיץ פעולות מסוימות פי שניים עד שלוש בהשוואה לעבר, בגלל הפחתה ב-IPC (תקשורת בין תהליכים) וב-I/O בדיסק. בפועל, לפי המדידות של צוות Chrome, עומסי נתונים מובְנים של 1MB מועברים מהדיסק לדף בכחצי מהזמן (עם שונות גבוהה בהתאם לחומרה של המכשיר ולפעילות המערכת).
ההשפעה על מפתחים ועל משתמשים
השינויים האלה שקופים לגמרי למפתחים ולמשתמשים. עם זאת, המשתמשים עשויים להבחין בשיפורים בביצועים ובצמצום השימוש באחסון.
- חיסכון במקום: הדחיסה חלה רק על נתונים חדשים שנשמרים אחרי העדכון הזה. אפשר לראות את החיסכון במקום באופן עקיף באמצעות ממשקי API לאינטרנט כמו
navigator.storage.estimate()
, או בקטע אחסון בכלי הפיתוח של Chrome, מתחת לחלונית אפליקציה. - בדיקת התכונה: מפתחים יכולים לבדוק את ההתנהגות הזו בגרסאות טרום-השקה של Chrome (עד גרסה 129) על ידי הפעלת התכונה באמצעות הדגל:
--enable-features="IndexedDBCompressValuesWithSnappy"
.
העדכון הזה משפר את היעילות של Chrome בניהול ערכים גדולים ב-IndexedDB, ומאפשר לחסוך מקום וזמן בלי לפגוע בביצועים. זהו שיפור משמעותי באופן האחסון של הנתונים והגישה אליהם בדפדפן. הבנת השינויים האלה תאפשר למפתחים ליהנות מהמאמצים המתמשכים לביצוע אופטימיזציה של הביצועים ומנגנוני האחסון של Chrome, וכך להבטיח חוויית משתמש חלקה ויעילה יותר.
תודות
המסמך הזה נבדק על ידי Evan Stade ו-Rachel Andrew.