Jika milidetik tidak cukup - performance.now

Timer Resolusi Tinggi ditambahkan oleh WebPerf Working Group untuk memungkinkan pengukuran di Platform Web yang lebih presisi daripada yang kita miliki dengan +new Date dan Date.now() yang lebih baru.

Jadi, untuk membandingkan, berikut adalah jenis nilai yang akan Anda dapatkan:

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

Anda akan melihat bahwa kedua nilai di atas memiliki perbedaan yang sangat besar. performance.now() adalah pengukuran milidetik floating point sejak halaman tertentu mulai dimuat (stempel waktu performance.timing.[navigationStart](https://www.w3.org/TR/navigation-timing/#dom-performancetiming-navigationstart) secara spesifik). Anda dapat berpendapat bahwa itu bisa jadi jumlah milidetik sejak epoch Unix, tetapi jarang sekali aplikasi web perlu mengetahui jarak antara sekarang dan tahun 1970. Angka ini tetap relatif terhadap halaman karena Anda akan membandingkan dua atau beberapa pengukuran satu sama lain.

Waktu monoton

Manfaat tambahan lainnya di sini adalah Anda dapat mengandalkan waktu yang monoton. Mari kita dengar penjelasan engineer WebKit, Tony Gentilcore:

Kasus Penggunaan

Ada beberapa situasi saat Anda akan menggunakan timer resolusi tinggi ini, bukan mengambil stempel waktu dasar:

  • benchmark
  • kode runloop game atau animasi
  • menghitung kecepatan frame dengan presisi
  • memberi isyarat tindakan atau audio agar terjadi pada titik tertentu dalam animasi atau urutan berbasis waktu lainnya

Ketersediaan

Timer resolusi tinggi saat ini tersedia di Chrome (Stabil) sebagai window.performance.webkitNow(), dan nilai ini umumnya sama dengan nilai argumen baru yang diteruskan ke callback requestAnimationFrame. Dalam waktu dekat, WebKit akan menghapus awalan dan ini akan tersedia melalui performance.now(). WebPerfWG secara khusus, yang dipimpin oleh Jatinder Mann dari Microsoft, telah sangat berhasil menghapus awalan fitur mereka dengan cukup cepat.

Ringkasnya, performance.now() adalah...

  • bilangan ganda dengan mikrodetik dalam pecahan
  • relatif terhadap navigationStart halaman, bukan terhadap epoch UNIX
  • tidak terdistorsi saat waktu sistem berubah
  • tersedia di Chrome stabil, Firefox 15+, dan IE10.