Sinkronisasi jawaban offline untuk aplikasi ujian

Catatan kerja tentang menyimpan jawaban di IndexedDB tanpa membiarkan klien menjadi otoritas.

06 November 2026Draf
  • indexeddb
  • offline
  • ujian

/ Ini draf yang sedang dikerjakan. Strukturnya sudah ada; detailnya masih diverifikasi dan dilengkapi.

Batasannya

Jaringan di ruang ujian tidak andal. Peserta yang sedang di tengah sesi listening tidak bisa diminta menyambung ulang sebelum soal berikutnya, dan jawaban tidak boleh hilang karena request timeout.

Solusi yang menggoda adalah membiarkan klien memiliki state ujian dan menyinkronkan semuanya di akhir. Itu gagal begitu server perlu memutuskan apakah sesi masih terbuka.

Modelnya

Tiga lapisan, dengan pemilik yang jelas untuk masing-masing:

Lapisan Memegang Tidak memegang
IndexedDB (Dexie) Draf jawaban, antrean lokal Status pengumpulan final
Aplikasi klien Rendering, navigasi Penilaian, otoritas waktu
Server Waktu, pengumpulan, penilaian Ketersediaan offline

Jalur tulisnya:

  1. Jawaban langsung ditulis ke IndexedDB.
  2. Job sinkronisasi mengirimnya dengan identitas yang dibuat klien.
  3. Server melakukan upsert berdasarkan identitas itu, jadi percobaan ulang aman.
  4. Entri lokal ditandai sudah diakui.
  5. Saat reload, entri yang belum diakui dikirim ulang.

Kenapa idempotensi adalah intinya

Jaringan gagal di jendela ambigu: request mungkin sudah sampai dan response hilang. Tanpa idempotency key, percobaan ulang membuat jawaban ganda dan skor peserta salah.

Dengan key itu, server bisa memproses tulisan yang sama dua kali dan berakhir di state yang sama. Properti itu lebih penting daripada interval sinkronisasi apa pun.

Pertanyaan terbuka untuk diverifikasi

  • Bagaimana timer klien dan timer server diselaraskan di batas sesi.
  • Apakah jawaban terlambat yang datang setelah pengumpulan ditolak atau dicatat untuk ditinjau.
  • Seberapa banyak antrean yang harus bertahan saat browser restart versus refresh tab.
  • Apa yang dilihat operator saat peserta masih punya jawaban belum tersinkron di akhir sesi.

Yang ingin saya tulis berikutnya

Contoh lengkap endpoint upsert dan definisi tabel Dexie, plus tabel kegagalan: koneksi putus, tab ditutup, server restart, dan clock skew.