เวลาในหน่วยมิลลิวินาทีไม่เพียงพอ - performance.now

คณะทำงาน WebPerf ได้เพิ่มตัวจับเวลาความละเอียดสูงเพื่อให้การวัดผลในแพลตฟอร์มเว็บมีความแม่นยํามากกว่าที่เรามีใน +new Date และ Date.now() รุ่นใหม่

ดังนั้นเพื่อนำมาเปรียบเทียบกัน ต่อไปนี้เป็นค่าประเภทต่างๆ ที่คุณจะได้รับกลับมา

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

คุณจะเห็นว่าค่า 2 ค่าข้างต้นมีลำดับขนาดต่างกัน performance.now() คือการวัดค่าทศนิยมเป็นมิลลิวินาทีตั้งแต่หน้านั้นเริ่มโหลด (การประทับเวลา performance.timing.[navigationStart](https://www.w3.org/TR/navigation-timing/#dom-performancetiming-navigationstart) เป็นค่าที่เฉพาะเจาะจง) คุณอาจโต้แย้งได้ว่าตัวเลขอาจเป็นมิลลิวินาทีนับตั้งแต่ unix Epoch แต่เว็บแอปไม่จำเป็นต้องทราบระยะทางระหว่างตอนนี้จนถึงปี 1970 ตัวเลขนี้จะยังสัมพันธ์กับหน้าเว็บ เนื่องจากคุณกำลังเปรียบเทียบการวัด 2 รายการขึ้นไป

เวลาเดี่ยว

ประโยชน์เพิ่มเติมอีกอย่างคือคุณสามารถอาศัยเวลาที่ไม่ซับซ้อน ให้ Tony Gentillcore วิศวกร WebKit อธิบายเรื่องนี้

กรณีการใช้งาน

มี 2-3 สถานการณ์ที่คุณจะใช้ตัวจับเวลาความละเอียดสูงนี้แทนการจับการประทับเวลาแบบพื้นฐานได้

  • การเปรียบเทียบ
  • โค้ดการลูปของเกมหรือภาพเคลื่อนไหว
  • คำนวณอัตราเฟรมด้วยความแม่นยำ
  • การดำเนินการเริ่มการทำงานหรือเสียงที่เกิดขึ้นที่จุดที่เจาะจงในภาพเคลื่อนไหวหรือลำดับตามเวลาอื่นๆ

ความพร้อมใช้งาน

ปัจจุบันตัวจับเวลาความละเอียดสูงมีให้ใช้งานใน Chrome (เสถียร) ในรูปแบบ window.performance.webkitNow() และโดยทั่วไปค่านี้มักจะเท่ากับค่าอาร์กิวเมนต์ใหม่ที่ส่งผ่านไปยังโค้ดเรียกกลับ requestAnimationFrame ในเร็วๆ นี้ WebKit จะยกเลิกคำนำหน้า และจะใช้ได้จนถึงวันที่ performance.now() โดยเฉพาะอย่างยิ่ง WebPerfWG ซึ่งนำโดย Jatinder Mann จาก Microsoft นั้นประสบความสำเร็จอย่างมากในการยกเลิกคำนำหน้าฟีเจอร์ได้อย่างรวดเร็ว.

โดยสรุปแล้ว performance.now() คือ...

  • ทศนิยม 2 ตำแหน่งที่มีไมโครวินาทีในเศษส่วน
  • ที่สัมพันธ์กับ navigationStart ของหน้าเว็บ แทนที่จะเป็น Epoch ของ UNIX
  • ไม่เอียงเมื่อเวลาของระบบเปลี่ยนแปลง
  • ซึ่งมีให้ใช้งานใน Chrome เวอร์ชันเสถียร, Firefox 15 ขึ้นไป และ IE10