คณะทำงาน WebPerf ได้เพิ่มตัวจับเวลาความละเอียดสูงเพื่อให้การวัดในแพลตฟอร์มเว็บมีความแม่นยำมากกว่าที่เราเคยมีใน +new Date
และ Date.now()
เวอร์ชันใหม่
ต่อไปนี้คือค่าประเภทต่างๆ ที่คุณจะได้รับเพื่อเปรียบเทียบ
Date.now() // 1337376068250
performance.now() // 20303.427000007
คุณจะเห็นค่า 2 ค่าข้างต้นแตกต่างกันหลายลำดับขั้น performance.now()
คือการวัดค่ามิลลิวินาทีแบบทศนิยมลอยตัวนับตั้งแต่หน้าเว็บนั้นๆ เริ่มโหลด (timeStamp ของ performance.timing.[navigationStart](https://www.w3.org/TR/navigation-timing/#dom-performancetiming-navigationstart)
นั่นเอง) คุณอาจโต้แย้งว่าอาจเป็นจํานวนมิลลิวินาทีนับจากยุค Unix แต่เว็บแอปแทบไม่จําเป็นต้องทราบระยะห่างระหว่างปัจจุบันกับปี 1970 ตัวเลขนี้จะยังคงสัมพันธ์กับหน้าเว็บเนื่องจากคุณจะเปรียบเทียบการวัดผลตั้งแต่ 2 รายการขึ้นไป
เวลาแบบโมโนโทนิก
ข้อดีอีกอย่างหนึ่งคือคุณสามารถไว้วางใจได้ว่าเวลาจะเป็นแบบ Monotonic เรามาฟังคำอธิบายจาก Tony Gentilcore วิศวกร WebKit
กรณีการใช้งาน
สถานการณ์ที่คุณควรใช้ตัวจับเวลาความละเอียดสูงนี้แทนการจับการประทับเวลาพื้นฐานมีดังนี้
- การเปรียบเทียบ
- โค้ด Runloop ของเกมหรือภาพเคลื่อนไหว
- การคำนวณอัตราเฟรมอย่างแม่นยำ
- การกำหนดเวลาให้การดำเนินการหรือเสียงเกิดขึ้นที่จุดใดจุดหนึ่งในภาพเคลื่อนไหวหรือลำดับอื่นๆ ตามเวลา
ความพร้อมใช้งาน
ปัจจุบันตัวจับเวลาความละเอียดสูงพร้อมใช้งานใน Chrome (เวอร์ชันเสถียร) เป็น window.performance.webkitNow()
และโดยทั่วไปค่านี้จะเท่ากับค่าอาร์กิวเมนต์ใหม่ที่ส่งไปยังการเรียกกลับ requestAnimationFrame ในเร็วๆ นี้ WebKit จะยกเลิกคำนำหน้าและจะพร้อมใช้งานผ่าน performance.now()
โดยเฉพาะอย่างยิ่ง WebPerfWG ซึ่งนำโดย Jatinder Mann จาก Microsoft ประสบความสำเร็จอย่างมากในการนำคำนำหน้าออกของฟีเจอร์ต่างๆ อย่างรวดเร็ว
โดยสรุป performance.now()
คือ...
- ตัวเลขทศนิยมแบบ Double ที่มีไมโครวินาที
- สัมพันธ์กับ
navigationStart
ของหน้าเว็บ ไม่ใช่กับยุค UNIX - ไม่บิดเบือนเมื่อเวลาของระบบเปลี่ยนแปลง
- ใช้ได้ใน Chrome เวอร์ชันเสถียร, Firefox 15 ขึ้นไป และ IE10