Rumah >hujung hadapan web >tutorial js >Bagaimanakah Saya Boleh Mencipta Pemasa JavaScript Tepat Yang Mengelakkan Hanyut?

Bagaimanakah Saya Boleh Mencipta Pemasa JavaScript Tepat Yang Mengelakkan Hanyut?

Linda Hamilton
Linda Hamiltonasal
2024-12-14 16:01:12529semak imbas

How Can I Create Accurate JavaScript Timers That Avoid Drifting?

Mencipta Pemasa JavaScript yang Tepat

Pemasa memainkan peranan penting dalam JavaScript untuk menjadualkan tugas dan melaksanakan fungsi masa nyata. Walau bagaimanapun, memastikan ketepatan pemasa boleh menjadi mencabar kerana sifat tak segerak pelaksanaan JavaScript.

Ketidaktepatan setInterval/setTimeout

Coretan kod yang anda berikan menggunakan fungsi setInterval untuk menambah pembilang setiap kedua. Walau bagaimanapun, anda memerhatikan bahawa selepas 3600 saat, kaunter hanya mencapai kira-kira 3500 saat. Ini kerana setInterval dan setTimeout tidak semestinya tepat. Mereka terdedah kepada kelewatan dan hanyut dari semasa ke semasa.

Pemasa Tepat dengan Objek Tarikh

Untuk mencipta pemasa yang tepat, anda disyorkan untuk menggunakan objek Tarikh sebaliknya. Objek Tarikh membolehkan anda memperoleh masa semasa dengan ketepatan milisaat. Anda boleh mendasarkan logik pemasa anda pada perbezaan antara masa semasa dan masa mula, seperti:

var start = Date.now();
setInterval(function() {
    var delta = Date.now() - start; // milliseconds elapsed since start
    ...
    output(Math.floor(delta / 1000)); // in seconds
}, 1000); // update about every second

Pemasa Penyesuaian Kendiri

Untuk aplikasi pemasa yang memerlukan selang tetap tanpa hanyut , pemasa laras sendiri ialah pilihan yang lebih baik. Mereka melaraskan kelewatan antara tamat masa secara dinamik berdasarkan masa berlalu sebenar. Pendekatan ini memastikan pemasa kekal di landasan:

var interval = 1000; // ms
var expected = Date.now() + interval;
setTimeout(step, interval);
function step() {
    var dt = Date.now() - expected; // the drift (positive for overshooting)
    ... // do what is to be done
    expected += interval;
    setTimeout(step, Math.max(0, interval - dt)); // take into account drift
}

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mencipta Pemasa JavaScript Tepat Yang Mengelakkan Hanyut?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn