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.
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.
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
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!