כשאלפיות שנייה לא מספיקות – performance.now

טיימר ברזולוציה גבוהה נוסף על ידי קבוצת העבודה של WebPerf כדי לאפשר מדידה מדויקת יותר בפלטפורמת האינטרנט ממה שהייתה לנו עם +new Date והגרסה החדשה יותר של Date.now().

כדי להשוות, הנה סוגי הערכים שתוכל לקבל:

Date.now()         //  1337376068250
performance.now()  //  20303.427000007

תוכלו לראות ששני הערכים שלמעלה הם סדרי גודל שונים. performance.now() הוא מדידה של אלפיות השנייה של נקודה צפה אחרי שהדף הספציפי הזה נטען (חותמת הזמן של performance.timing.[navigationStart](https://www.w3.org/TR/navigation-timing/#dom-performancetiming-navigationstart) היא ספציפית). אפשר לטעון שהיו אלפיות השנייה מספר אלפיות השנייה מאז ראשית זמן יוניקס [Unix epoch], אבל לעיתים רחוקות אפליקציית אינטרנט צריכה לדעת את המרחק בין היום הנוכחי לבין 1970. מספר זה נשאר ביחס לדף מפני שתשוו בין שתי מדידות או יותר זו מול זו.

זמן מונוטוני

יתרון נוסף נוסף כאן הוא שאתם יכולים להסתמך על הזמן להיות מונוטוני. בואו נראה שמהנדס WebKit, טוני ג'נטילקור, יסביר זאת:

תרחישים לדוגמה

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

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

זמינות

הטיימר ברזולוציה הגבוהה זמין כרגע ב-Chrome (יציב) כ-window.performance.webkitNow(), והערך הזה בדרך כלל שווה לערך הארגומנט החדש שמועבר אל הקריאה החוזרת של requestAnimationFrame. בקרוב, התחילית WebKit תושמט והאפשרות הזו תהיה זמינה דרך performance.now(). ה-WebPerfWG בפרט, בהובלת ג'אטינדר מאן מ-Microsoft, הצליח מאוד לבטל את התחילית של התכונות שלו במהירות.

לסיכום, performance.now() הוא...

  • כפול עם מיליוניות השנייה בשבר
  • ביחס ל-navigationStart של הדף ולא לתקופה של UNIX
  • לא תהיה הטיה כשזמן המערכת משתנה
  • זמין ב-Chrome יציב, ב-Firefox 15 ואילך וב-IE10.