คณะทำงาน 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