feat: datatable debounce#1042
Merged
Merged
Conversation
|
🔄 AI PR Review sedang antri di server...
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Pull Request: Debounce Pencarian DataTable untuk Mencegah Spam Request
Deskripsi
Implementasi debounce pada fitur pencarian DataTable di seluruh halaman admin OpenKab. Tanpa debounce, setiap karakter yang diketik user langsung memicu request ke server (misal: mengetik "kemiri" menghasilkan 6+ request untuk "k", "ke", "kem", "kemi", "kemir", "kemiri"). Perubahan ini memastikan request hanya dikirim 1x setelah user selesai mengetik.
Perubahan yang dilakukan:
searchDelay: 500pada konfigurasi default DataTable untuk semua tabel di aplikasi.init.dtyang menerapkan custom debounce logic pada input search DataTable.keyup.DT input.DT search.DT keydown.DT) dan menggantinya dengan handler custom yang menggunakansetTimeoutuntuk debounce.Alasan perubahan:
Dampak perubahan:
✅ Performance: Request pencarian berkurang drastis (dari N request per kata menjadi 1 request setelah user selesai mengetik)
✅ Database load: Beban query database berkurang signifikan karena tidak ada query parsial yang tidak perlu
✅ Network efficiency: Bandwidth yang digunakan lebih efisien
✅ User experience: Pencarian tetap responsif dengan delay 500ms yang tidak mengganggu UX
✅ Backward compatible: Tidak mengubah API atau struktur data, hanya mengubah timing request
Masalah Terkait (Related Issue)
Langkah untuk mereproduksi (Steps to Reproduce)
Sebelum perbaikan (masalah):
Setelah perbaikan (fix):
Testing pada fitur lain yang terkait:
Daftar Periksa (Checklist)
Teknis Detail
Penjelasan Teknis
Implementasi debounce menggunakan pola standar JavaScript dengan
setTimeoutdanclearTimeout:Mekanisme kerja:
init.dtdipanggil setiap kali DataTable diinisialisasisearchDelay)previousSearchmencegah redundant search jika nilai tidak berubahclearTimeoutmembatalkan timer sebelumnya saat user masih mengetiktable.search().draw()hanya dipanggil setelah timer selesai (user berhenti mengetik)Optimasi tambahan:
searchDelay: 500di-set sebagai default global untuk semua DataTable1500msjikasearchDelaytidak ditemukan di init configtable.search() !== currentValuemencegah draw ulang jika nilai sudah samaKonfigurasi yang berubah
searchDelay: 500ditambahkan ke$.fn.dataTable.defaultsDependencies yang ditambahkan
Testing
Manual Testing
Screenshots / Video
simplescreenrecorder-2026-05-19_15.32.43.mp4
Sebelum:
Network tab menunjukkan multiple request untuk setiap keystroke saat mengetik "kemiri":
Sesudah:
Network tab menunjukkan hanya 1 request setelah user selesai mengetik:
Breaking Changes
Tidak ada breaking changes. Perubahan hanya mempengaruhi timing request, bukan fungsi atau API.
Migration Guide
Tidak diperlukan.
References
Catatan tambahan:
searchDelaydi$.fn.dataTable.defaultsindex.blade.php)