מחיקת כרטיסיות ב-Chrome – ניסוי שמירת זיכרון

צמצום נפח הזיכרון של Chrome הוא אחד מהעדיפויות הגבוהות ביותר של הצוות השנה. כבר ראינו ירידה של עד 45% בשימוש בזיכרון של Gmail, בזכות שיפורים בתהליך איסוף האשפה של V8, אבל אנחנו רק בתחילת הדרך. אחד מהניסויים הבאים שלנו בנושא שימוש בזיכרון מיועד לאלו שמאוהבים בכרטיסיות (כמוני). הפעולה הזו נקראת ביטול הקשה על Tab.

לא כל הכרטיסיות הפתוחות הן כרטיסיות בשימוש. אם נגמר המקום בזיכרון, Chrome יכול לסגור כרטיסיות ברקע שלא מעניינות אתכם.

התכונה 'ביטול כרטיסיות' זמינה כניסוי ב-Chrome מגרסה 46 ואילך.

רקע

בדרך כלל, תהליך העיבוד של כל כרטיסייה פתוח צורך כ-50MB לכל כרטיסייה, למרות שרוב האנשים משתמשים רק בכרטיסייה אחת בכל פעם. אם יש לכם 10 כרטיסיות פתוחות, המערכת משתמשת ב-450MB לפחות מהזיכרון רק כדי לשמור את המצב של כרטיסיית הרקע. עם הזמן, הדבר עלול להפוך לבלתי נוח.

נפח הזיכרון הנדרש לכל כרטיסייה

אחת מהמטרות שלנו היא לצמצם את השימוש בזיכרון בכרטיסיות שאתם לא משתמשים בהן בפועל. אם בודקים אילו כרטיסיות צורכות את זיכרון המערכת במנהל המשימות של Chrome, רואים שבאמת משתמשים רק באתר אחד או שניים מהאתרים הבאים, בעוד שהכרטיסיות האחרות ברקע לא בשימוש.

נפח הזיכרון הנדרש למנהל המשימות

כאן נכנסת לתמונה האפשרות של ביטול כרטיסיות, שיכולה לעזור לנו לצמצם את השימוש בזיכרון.

מחיקת כרטיסיות שלא בשימוש

כשהמערכת מזהה שהזיכרון במערכת מתחיל להיגמר, היא משחררת באופן אוטומטי כרטיסיות שלא מעניינות אתכם במיוחד. מה המשמעות של 'השלכה'? כרטיסייה שהוצאתם לא נעלמת. אנחנו משביתים אותו, אבל הוא עדיין מופיע בסרגל הכרטיסיות של Chrome. אם תחזרו לכרטיסייה שהוצאתם משימוש, היא תיטען מחדש אחרי שתלחצו עליה. תוכן הטופס, מיקום הגלילה וכו' נשמרים ומוחזרים באותו אופן שבו הם נשמרים ומוחזרים במהלך ניווט בין כרטיסיות קדימה/לאחור.

יש לנו גם תכונה חדשה שמאפשרת לשמור במטמון באופן מקומי את כל המשאבים של הכרטיסיות, וזה עובד מצוין עם השמטת הכרטיסיות כשאתם במצב אופליין. כשהכרטיסייה מופעלת מחדש, אנחנו מציעים לכם לטעון מחדש את הגרסה ששמורה במטמון ונטענה בעבר דרך הרשת. כדי להפעיל טעינה מחדש של דפים מהמטמון, אפשר לנסות ניסוי אחר בקטע chrome://flags/#show-saved-copy.

אתם יכולים לנסות את האפשרות הזו כבר עכשיו. כדי לעשות זאת, מפעילים אותה באמצעות chrome://flags/#enable-tab-discarding ומפעילים מחדש את Chrome. אפשר לקבוע אם ההגדרה הזו מופעלת או מושבתת באותו דף chrome://flags ב-Chrome.

הפעלת האפשרות לצילום מסך של כרטיסייה שנמחקת.
צילום מסך של לחצן ההפעלה מחדש.

בדף החדש שנקרא chrome://discards תוכלו לראות את הכרטיסיות הפתוחות כרגע, ואנחנו מנסים לשתף איתכם תובנות לגבי מידת העניין שלהן (לדעתנו) עבורכם, מהכרטיסייה הכי מעניינת ועד לכרטיסייה הכי פחות מעניינת.

צילום מסך של הדף 'כרטיסיות שהוסרו'.

כדי לבדוק את התכונה, אפשר להמשיך בהתנהגות הגלישה הרגילה עד שהמערכת תעבור למצב של זיכרון נמוך, או להפעיל הטמעה של כרטיסייה מ-about:discards בלחיצה על 'הטמעת הכרטיסייה עכשיו'. הפעולה הזו תסיר את הכרטיסייה האחרונה ברשימה. אפשר גם לבטל כרטיסייה מסוימת מהרשימה בלחיצה על הלחצן 'ביטול' התואם. כרטיסייה שהושמטה תוצג עם הקידומת [Discarded].

צילום מסך לדוגמה של כרטיסייה שנמחקה.

המערכת משליכה כרטיסיות לפי הסדר הבא:

  • דפים פנימיים כמו דף הכרטיסייה החדשה, סימניות וכו'.
  • כרטיסיות שנבחרו לפני הרבה זמן
  • כרטיסיות שנבחרו לאחרונה
  • אפליקציות שפועלות בחלון
  • כרטיסיות מוצמדות
  • הכרטיסייה שנבחרה

הפעלנו את הניסוי בביטול כרטיסיות ב-Chrome Canary ל-Windows ול-Mac OS, והטמעה ב-Linux תתבצע בקרוב.

כרטיסיות מוצמדות נלקחות בחשבון גם כשבודקים אם לסגור כרטיסייה.

השראה: שלום, תליון מצוין

אם המושג'השבתה של כרטיסיות' נשמע לכם מוכר, סביר להניח שפגשתם בתוספים שימושיים ל-Chrome שמציעים גרסה פשוטה יותר של הרעיון הזה, כמו The Great Suspender. מטרת התוסף The Great Suspender היא לצמצם את טביעת הזיכרון ואת השימוש ב-GPU של Chrome על ידי השהיה של כרטיסיות אחרי פרק זמן מותאם אישית של חוסר פעילות.

צילום מסך של Suspender.

בדומה להשמטת כרטיסיות, אפשר לבטל את ההשעיה של כרטיסיות כשצריך לבצע שוב פעולה בהן. התוסף Great Suspender שומר על השם וסמל ה-favicon של כל כרטיסייה, ומציג כרטיסיות מושעות במצב כהה, כך שקל לנווט אליהן שוב בכל שלב.

צילום מסך של סמל האתר של כרטיסיות מושעות.

כרטיסיות ברקע שאני לא משתמש בהן באופן פעיל הושהו, כדי לחסוך בזיכרון. עם זאת, כרטיסיות שאני עדיין משתמש בהן באופן פעיל (GitHub ו-YouTube) עדיין פועלות כרגיל.

למעשה, ניהלנו שיחה נהדרת עם המחבר של התוסף Great Suspender בזמן הפיתוח של השמטת הכרטיסיות, והוא שמח לראות שאנחנו מטפלים בבעיה הזו באופן מקורי בדרכים יעילות יותר ממה שתוסף יכול לעשות, כמו אובדן המצב של פעולות המשתמשים שלא בוצעו.

שיפורים עתידיים: סריאליזציה של כרטיסיות

סריאליזציית הכרטיסיות היא פרויקט עתידי שלדעתנו עשוי להוביל לשיפורים משמעותיים בגישה הנוכחית שלנו לביטול כרטיסיות. הוא לוקח את התוכן של כרטיסייה ב-Chrome וממיר את המצב *הנוכחי* שלה לסדרה של בלובים בינאריים. אפשר להמיר את ה-blob הבינארי הזה ל-tab מאוחר יותר.

המסווג יסדר כמעט את כל מה ש-Chrome, ‏ Blink ו-V8 צריכים כדי לשמור כראוי על כרטיסייה (דבר שתוספים ל-Chrome שעסקו בבעיה הזו לא הצליחו להשיג בקלות בעבר). הסריאליזציה תכלול את הגורמים הרגילים: DOM (עם הרבה WebGL ו-Canvas), CSS והמצב של V8 JavaScript VM.

צילום מסך של רעיון לסריאליזציה

אם אתם משתמשים ב-Android או ב-ChromeOS, יכול להיות שאתם יודעים (בדומה לניסוי בנושא הטמעת כרטיסיות שתואר בפוסט הזה) שאנחנו משביתים באופן אגרסיבי כרטיסיות ברקע כדי להבטיח שהשימוש בזיכרון יהיה נמוך. הבעיה בשיטה שבה טיפלנו בבעיה הזו היא שהכרטיסייה תאבד את *כל* המצב שלה.

כשהאינטראקציה שלכם עם הכרטיסייה תתחדש, נצטרך לטעון אותה מחדש וכל האינטראקציה שלכם איתה תימחק. הבעיה הזו נפתרת על ידי סריאליזציה של הכרטיסייה, כך שתוכלו לחזור כמעט בדיוק למצב שבו הייתם, בלי צורך לחזור לרשת. אנחנו מצפים לשתף מידע נוסף על העבודה הזו במועד מאוחר יותר.

כדאי לנסות את התכונה 'ביטול כרטיסיות' ולספר לנו מה דעתכם

נשמח לדעת אם התכונה הזו מועילה לך ואיך אפשר לשפר אותה. כדאי לנסות את התכונה, להתנסות בה (במיוחד אם אתם אוהבים לאסוף כרטיסיות) ולספר לנו מה דעתכם בתגובות. :) נשמח גם לקבל ממך דיווחים על באגים שתמצא ב-crbug.com.