Apakah ada alternatif dalam JavaScript untuk mendapatkan waktu dalam milidetik menggunakan objek tanggal, atau setidaknya cara untuk menggunakan kembali objek itu, tanpa harus membuat instance objek baru setiap kali saya perlu mendapatkan nilai ini? Saya menanyakan ini karena saya mencoba membuat mesin gim sederhana dalam JavaScript, dan ketika menghitung "delta frame time", saya harus membuat objek Date baru setiap frame. Meskipun saya tidak terlalu khawatir tentang implikasi kinerja ini, saya mengalami beberapa masalah dengan keandalan waktu yang tepat dikembalikan oleh objek ini.
Saya mendapatkan "lompatan" aneh dalam animasi, setiap detik atau lebih, dan saya tidak yakin apakah ini terkait dengan JavaScript's Garbage Collection atau batasan objek Date saat memperbarui dengan sangat cepat. Jika saya mengatur nilai delta ke beberapa konstanta, maka animasi jika mulus, jadi saya cukup yakin ini "melompat" terkait dengan cara saya mendapatkan waktu.
Satu-satunya kode yang relevan yang dapat saya berikan adalah cara saya menghitung waktu delta:
prevTime = curTime;
curTime = (new Date()).getTime();
deltaTime = curTime - prevTime;
Saat menghitung pergerakan / animasi saya mengalikan nilai konstan dengan waktu delta.
Jika tidak ada cara untuk menghindari mendapatkan waktu dalam milidetik dengan menggunakan objek Date, akankah fungsi yang menambah variabel (menjadi waktu yang berlalu dalam milidetik sejak permainan dimulai), dan yang disebut menggunakan fungsi SetTimer pada tingkat sekali setiap milidetik menjadi alternatif yang efisien dan andal?
Sunting: Saya telah menguji sekarang kode saya di browser yang berbeda dan tampaknya "lompatan" ini benar-benar hanya terlihat di Chrome, bukan di Firefox. Tapi alangkah baiknya jika ada metode yang bisa digunakan di kedua browser.
Date.getMillisecondshanya mengembalikan milidetik dalam detik saat ini, yaitu 0 hingga 999? Anda tidak menggunakan fungsi ini dalam contoh Anda, tetapi mungkin sedang digunakan di tempat lain, atau pada cabang yang berbeda?