Rumah > hujung hadapan web > tutorial js > Mengapakah `setInterval()` dan `setTimeout()` JavaScript Tidak Tepat, dan Bagaimana Saya Boleh Mencipta Pemasa yang Lebih Tepat?

Mengapakah `setInterval()` dan `setTimeout()` JavaScript Tidak Tepat, dan Bagaimana Saya Boleh Mencipta Pemasa yang Lebih Tepat?

DDD
Lepaskan: 2024-12-12 14:26:11
asal
904 orang telah melayarinya

Why Are JavaScript's `setInterval()` and `setTimeout()` Inaccurate, and How Can I Create a More Precise Timer?

Mencipta Pemasa Tepat dalam JavaScript

Pemasa adalah penting dalam mana-mana persekitaran pengaturcaraan, membolehkan pelaksanaan tugas yang dijadualkan. Walau bagaimanapun, pemasa lalai JavaScript berdasarkan setInterval() dan setTimeout() selalunya boleh menjadi tidak tepat. Memahami sebab ketidaktepatan ini adalah penting bagi pembangun yang mencari pemasaan ketepatan.

Isu Ketepatan dengan setInterval() dan setTimeout()

Ketidaktepatan setInterval() dan setTimeout () terletak pada ketepatannya yang tidak dijamin. Fungsi ini tidak dijamin untuk dilaksanakan pada selang masa yang tetap tetapi mungkin ketinggalan atau hanyut dari semasa ke semasa. Batasan yang wujud ini berpunca daripada fakta bahawa JavaScript ialah bahasa satu-benang, bermakna semua tugasan mesti berkongsi urutan pelaksanaan yang sama.

Mencipta Pemasa yang Tepat

Kepada mencipta pemasa yang tepat, pembangun JavaScript boleh memanfaatkan objek Tarikh, yang menyediakan pengendalian masa yang tepat milisaat. Dengan mengasaskan kefungsian pemasa pada pengiraan masa nyata dan bukannya bergantung pada selang setInterval(), pembangun boleh mencapai ketepatan yang lebih tinggi.

Untuk pemasa atau jam yang mudah, menjejak masa yang berlalu secara eksplisit ialah penyelesaian yang berkesan:

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
Salin selepas log masuk

Pendekatan ini menjejaki perbezaan masa untuk memberikan hasil yang lebih tepat. Walau bagaimanapun, ia boleh memperkenalkan lonjakan nilai sekali-sekala disebabkan potensi ketinggalan. Mengemas kini dengan lebih kerap, seperti setiap 100ms, boleh membantu mengurangkan lompatan ini.

Untuk senario yang lebih maju, apabila selang yang stabil dan bebas hanyut diperlukan, pemasa laras kendiri adalah pilihan yang berdaya maju. Strategi ini menyesuaikan tamat masa secara dinamik berdasarkan masa berlalu sebenar, memastikan jadual pelaksanaan yang konsisten dan tepat.

Atas ialah kandungan terperinci Mengapakah `setInterval()` dan `setTimeout()` JavaScript Tidak Tepat, dan Bagaimana Saya Boleh Mencipta Pemasa yang Lebih Tepat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan