عندما لا تكون المللي ثانية كافية - 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) محددًا). يمكنك القول إن ذلك كان من الممكن أن يكون عدد المللي ثانية منذ حقبة يونكس، ولكن نادرًا ما يحتاج تطبيق الويب إلى معرفة المسافة من الآن وحتى عام 1970. يظل هذا الرقم نسبةً إلى الصفحة لأنك ستقارن مقياسين أو أكثر ببعضهما البعض.

زمن رتيب

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

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

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

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

مدى التوفّر

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

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

  • بمقدار مضاعف بالميكرو ثانية في العمود الكسري
  • بالنسبة إلى navigationStart من الصفحة بدلاً من حقبة UNIX
  • لا ينحرف عندما يتغير وقت النظام
  • متوفرة في إصدار Chrome الثابت، وFirefox 15 والإصدارات الأحدث، وIE10.