Yerel geliştirme makinenizde işlev yürütme süresi almanız gerekiyorsa , tarayıcınızın profil oluşturma araçlarını veya console.time()
ve gibi konsol komutlarını kullanabilirsiniz console.timeEnd()
.
Tüm modern tarayıcılarda yerleşik JavaScript profiler bulunur. Bu profil kullanıcıları, mevcut kodunuzu değiştirmek zorunda olmadığınız için en doğru ölçümü vermelidir, bu da işlevin yürütme süresini etkileyebilir.
JavaScript'inizin profilini oluşturmak için:
- In Chrome basın F12 basıp Profilleri sekmesi, daha sonra toplayın JavaScript CPU Profili .
- In Firefox , açık / Firebug yükleyin ve tıklayın Profili düğmesi.
- IE 9+ sürümünde F12 tuşuna basın , Komut Dosyası veya Profil Oluşturucu'ya tıklayın (IE sürümünüze bağlı olarak).
Alternatif olarak, geliştirme makinenizdeconsole.time()
ve ile kodunuza enstrümantasyon ekleyebilirsiniz console.timeEnd()
. Firefox11 +, Chrome2 + ve IE11 + 'da desteklenen bu işlevler, başlattığınız / durdurduğunuz zamanlayıcıları bildirir console.time()
. time()
kullanıcı tanımlı bir zamanlayıcı adını bağımsız değişken olarak alır timeEnd()
ve zamanlayıcının başlamasından bu yana yürütme süresini bildirir:
function a() {
console.time("mytimer");
... do stuff ...
var dur = console.timeEnd("myTimer"); // NOTE: dur only works in FF
}
timeEnd()
Çağrıda yalnızca Firefox'un geçen süreyi döndürdüğünü unutmayın . Diğer tarayıcılar sonucu geliştirici konsoluna rapor eder: dönüş değeri timeEnd()
tanımsızdır.
Eğer vahşi doğada işlev yürütme süresi almak istiyorsanız , kodunuzu enstrüman gerekir. Birkaç seçeneğiniz var. Sorgulayarak başlangıç ve bitiş zamanlarını kaydedebilirsiniz new Date().getTime()
:
function a() {
var start = new Date().getTime();
... do stuff ...
var end = new Date().getTime();
var dur = end - start;
}
Ancak, Date
nesne yalnızca milisaniyelik bir çözünürlüğe sahiptir ve herhangi bir işletim sisteminin sistem saati değişikliklerinden etkilenecektir. Modern tarayıcılarda daha iyi bir seçenek var.
Daha iyi bir seçenek, Yüksek Çözünürlüklü Zaman'ı kullanmaktır window.performance.now()
. iki önemli yolla now()
geleneksel olandan daha iyidir Date.getTime()
:
now()
, sayfa gezinmesinin başlangıcından bu yana geçen milisaniye sayısını temsil eden, milisaniye altı çözünürlüğe sahip bir çifttir. Kesirli kısımdaki mikrosaniye sayısını döndürür (örneğin, 1000.123 değeri 1 saniye ve 123 mikrosaniyedir).
now()
monoton olarak artmaktadır. Olarak, bu önemlidir Date.getTime()
olabilir muhtemelen izleyen çağrılarda ileri geri ya da atlamak. Özellikle, işletim sisteminin sistem saati güncellenirse (örn. Atom saati senkronizasyonu) Date.getTime()
da güncellenir. now()
her zaman monoton olarak artması garanti edilir, bu nedenle işletim sisteminin sistem saatinden etkilenmez - her zaman duvar saati zamanı olacaktır (duvar saatinizin atomik olmadığı varsayılarak ...).
now()
Hemen hemen her yerde kullanılabilir new Date().getTime()
, + new Date
andt Date.now()
vardır. Bunun tek istisnası, unix-epoch'a (1970'den bu yana milisaniye sayısı) dayalı olarak Date
ve now()
zamanların karışmaması , sayfa gezinmeniz başladığından bu yana geçen milisaniye sayısıdır (bu yüzden çok daha küçük olacaktır ).Date
now()
Date
İşte nasıl kullanılacağına dair bir örnek now()
:
function a() {
var start = window.performance.now();
... do stuff ...
var end = window.performance.now();
var dur = end - start;
}
now()
Chrome kararlı, Firefox 15+ ve IE10'da desteklenir. Ayrıca çeşitli çoklu dolgular da mevcuttur.
Doğada yürütme süresini ölçmek için bir diğer seçenek UserTiming'dir . UserTiming, benzer şekilde davranır console.time()
ve console.timeEnd()
kullanır, ancak aynı Yüksek Çözünürlüklü Zaman Damgasını now()
kullanır (böylece milisaniyenin altında bir monoton olarak artan bir saat alırsınız) ve zaman damgalarını ve sürelerini PerformanceTimeline'a kaydeder .
UserTiming, işaretler (zaman damgaları) ve ölçümler (süreler) kavramlarına sahiptir . İstediğiniz kadar tanesini tanımlayabilirsiniz ve bunlar PerformanceTimeline üzerinde gösterilir .
Zaman damgasını kaydetmek için arayın mark(startMarkName)
. İlk işaretinizden bu yana geçen süreyi elde etmek için aramanız yeterlidir measure(measurename, startMarkname)
. Daha sonra süre, işaretlerinizin yanı sıra PerformanceTimeline'a kaydedilir.
function a() {
window.performance.mark("start");
... do stuff ...
window.performance.measure("myfunctionduration", "start");
}
// duration is window.performance.getEntriesByName("myfunctionduration", "measure")[0];
UserTiming, IE10 + ve Chrome25 + 'da kullanılabilir. Ayrıca bir poli dolgu da var (yazdım).