Milisaniye cinsinden yeterli olmadığında - Performance.now

Paul Irish

Yüksek Çözünürlüklü Zamanlayıcı, WebPerf Çalışma Grubu tarafından Web Platformu'nda +new Date ve yeni Date.now() ile yaptığımızdan daha hassas ölçümlere olanak tanımak için eklenmiştir.

Karşılaştırmak gerekirse, elde edeceğiniz değerler şunlardır:

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

Yukarıdaki iki değerin büyüklük açısından birbirinden çok farklı olduğunu göreceksiniz. performance.now(), söz konusu sayfanın yüklenmeye başlamasından bu yana geçen milisaniye cinsinden bir kayan nokta ölçümüdür (performance.timing.[navigationStart](https://www.w3.org/TR/navigation-timing/#dom-performancetiming-navigationstart) zaman damgası spesifik olmalıdır). Bunun Unix dönemi'nden bu yana geçen milisaniyelik bir süre olduğunu iddia edebilirsiniz, ancak bir web uygulamasının bugün ile 1970 arasındaki mesafeyi bilmesi nadiren gerekir. İki veya daha fazla ölçümü birbiriyle karşılaştıracağınız için bu sayı sayfaya göre kalır.

Monoton zaman

Bunun bir diğer avantajı da zamanın monoton olmasıdır. WebKit mühendisi Tony Gentilcore'un bunu açıklamasına izin verelim:

Kullanım Alanları

Temel bir zaman damgası yerine bu yüksek çözünürlüklü zamanlayıcıyı kullanacağınız birkaç durum vardır:

  • karşılaştırma
  • oyun veya animasyon genel döngü kodu
  • kare hızını hassas bir şekilde hesaplama
  • bir animasyonun veya başka bir zamana dayalı dizinin belirli noktalarında meydana gelen işaretleme eylemleri veya sesleri

Kullanılabildiği yerler

Yüksek çözünürlüklü zamanlayıcı şu anda Chrome'da (Kararlı) window.performance.webkitNow() olarak kullanılabilmektedir ve bu değer genellikle requestAnimationFrame geri çağırma işlevine iletilen yeni bağımsız değişken değerine eşittir. Çok yakında WebKit ön ekini kaldıracak ve bu özellik performance.now() tarihine kadar kullanılabilir olacak. Özellikle Microsoft'tan Jatinder Mann önderliğindeki WebPerfWG, özelliklerinin çok hızlı bir şekilde öne çıkmasını sağlayarak çok başarılı oldu.

Özetle performance.now()...

  • mikrosaniye ile bir çift
  • UNIX dönemine değil, sayfanın navigationStart özelliğine göre
  • sistem saati değiştiğinde sapma olmaz
  • Chrome'un kararlı, Firefox 15 ve sonraki sürümleri ile IE10'da kullanılabilir.