חותמות זמן של אירועים ברזולוציה גבוהה

ג'ף פוזניק
ג'ף פוזניק

המאפיין timeStamp בממשק Event מציין את השעה שבה התרחש אירוע נתון.

בגרסאות של Chrome בגרסאות שקודמות ל-49, הערך של timeStamp מיוצג בתור DOMTimeStamp, כלומר מספר שלם של אלפיות שנייה מאז תקופת המערכת, בדומה לערך שהוחזר על ידי Date.now().

החל מ-Chrome 49, timeStamp הוא DOMHighResTimeStamp ערך. הערך עדיין הוא מספר של אלפיות שנייה, אבל עם רזולוציה של מיקרו-שנייה, כלומר הוא יכלול רכיב עשרוני. בנוסף, במקום שהערך יהיה יחסי לתקופה, הערך יהיה יחסי ל-PerformanceTiming.navigationStart, כלומר הזמן שבו המשתמש ניווט לדף.

היתרונות של דיוק נוסף של חותמות זמן מופיעות בדוגמאות הבאות:

שיקולים בדפדפנים שונים ושיקולים מדור קודם

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

אם במקום להשוות בין שני ערכים של Event.timeStamp, צריך לבדוק בקוד שלכם כמה זמן התרחש לפני כמה זמן התרחש האירוע, אפשר להשוות את הערך החדש DOMHighResTimeStamp ישירות ל-performance.now(). אם צריך להמיר את Event.timeStamp למספר מוחלט של אלפיות השנייה מאז תקופת המערכת, אפשר לקבל את הערך הזה על ידי הוספת DOMHighResTimeStamp ל-performance.timing.navigationStart.

בשני המקרים, DOMTimeStamp ו-DOMHighResTimeStamp פועלים בצורה שונה, אבל אפשר לפשט את הקוד בדפדפנים שונים באמצעות פונקציית ההמרה הזו, באדיבות Majid Valipour. הפונקציה לוקחת אובייקט Event כפרמטר ומחזירה ערך בדומה ל-DOMHighResTimeStamp, שמוכן להשוואה אל performance.now() או מתווסף ל-performance.timing.navigationStart.