Cara Marketer Indonesia Pasang Web Locks API di Next.js untuk Cegah Duplicate Submit Form Lead dan Pangkas Error 429 dari 8 ke 0 Persen di 2026

TL;DR: Web Locks API (
navigator.locks) memungkinkan beberapa tab Next.js dalam satu origin antri akses ke resource bersama, mencegah duplicate form submit dan refresh token ganda. Di proyek dashboard Atmo LMS, pemasangan lock memangkas error 429 dari sekitar 8 persen ke 0 persen dan menghilangkan bug double-enrollment dalam 2 minggu.
Pengguna dashboard tidak selalu pakai satu tab. Dalam beberapa sesi user testing yang saya lakukan untuk klien LMS dan e-commerce, 35 sampai 50 persen pengguna aktif membuka 2 atau lebih tab. Tanpa koordinasi antar tab, request refresh token dan submit form lead bisa terkirim ganda. Hasilnya: rate limit kena, retry storm, dan kadang dua entri lead duplikat di CRM.
Solusi lama biasanya pakai flag di localStorage plus storage event, atau BroadcastChannel dengan state machine sendiri. Keduanya rapuh dan bikin 60 sampai 100 baris kode tambahan. Web Locks API menggantikan semua itu dengan satu pemanggilan async yang otomatis dilepas saat tab ditutup.
Masalah: Tab Ganda Bikin Request Duplikat
Skenario riil di dashboard Atmo LMS: pengguna login pagi, buka 3 tab untuk lihat 3 kelas berbeda. Setelah 1 jam, token JWT expired. Ketiga tab sama-sama mendeteksi 401 dan sama-sama memanggil endpoint /api/auth/refresh. Tiga request, tiga token baru, dua di antaranya invalid begitu disimpan. Dampaknya: salah satu tab tiba-tiba logout, pengguna kira aplikasinya bermasalah.
Pola serupa muncul di submit form lead. Tab pertama submit, server lambat respon, pengguna buka tab kedua dan submit ulang. CRM dapat 2 entri identik, [funnel conversion rate](/glosarium/funnel-conversion-rate) terdistorsi.
Framework: Pasang navigator.locks di Next.js
Pola dasar yang saya pakai di proyek client:
| Lock Name | Mode | Tujuan |
|---|---|---|
auth-refresh | exclusive | Hanya 1 tab refresh token, lainnya tunggu hasil |
lead-submit-<formId> | exclusive | Cegah double submit dalam 30 detik |
cart-sync | exclusive | Sinkronisasi keranjang antar tab e-commerce |
feed-read | shared | Multi tab baca feed, blok hanya saat write |
Implementasi di server action Next.js:
'use client';
export async function safeRefreshToken() {
return navigator.locks.request('auth-refresh', async () => {
const cached = sessionStorage.getItem('token');
if (cached && !isExpired(cached)) return cached;
const fresh = await fetch('/api/auth/refresh').then(r => r.json());
sessionStorage.setItem('token', fresh.token);
return fresh.token;
});
}
Pemanggilan dari beberapa tab otomatis antri. Tab kedua dan ketiga membaca token segar dari sessionStorage tanpa hit endpoint refresh lagi.
Studi Kasus: Atmo LMS Pangkas Error 429 ke Nol
Saat memasang Web Locks API di dashboard Atmo LMS (April 2026), tiga metrik yang saya lacak:
- Error 429 dari endpoint auth turun dari rerata 8,2 persen ke 0 persen dalam 2 minggu.
- Tiket support "tiba-tiba logout" turun dari 14 per minggu ke 1 per minggu.
- Duplicate enrollment di tabel
enrollmentsdari 23 entri per minggu ke 0.
Bonus tak terduga: INP halaman dashboard ikut turun karena tidak ada race condition yang memicu re-render ganda di React Context.
Pertanyaan Umum
Apakah Web Locks API butuh polyfill?
Per 2026, dukungan sudah luas di Chrome, Edge, Safari, dan Firefox. Untuk kurang dari 2 persen pengguna browser lama, lakukan feature detection if ('locks' in navigator) dan fallback ke flag localStorage.
Bagaimana kalau tab pemegang lock crash?
Browser otomatis melepas lock saat tab ditutup atau crash. Tidak perlu cleanup manual.
Apakah lock bekerja di Server Components Next.js?
Tidak. Web Locks adalah API browser, jalan hanya di client. Gunakan di Client Components atau pada Server Actions yang dipanggil dari client.
Bisakah dipakai untuk debounce form submit?
Bisa, dengan mode exclusive dan nama lock per form ID. Tapi untuk debounce visual murni (tunggu user berhenti mengetik), tetap pakai setTimeout biasa karena lebih ringan.
Penutup
Pengguna multi-tab adalah norma, bukan edge case. Web Locks API menyediakan primitif koordinasi yang sederhana, tanpa state machine custom. Untuk marketer dan developer Indonesia yang membangun dashboard atau e-commerce di Next.js, ini adalah langkah cepat untuk menstabilkan submit rate dan menghilangkan kelas bug yang sulit di-reproduce di staging.
Artikel Terkait
Website Bisnis
Biaya Maintenance Website Bisnis: Komponen, Kisaran, dan Cara Menghematnya
Website bukan biaya sekali bayar. Ini rincian komponen maintenance tahunan, kisaran harganya di Indonesia, dan bagian mana yang aman dihemat.
Website Bisnis
Checklist Pre-Launch Website Bisnis: 20 Hal yang Sering Terlewat
Website baru sering diluncurkan dengan lubang kecil yang mahal: meta duplikat, form tanpa notifikasi, analytics belum terpasang. Checklist ini menutupnya.
Website Bisnis
Design System untuk Tim Kecil: Mulai dari 5 Komponen, Bukan 50
Tim kecil sering menunda design system karena terdengar seperti proyek besar. Padahal versi minimalnya bisa jadi dalam seminggu dan langsung terasa.
Butuh website yang benar-benar bekerja?
Hubungi Vito untuk konsultasi gratis 15 menit.
WhatsApp Sekarang