🛝Toolio
Tentang Kontak

⏱️ Stopwatch Online dengan Timer Lap

Tekan tombol Mulai dan alat ini tidak benar-benar menambahkan potongan kecil waktu selama tiga puluh milidetik. Alat ini mencatat bacaan tepat dari performance.now() pada saat Anda menekan tombol Mulai, lalu setiap kali terjadi penggambaran ulang, alat ini mengurangkan angka yang disimpan dari angka saat ini untuk mendapatkan waktu yang telah berlalu — dihitung ulang dari awal, bukan diakumulasikan. Perbedaan ini penting karena browser dengan sengaja memperlambat setInterval di tab latar belakang untuk menghemat baterai, yang merupakan cara klasik timer buatan sendiri mengalami penyimpangan atau kehilangan detik. Karena stopwatch ini selalu menghitung angka dari perbedaan timestamp, bukan menghitung jumlah tick yang sebenarnya terjadi, waktu yang ditampilkan kembali ke nilai yang benar saat Anda kembali ke tab, bahkan setelah beberapa menit berada di tab lain.

Stopwatch adalah timer lari gratis di browser yang melacak waktu yang telah berlalu dengan membandingkan jam performance.now() monotonik dengan timestamp awal yang disimpan, bukan dengan menghitung jumlah tick dari setInterval, sehingga angka yang ditampilkan tetap akurat bahkan ketika browser memperlambat pembaruan layar di tab tersebut.

00:00.00

Privat sejak awal. Alat ini berjalan sepenuhnya di browser Anda — tidak ada yang Anda masukkan diunggah atau disimpan, dan bisa dipakai offline.

Tentang

Di bawah permukaan, terdapat tiga bagian status: nilai 'elapsed' dalam milidetik yang diakumulasikan, 'startAt' yang merupakan snapshot dari 'performance.now()' yang diambil saat Anda menekan tombol Mulai, dan flag boolean 'running'. Fungsi yang menghasilkan angka di layar adalah sederhana: 'elapsed' ditambahkan dengan perbedaan antara waktu sekarang dan 'startAt' jika sedang berjalan. Fungsi tersebut dipanggil setiap 30 milidetik hanya untuk menggambar ulang tampilan — interval itu sendiri tidak memiliki informasi waktu, hanya sebagai pemicu pembaruan. Itulah cara yang benar untuk membangun stopwatch, dan ini secara langsung menghindari bug umum di mana timer menambahkan penambahan tetap setiap tick dan perlahan menyimpang setelah tick tertunda, dilewati, atau digabungkan.

Pilihan desain ini juga yang terjadi ketika Anda beralih ke tab lain. Browser memperlambat timer di tab latar belakang untuk menghemat CPU dan baterai — setInterval yang diatur setiap 30ms dapat tertunda hingga satu detik atau lebih lambat saat tab tidak terlihat. Di stopwatch ini, hal itu hanya memengaruhi seberapa sering angka di layar diperbarui; matematika dasar (timestamp saat ini dikurangi timestamp awal, ditambah apa pun yang sudah terakumulasi) tidak peduli seberapa banyak pembaruan yang dilewati. Kembali ke tab dan pembaruan berikutnya langsung menampilkan waktu yang telah berlalu yang benar — tidak ada kehilangan atau penambahan waktu akibat perlambatan, hanya kelancaran tampilan saat Anda melihat sesuatu yang lain.

Menggunakan 'performance.now()' alih-alih 'Date.now()' juga merupakan primitif yang tepat untuk pekerjaan ini, bukan detail insidental. 'Date.now()' mencerminkan jam dinding sistem Anda, dan jam dinding bisa melompat — laptop yang bangun dari tidur dan sinkronisasi dengan server NTP, perubahan jam manual, atau penyesuaian perubahan jam musim bisa membuat 'Date.now()' melompat maju atau bahkan mundur di tengah sesi. 'performance.now()' didefinisikan sebagai jam monotonik: hanya naik secara terus-menerus dengan laju yang stabil dan tidak terpengaruh oleh koreksi tersebut, yang merupakan jaminan yang diperlukan oleh stopwatch dan tidak dimiliki oleh timer jam dinding biasa.

Keterbatasan jujur adalah ketahanan, dan tidak ada. Build ini menyimpan 'elapsed' dan array 'laps' sebagai variabel JavaScript biasa di memori halaman — tidak ada panggilan apapun di sumber ke localStorage atau ke helper 'Playground.store()' milik situs ini yang digunakan alat Toolio lain untuk bertahan setelah reload. Artinya, memuat ulang halaman, menutup tab, atau mengklik ke alat lain akan menghapus waktu yang sedang berjalan dan setiap lari yang tercatat secara instan dan permanen. Tidak ada "lanjutkan sesi terakhir", tidak ada sinkronisasi antar perangkat, dan tidak ada yang bisa disimpan, karena tidak ada yang pernah ditulis ke penyimpanan sejak awal. Jika riwayat lari benar-benar penting bagi Anda — log latihan, set waktu presentasi — salin angka tersebut atau ambil screenshot sebelum Anda beralih, karena halaman ini tidak akan mengingatnya untuk Anda.

Cara pakai

  1. Klik tombol "Mulai" — tombol tersebut langsung berubah label menjadi "Jeda" dan jam di layar mulai naik secara real-time, dengan pembaruan setiap 30 milidetik.
  2. Klik tombol "Lari" kapan saja saat sedang berjalan untuk mengambil snapshot waktu yang telah berlalu; entri baru akan ditampilkan di bagian atas daftar lari dan menampilkan kedua angka: split (waktu sejak lari sebelumnya) dan total akumulatif.
  3. Klik tombol yang sama lagi, sekarang berlabel "Jeda", untuk membekukan tampilan — waktu yang telah berlalu tetap disimpan secara internal, tidak ada yang terhilang, dan tombol kembali ke label "Mulai".
  4. Klik "Mulai" sekali lagi untuk melanjutkan perhitungan dari titik di mana Anda meninggalkannya, bukan dari nol.
  5. Klik "Reset" untuk mengembalikan tampilan ke nol, menghapus setiap lari yang tercatat, dan mengembalikan kedua tombol ke label awalnya — ini juga satu-satunya cara untuk memulai sesi baru, karena tidak ada fitur simpan untuk melindungi sesi lama terlebih dahulu.

FAQ

Bagaimana stopwatch ini sebenarnya mengukur waktu di bawah permukaan?
Alat ini membaca 'performance.now()' sekali, tepat saat Anda menekan tombol Mulai, dan menyimpan angka tersebut. Setelah itu, nilai di layar hanya "waktu yang sudah terakumulasi" ditambah "performance.now() saat ini dikurangi timestamp awal yang disimpan" — dihitung ulang setiap 30ms saat pembaruan terjadi. Alat ini tidak pernah hanya menambahkan +30ms tetap ke total yang sedang berjalan setiap tick, yang merupakan cara pintas yang membuat banyak timer buatan sendiri perlahan menyimpang dari sinkronisasi.
Apa yang terjadi dengan waktu jika saya beralih ke tab browser lain saat stopwatch sedang berjalan?
Tab latar belakang akan diperlambat — browser dapat menunda setInterval yang diatur setiap 30ms hingga sekali per detik atau lebih lambat untuk menghemat CPU dan baterai, sehingga angka di layar mungkin terlihat terhenti atau melompat saat Anda berada di tab lain. Namun karena stopwatch ini selalu menghitung waktu yang telah berlalu sebagai perbedaan timestamp, bukan menghitung jumlah tick yang terjadi, kembali ke tab membuat pembaruan berikutnya menampilkan waktu yang benar secara tepat. Anda tidak kehilangan atau menambahkan waktu akibat perlambatan — hanya kelancaran visual yang terganggu saat Anda tidak melihatnya.
Mengapa menggunakan performance.now() alih-alih Date.now() — apakah ini benar-benar penting?
Ya. 'Date.now()' mencerminkan jam dinding sistem Anda, yang bisa melompat maju atau mundur — misalnya setelah laptop bangun dari tidur dan sinkronisasi dengan server NTP, atau jika jam sistem diubah secara manual. 'performance.now()' adalah jam monotonik yang hanya naik secara terus-menerus dengan laju yang stabil dan tidak terpengaruh oleh koreksi tersebut, yang merupakan sifat yang diperlukan oleh stopwatch dan build ini menggunakan yang benar untuk itu.
Apakah alat ini menyimpan waktu yang telah berlalu atau riwayat lari saya di tempat lain?
Tidak — dan berbeda dengan alat Toolio lainnya, alat ini sama sekali tidak menggunakan localStorage browser untuk data ini. Segala sesuatu yang Anda lihat hanya ada di memori halaman selama tab tertentu tetap terbuka. Segarkan halaman, tutup tab, atau navigasikan ke alat lain, dan waktu yang telah berlalu serta setiap lari Anda akan hilang selamanya; tidak ada undo dan tidak ada auto-save, karena tidak ada yang pernah ditulis ke penyimpanan sejak awal. Salin angka tersebut atau ambil screenshot sebelum Anda pergi jika Anda membutuhkan catatan.
Apakah ada batas jumlah lari, dan apa arti dua angka di setiap baris lari?
Tidak ada batas — daftar hanya terus bertambah, dengan lari terbaru dipasang di bagian atas. Setiap baris menampilkan dua angka: split, dalam warna aksen, yang merupakan waktu yang telah berlalu sejak lari sebelumnya; dan total, dalam warna abu-abu, yang merupakan waktu akumulatif sejak Anda menekan tombol Mulai. Pasangan ini memungkinkan Anda menilai segmen individu — satu interval latihan, satu bagian dari sebuah presentasi — tanpa kehilangan jejak waktu total.
Apakah alat ini mengunggah data saya?
Tidak. Semuanya berjalan langsung di browser Anda, jadi data Anda tidak pernah meninggalkan perangkat — bahkan tetap bisa dipakai offline setelah halaman dimuat.