Feat/datatable debounce#1552
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: Implementasi Debounce pada Pencarian DataTable
Deskripsi
Menambahkan mekanisme debounce pada pencarian DataTable untuk mencegah request berulang yang tidak perlu ke server. Saat ini, ketika user mengetik kata pencarian (misalnya "kemiri"), setiap karakter yang diketik memicu request terpisah ke server, menghasilkan 3+ request untuk satu kata pencarian. Dengan debounce, request hanya dikirim setelah user selesai mengetik.
Perubahan yang dilakukan:
Penambahan
searchDelaypada DataTable defaults: Menambahkan konfigurasisearchDelay: 500sebagai default untuk semua instance DataTable di aplikasi.Custom event handler dengan debounce: Menambahkan event listener
init.dtyang mengoverride default search behavior DataTable dengan implementasi debounce manual menggunakansetTimeoutdanclearTimeout.Penghapusan event handler bawaan DataTable: Menggunakan
searchInput.off('keyup.DT input.DT search.DT keydown.DT')untuk menghapus event handler bawaan DataTable sebelum menambahkan custom handler dengan debounce.Pencegahan redundant search: Menambahkan pengecekan
previousSearchdantable.search() !== currentValueuntuk memastikan tidak ada request yang dikirim jika nilai pencarian tidak berubah.Alasan perubahan:
Dampak perubahan:
✅ Performance: Request HTTP berkurang hingga 80-90% untuk pencarian dengan kata panjang
✅ Database load: Query ke database berkurang signifikan
✅ User Experience: Pencarian lebih responsif tanpa lag akibat request berulang
✅ Network efficiency: Bandwidth usage lebih efisien
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
File yang diubah:
resources/views/partials/asset_datatables.blade.phpImplementasi debounce menggunakan pattern standar JavaScript:
Cara kerja:
searchDelaydi-set ke 500ms sebagai default di$.fn.dataTable.defaultsinit.dtevent), custom event handler dipasangkeyup inputevent, tapi search hanya dijalankan setelah:setTimeoutselesai (500ms delay)clearTimeout) jika ada keystroke baru sebelum delay habisKonfigurasi yang berubah:
searchDelay: 500ditambahkan ke DataTable defaults (500ms)searchDelay || 1500jika tidak ada default yang disetDependencies yang ditambahkan:
Testing
Manual Testing
Screenshots / Video
simplescreenrecorder-2026-05-19_15.44.54.mp4
Sebelum:
Setiap karakter yang diketik memicu request terpisah:
Sesudah:
Hanya 1 request setelah user selesai mengetik (delay 500ms):
Breaking Changes
Tidak ada breaking changes. Perubahan bersifat backward compatible dan hanya mengubah timing dari request pencarian, bukan hasil atau behavior pencarian itu sendiri.
Migration Guide
Tidak diperlukan migration. Perubahan otomatis berlaku untuk semua halaman yang menggunakan partial
asset_datatables.blade.php.References
Catatan tambahan:
searchDelaydi initialization DataTable