عندما لا تكون المللي ثانية كافية - Performance.now

أضافت مجموعة عمل WebPerf موقّت الدقة العالية للسماح بإجراء قياسات أكثر دقة في Web Platform مقارنةً بما كان متاحًا في +new Date والإصدار Date.now() الأحدث.

للمقارنة فقط، إليك أنواع القيم التي ستحصل عليها:

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

ستلاحظ أنّ القيمتَين أعلاه تختلفان بعدّة orders of magnitude. performance.now() هو قياس بالمللي ثانية بنقطة عائمة منذ بدء تحميل هذه الصفحة المحدّدة (الطابع الزمني performance.timing.[navigationStart](https://www.w3.org/TR/navigation-timing/#dom-performancetiming-navigationstart) على وجه التحديد). يمكنك القول إنّه كان من الممكن أن يكون عدد المللي ثانية منذ حقبة Unix، ولكن نادرًا ما يحتاج تطبيق الويب إلى معرفة المسافة بين الوقت الحالي وعام 1970. يظلّ هذا الرقم نسبيًا للصفحة لأنّك ستقارن بين قياسَين أو أكثر.

الوقت الثابت

وهناك فائدة أخرى إضافية هنا وهي أنّه يمكنك الاعتماد على الوقت الذي يكون أحاديًا. لنترك المهندس في WebKit "توني جنتيلكور" يوضّح هذه المشكلة:

حالات الاستخدام

هناك بعض الحالات التي يمكنك فيها استخدام الموقّت عالي الدقة هذا بدلاً من الحصول على طابع زمني أساسي:

  • قياس الأداء
  • رمز حلقة تشغيل اللعبة أو الصورة المتحركة
  • احتساب معدّل عرض اللقطات بدقة
  • تشغيل الإجراءات أو المحتوى الصوتي في نقاط معيّنة في صورة متحركة أو تسلسل آخر يستند إلى الوقت

مدى التوفّر

يتوفّر حاليًا الموقّت عالي الدقة في Chrome (الإصدار الثابت) على النحو التالي: ‎window.performance.webkitNow()، وهذه القيمة تساوي بشكل عام قيمة الوسيطة الجديدة التي تم تمريرها إلى دالة الاستدعاء requestAnimationFrame. قريبًا، ستتخلّص WebKit من بادئة ‎WebKit، وسيصبح هذا الخيار متاحًا من خلال ‎performance.now(). حققت مجموعة WebPerfWG على وجه الخصوص، بقيادة Jatinder Mann من Microsoft، نجاحًا كبيرًا في إزالة البادئة من الميزات بسرعة كبيرة.

باختصار، performance.now() هو...

  • عدد مزدوج يتضمن ميكروثانية في الجزء الكسري
  • بالنسبة إلى navigationStart الصفحة بدلاً من حقبة UNIX
  • لا يتم تحريفها عند تغيير وقت النظام
  • تتوفّر هذه الميزة في الإصدار الثابت من Chrome وFirefox 15 والإصدارات الأحدث وInternet Explorer 10.