לפני גרסה 91, רזולוציות הטיימר ב-Chrome הוגבלו ל-5 מיקרו-שניות במחשב, שבו בידוד האתר מופעל, ול-100 מיקרו-שניות ב-Android, שבו הוא לא מופעל.
החל מגרסה 91, בעקבות שינוי במפרט, Chrome יגביל את הרזולוציה של שעונים מפורשים (performance.now()
, performance.timeOrigin
וממשקי API אחרים למדידת ביצועים שחשפו את DOMHighResTimestamps
) ל-100 מיקרו-שניות בפלטפורמות השונות.
הפעלת בידוד בין מקורות מאפשרת לאתרים להפחית את ההגבלה ל-5 מיקרו-שניות, ללא קשר לפלטפורמה.
גישה דומה הוצגה ב-SharedArrayBuffer
, שבה מאפשרים בידוד בין מקורות שונים כדי לקבל יכולות חזקות יותר.
בידוד בין מקורות הוא מצב שבו דף אינטרנט מבודד ממקורות אחרים, מלבד מקורות שהביעו הסכמה.
האם עליי לעשות משהו בקשר לזה?
סביר להניח שלא. הערך של performance.now()
הוגבל לרזולוציות גסות יותר באופן משמעותי בדפדפנים אחרים (לדוגמה, מילישניות אחת = 0.001 שניות), כך שלא היית צריך להסתמך על הרזולוציה הנוכחית בכל מקרה.
עם זאת, אם אתם רוצים ליהנות מרזולוציה גבוהה יותר של שעונים, למשל למדידת ביצועים מדויקת יותר, תצטרכו לוודא שהאתר מבודד בין מקורות. כך תקבלו רזולוציה טובה יותר ב-Chrome ובדפדפנים אחרים המבוססים על Chromium, וגם ב-Firefox.
מה הקשר בין שעונים לבין בידוד בין מקורות (CORS)?
כשהתגלה הבאג Spectre, יצרני הדפדפנים החליטו להגביל את הזמנים לפתרון בעיות ברזולוציות גסות יותר (וגם את הזמינות של SharedArrayBuffers שאפשר להשתמש בהם כזמנים משתמעים). הסיבה לכך היא שהתקפות Spectre והתקפות דומות של ביצוע ספקולטיבי מסתמכות על שעונים כדי למדוד את הזמן שלוקח לבצע פעולות מסוימות, ואז הן מנחשות את התוכן של זיכרון התהליך.
אפשר לבצע התקפות של ביצוע ספקולטיבי באמצעות טיימרים גסים, אבל טיימרים ברזולוציה גבוהה יכולים להאיץ אותן. כדי לצמצם את הסיכון ולהפעיל מחדש את הפונקציות האלה, Chrome השתמש בארכיטקטורה של בידוד אתר וגם במנגנונים אחרים, אבל הפעולה הזו מוגבלת לפלטפורמות למחשב ולדפדפני Chromium בלבד. לא ממש אידיאלי ש-APIs יתבססו על ארכיטקטורת הדפדפן הבסיסית.
בידוד ממקורות שונים מספק את הבסיס הסטנדרטי לדפדפנים להריץ דפים בסביבה מבודדת, כך שהם לא יכולים לטעון משאבים ממקורות שונים ללא הסכמה, ולכן הם לא נמצאים בסיכון להתקפת Spectre.
בעזרת בידוד בין מקורות, אנחנו יכולים עכשיו לאפשר לדפים לגשת למעכבים ברזולוציה גבוהה, ל-SharedArrayBuffer
ולממשקי API אחרים שאינם בטוחים לחשוף בתהליכים שיכולים לקרוא נתונים שרירותיים ממקורות שונים.
למידע נוסף על הרקע של השינוי הזה, אפשר לקרוא את המאמר למה צריך 'מבודד בין מקורות' כדי ליהנות מתכונות מתקדמות.
תמונת השער של Linda Perez Johannessen מ-Unsplash.