29 Des 2025·8 menit membaca

Dropdown besar di UI admin: mengapa itu memperlambat Anda

Dropdown besar di UI admin memperlambat form, membingungkan pengguna, dan membebani API. Pelajari typeahead, pemfilteran sisi-server, dan pola data referensi yang bersih.

Dropdown besar di UI admin: mengapa itu memperlambat Anda

Masalah sebenarnya dengan dropdown raksasa

Anda mengklik sebuah field, dropdown terbuka, dan semuanya melambat. Halaman tersendat sebentar, gulir terasa lengket, dan Anda kehilangan posisi. Sekalipun hanya berlangsung satu detik, itu memecah ritme pengisian form.

Masalah ini paling sering muncul di panel admin dan alat internal karena mereka menangani dataset nyata yang berantakan: pelanggan, pesanan, SKU, tiket, lokasi, karyawan. Aplikasi publik kadang bisa membatasi pilihan. Alat admin sering perlu akses ke semuanya, dan itu mengubah kontrol form sederhana menjadi penjelajah data mini.

Apa yang dihitung sebagai “besar” bergantung pada konteks, tapi rasa sakit biasanya dimulai lebih awal daripada yang orang perkirakan. Ratusan opsi masih bisa digunakan, tapi memindai menjadi lambat dan salah klik jadi sering. Setelah mencapai ribuan, pengguna mulai merasakan lag dan membuat lebih banyak pilihan salah. Pada puluhan ribu, kontrol berhenti berperilaku seperti dropdown dan mulai berperilaku seperti bug performa. Pada jutaan, itu tidak bisa lagi disebut dropdown.

Masalah sebenarnya bukan hanya kecepatan. Ini tentang akurasi.

Saat orang menggulir daftar panjang, mereka memilih “John Smith” yang salah, “Springfield” yang salah, atau varian produk yang salah, lalu menyimpan data yang salah. Biayanya muncul kemudian sebagai pekerjaan support, edit ulang, dan laporan yang tak dipercaya.

Tujuannya sederhana: jaga agar form cepat dan dapat diprediksi tanpa kehilangan presisi. Itu biasanya berarti mengganti cara “muat semua lalu gulir” dengan pola yang membantu orang menemukan record yang tepat dengan cepat, sementara sistem hanya mengambil apa yang diperlukan.

Dari mana keterlambatan itu berasal (dengan bahasa sederhana)

Dropdown besar terlihat sederhana, tapi browser memperlakukannya seperti pekerjaan sungguhan. Saat Anda memuat ribuan item, Anda meminta halaman untuk membuat ribuan elemen option, mengukurnya, dan me-rendernya ke layar. Biaya DOM dan rendering itu cepat menumpuk, terutama jika form punya beberapa field seperti ini.

Keterlambatan bisa dimulai sebelum ada yang terlihat. Banyak UI admin memuat daftar referensi (pelanggan, produk, lokasi) di awal agar dropdown bisa terbuka instan nanti. Itu berarti respon API lebih besar, lebih lama menunggu jaringan, dan lebih lama mengurai JSON. Bahkan dengan koneksi bagus, payload besar menunda saat form menjadi interaktif.

Lalu ada memori. Menyimpan daftar besar di browser memakan RAM. Pada laptop kelas bawah, browser lama, atau tab yang sibuk, ini bisa menyebabkan tersendat, ketikan melambat, atau bahkan pembekuan sementara saat dropdown dibuka.

Pengguna tidak peduli alasan teknisnya. Mereka melihat jeda-jeda itu. "Micro-delays" umumlah yang memecah alur:

  • Halaman dimuat, tapi klik pertama tidak bereaksi sejenak.
  • Membuka dropdown lag, atau gulir terasa lompat.
  • Mengetik di field lain menjadi sedikit tertunda.
  • Menyimpan terasa lebih lambat karena UI sudah dibebani.

Hiccup 300 sampai 600 ms terdengar kecil, tapi diulang sepanjang hari pengisian data, itu menjadi frustrasi nyata.

Masalah UX: bukan hanya performa

Dropdown besar tidak hanya terasa lambat. Mereka mengubah pilihan sederhana menjadi teka-teki kecil, dan pengguna membayar untuk itu setiap kali mengisi form.

Orang tidak bisa memindai 2.000 item secara efektif. Bahkan jika daftar dimuat instan, mata dipaksa ke mode “mencari”: gulir, lewat, gulir kembali, ragu. Semakin besar daftar, semakin banyak waktu yang dihabiskan pengguna untuk memastikan mereka memilih yang benar alih-alih menyelesaikan tugas.

Pemilihan yang salah juga mudah terjadi. Sedikit gulir pada trackpad bisa memindahkan opsi yang ter-highlight, dan klik mendarat di baris yang salah. Kesalahan sering muncul nanti (pelanggan di invoice salah, gudang salah, kategori salah), yang menciptakan kerja tambahan dan jejak audit yang berantakan.

Fitur “search” pada select native adalah jebakan lain. Di beberapa platform, mengetik melompat ke item berikutnya yang dimulai dengan huruf tersebut. Di platform lain, perilakunya berbeda atau tidak mudah ditemukan. Pengguna menyalahkan aplikasi Anda, padahal kontrol berperilaku seperti dropdown biasa.

Daftar panjang juga menyembunyikan masalah kualitas data. Duplikat, penamaan yang tidak jelas, record lama yang seharusnya diarsipkan, dan opsi yang hanya berbeda oleh sufiks menjadi tak terlihat dalam kebisingan.

Pemeriksaan realitas cepat untuk tiap field “pilih satu”:

  • Apakah rekan baru akan memilih dengan benar pada percobaan pertama?
  • Apakah ada nama hampir-duplikat yang mengundang kesalahan?
  • Apakah kontrol berperilaku sama di Mac, Windows, dan mobile?
  • Jika seleksi salah, apakah ada yang langsung menyadarinya?

Kapan dropdown masih pilihan yang tepat

Tidak setiap field select butuh pencarian. Dropdown besar jadi menyakitkan ketika daftar panjang, sering berubah, atau tergantung konteks. Tapi sekumpulan opsi kecil dan stabil justru tempat dropdown unggul.

Dropdown adalah pilihan kuat ketika orang bisa memindainya dengan cepat dan mengenali nilai yang benar tanpa berpikir. Pikirkan field seperti status pesanan, prioritas, peran pengguna, atau negara. Jika daftar relatif stabil dari waktu ke waktu dan biasanya muat di satu layar, kontrol sederhana menang.

Dropdown masih tepat ketika opsi stabil, mudah dikenali, dan umumnya sama antar pengguna. Jika daftar biasanya di bawah sekitar 50–100 item dan orang memilih dengan membaca bukan mengetik, Anda akan mendapatkan kecepatan dan kejelasan.

Perhatikan saat pengguna mulai mengetik huruf awal yang sama berulang kali. Itu tanda daftar tidak mudah diingat, dan memindai menjadi lebih lambat daripada mencari.

Batas keras adalah daftar yang sering berubah atau bergantung pada siapa yang login. Field "Assigned to" sering bergantung pada tim, wilayah, dan izin. Dropdown yang memuat semua pengguna akan usang, berat, dan membingungkan.

Jika Anda membangun ini di alat seperti AppMaster, aturan yang baik: gunakan dropdown untuk data referensi kecil (seperti status), dan beralih ke pemilihan berbasis pencarian untuk apa pun yang tumbuh seiring bisnis Anda (pelanggan, produk, staf).

Typeahead: pengganti paling sederhana

Dapatkan source code siap produksi
Bangun dengan no-code, lalu ekspor source code nyata saat Anda butuh kontrol penuh.
Generate Code

Typeahead (sering disebut autocomplete) adalah field teks yang mencari saat Anda mengetik dan menampilkan daftar singkat hasil yang cocok. Alih-alih membuat orang menggulir daftar besar, Anda membiarkan mereka menggunakan keyboard dan memilih dari hasil yang diperbarui secara real-time.

Ini biasanya perbaikan pertama terbaik karena mengurangi apa yang Anda render, mengurangi apa yang Anda unduh, dan mengurangi usaha yang diperlukan untuk menemukan item yang tepat.

Typeahead yang baik mengikuti beberapa aturan dasar. Ia menunggu jumlah karakter minimum sebelum mencari (sering 2–3) supaya UI tidak bergetar pada "a" dan "e." Ia mengembalikan hasil dengan cepat dan menjaga daftar pendek (biasanya 10–20 teratas). Ia menyorot bagian hasil yang cocok sehingga pemindaian cepat. Juga jelas tentang keadaan kosong, dengan pesan “No results” yang langsung dan langkah selanjutnya.

Perilaku keyboard lebih penting daripada yang disangka orang: Up dan Down harus memindahkan opsi, Enter harus memilih, dan Esc harus menutup. Jika dasar-dasar itu hilang, typeahead bisa terasa lebih buruk daripada dropdown.

Detail kecil membuatnya terasa stabil. Status loading halus mencegah pengetikan ganda dan kebingungan. Jika seseorang mengetik "jo" dan berhenti, hasil harus muncul dengan cepat. Jika mereka mengetik "john sm", daftar harus menyempit tanpa melompat atau kehilangan highlight.

Contoh: di panel admin tempat Anda memilih pelanggan, mengetik "mi" bisa menampilkan "Miller Hardware", "Mina Patel", dan "Midtown Bikes", dengan bagian "mi" disorot. Di AppMaster, pola ini cocok karena UI Anda bisa memanggil endpoint yang mencari pelanggan dan mengembalikan hanya beberapa match yang Anda butuhkan, bukan seluruh tabel.

Saat benar-benar tidak ada match, bersikap langsung dan membantu: “No customers found for ‘johns’. Try a shorter name or search by email.”

Cara mengimplementasikan typeahead, langkah demi langkah

Typeahead bekerja terbaik ketika diperlakukan seperti alat pencarian kecil, bukan dropdown mungil. Tujuannya jelas: ambil beberapa match yang baik dengan cepat, biarkan pengguna memilih satu, dan simpan seleksi dengan aman.

Pengaturan praktis dan cepat

Mulailah dengan memilih satu atau dua field yang benar-benar diingat orang. Untuk pelanggan, itu biasanya nama atau email. Untuk produk, mungkin SKU atau kode internal. Pilihan ini lebih penting daripada styling karena menentukan apakah pengguna mendapat hasil dalam beberapa ketukan pertama.

Lalu implementasikan aliran ujung-ke-ujung:

  • Pilih kunci pencarian (mis. nama pelanggan plus email) dan atur jumlah karakter minimum (sering 2–3).
  • Buat endpoint API yang menerima teks kueri plus paging (mis. q dan limit, plus offset atau cursor).
  • Kembalikan hanya set kecil (sering top 20), diurutkan berdasarkan kecocokan terbaik, dan sertakan ID plus field label yang ingin ditampilkan.
  • Di UI, tampilkan status loading, tangani hasil kosong, dan dukung navigasi keyboard.
  • Simpan record yang dipilih sebagai ID, bukan teks tampilan, dan perlakukan label hanya untuk tampilan.

Contoh kecil: jika seorang admin mengetik "maria@" di field Customer, UI memanggil endpoint dengan q=maria@ dan mendapat 20 match. Pengguna memilih yang benar, dan form menyimpan customer_id=12345. Jika pelanggan itu kemudian mengubah nama atau email, data yang tersimpan tetap benar.

Jika Anda membangun ini di AppMaster, ide yang sama berlaku: gunakan endpoint backend untuk pencarian (dengan paging), hubungkan ke field di UI, dan bind nilai yang dipilih ke model ID.

Dua detail menjaga responsivitas: debounce request (agar tidak memanggil server pada setiap ketukan) dan cache kueri terbaru dalam sesi saat ini.

Pola pemfilteran sisi-server yang tetap cepat

Jaga lookup tetap aman
Gunakan logika bisnis visual untuk menegakkan izin dan mengembalikan hanya hasil yang diizinkan.
Bangun Workflow

Begitu daftar Anda lebih besar dari beberapa ratus item, pemfilteran di browser berhenti ramah. Halaman akhirnya mendownload data yang tidak akan Anda pakai, lalu melakukan pekerjaan ekstra hanya untuk menampilkan irisan kecil.

Pemfilteran sisi-server membalik alur: kirim kueri kecil (mis. "nama dimulai dengan ali"), dapatkan kembali hanya halaman pertama match, dan jaga form tetap responsif tak peduli seberapa besar tabelnya.

Pola yang menjaga waktu respon stabil

Beberapa aturan sederhana membuat perbedaan besar:

  • Kembalikan ukuran halaman terbatas (mis. 20–50 item) dan sertakan token "next" atau nomor halaman.
  • Pilih paginasi berbasis cursor untuk data yang berubah agar Anda menghindari celah aneh saat record ditambahkan.
  • Minta server hanya field yang UI butuhkan (id plus label), bukan record penuh.
  • Gunakan pengurutan yang stabil (mis. berdasarkan nama, lalu id) supaya hasil tidak melompat-lompat.
  • Terapkan izin pengguna saat kueri dijalankan, bukan setelahnya.

Caching: berguna, tapi mudah disalahgunakan

Caching bisa mempercepat pencarian populer, tapi hanya saat hasil aman untuk digunakan ulang. "Top countries" atau "kategori produk umum" adalah kandidat bagus. Daftar pelanggan sering bukan kandidat, karena hasil bisa bergantung pada izin, status akun, atau perubahan terbaru.

Jika Anda melakukan caching, buat masa hidup singkat dan sertakan peran pengguna atau tenant dalam kunci cache. Jika tidak, satu orang bisa melihat data orang lain.

Di AppMaster, ini biasanya berarti membangun endpoint yang menerima string pencarian dan cursor, lalu menegakkan aturan akses di logika backend sebelum mengembalikan halaman berikutnya dari opsi.

Pola data referensi yang menjaga form tetap gesit

Banyak rasa sakit "dropdown lambat" sebenarnya adalah rasa sakit "data referensi berantakan". Ketika field form menunjuk ke tabel lain (pelanggan, produk, lokasi), perlakukan seperti referensi: simpan ID, dan anggap label hanya untuk tampilan. Itu menjaga record kecil, menghindari menulis ulang sejarah, dan memudahkan pencarian serta pemfilteran.

Jaga tabel referensi tetap sederhana dan konsisten. Beri tiap baris kunci unik yang jelas (sering ID numerik) dan nama yang dikenali pengguna. Tambahkan flag aktif/tidak aktif daripada menghapus baris, sehingga record lama tetap bisa di-resolve tanpa muncul di pilihan baru. Ini juga membantu typeahead dan pemfilteran sisi-server karena Anda bisa aman memfilter dengan active=true secara default.

Putuskan sejak awal apakah Anda harus snapshot label pada record. Sebuah baris invoice mungkin menyimpan customer_id, tapi juga menyimpan customer_name_at_purchase untuk audit dan sengketa. Untuk catatan admin harian, seringkali lebih baik selalu join dan tampilkan nama saat ini, sehingga perbaikan typo terlihat di mana-mana. Aturan sederhana bekerja baik: snapshot saat masa lalu harus tetap terbaca meski referensi berubah.

Untuk kecepatan, jalan pintas kecil bisa mengurangi pencarian tanpa memuat seluruh dataset. "Recently used" (per pengguna) di bagian atas sering mengalahkan tweak UI apa pun. Favorit membantu saat orang memilih beberapa hal yang sama setiap hari. Default yang aman (seperti nilai terakhir digunakan) bisa menghilangkan interaksi seluruhnya. Dan menyembunyikan item tidak aktif kecuali diminta pengguna menjaga daftar tetap bersih.

Contoh: memilih gudang pada sebuah order. Simpan warehouse_id pada order. Tampilkan nama gudang, tapi jangan embed kecuali Anda butuh audit trail. Di AppMaster, ini terpeta dengan jelas: modelkan referensi di Data Designer, dan gunakan logika bisnis untuk merekam "recent selections" tanpa memuat ribuan opsi ke UI.

Skenario form umum dan kontrol UI yang lebih baik

Bangun UI admin yang lebih cepat
Buat form admin yang tetap responsif meskipun tabel pelanggan dan produk bertambah besar.
Mulai Membangun

Dropdown besar muncul karena sebuah field terlihat "sederhana": pilih satu nilai dari daftar. Tapi field admin nyata sering butuh kontrol berbeda agar tetap cepat dan mudah.

Field bergantung (dependent fields) adalah kasus klasik. Jika City bergantung pada Country, muat hanya field pertama saat halaman dibuka. Saat pengguna memilih country, ambil cities untuk country itu. Jika daftar kota masih besar, buat field city menjadi typeahead yang memfilter dalam konteks country terpilih.

Field multi-select (tags, peran, kategori) juga cepat rusak dengan daftar besar. Multi-select yang berfokus pada pencarian, memuat hasil saat pengguna mengetik dan menampilkan item yang dipilih sebagai chips, menghindari memuat ribuan opsi hanya untuk memilih tiga.

Kebutuhan umum lain adalah "buat baru" dari field ketika opsi tidak ada. Letakkan aksi “Add new…” di samping field atau di dalam picker. Buat record baru, lalu auto-pilih. Validasi di server (field wajib, uniqueness bila perlu) dan tangani konflik dengan jelas.

Untuk daftar referensi panjang (pelanggan, produk, vendor), gunakan dialog lookup atau typeahead dengan pemfilteran sisi-server. Tampilkan konteks di hasil (mis. nama pelanggan plus email) sehingga orang bisa memilih dengan benar.

Jaringan buruk dan kondisi offline membuat daftar besar terasa lebih buruk. Beberapa pilihan membantu aplikasi internal tetap bisa digunakan: cache pilihan baru-baru ini (mis. 10 pelanggan terakhir) sehingga pick umum muncul instan, tampilkan status loading yang jelas, dukung retry tanpa menghapus input pengguna, dan biarkan pengguna terus mengisi field lain saat lookup sedang dimuat.

Jika Anda membangun form di AppMaster, pola-pola ini terpeta dengan baik ke model data yang bersih (tabel referensi) plus endpoint server-side untuk pencarian terfilter, sehingga UI tetap responsif saat data tumbuh.

Kesalahan umum yang membuatnya lebih buruk

Perbaiki dasar-dasar data referensi
Rancang tabel referensi yang menyimpan ID dengan rapi dan menggunakan label hanya untuk tampilan.
Modelkan Data

Kebanyakan form lambat bukan karena satu tabel raksasa. Mereka melambat karena UI melakukan pilihan mahal itu berkali-kali.

Kesalahan klasik adalah memuat daftar penuh "sekali saja" saat halaman dimuat. Terasa baik dengan 2.000 item. Setahun kemudian menjadi 200.000, dan setiap form terbuka dengan tunggu panjang, penggunaan memori ekstra, dan payload berat.

Pencarian juga bisa gagal meskipun cepat. Jika field hanya mencari berdasarkan nama tampilan, pengguna bisa terjebak. Orang nyata mencari berdasarkan apa yang mereka punya: email pelanggan, kode internal, nomor telepon, atau 4 digit terakhir akun.

Beberapa isu kecil mengubah kontrol menjadi menyakitkan:

  • Tidak ada debounce, sehingga UI mengirim permintaan tiap ketukan.
  • Payload besar (record penuh) alih-alih daftar kecil match.
  • Item tidak aktif atau terhapus tidak ditangani, sehingga form yang tersimpan nanti menampilkan kosong.
  • Form menyimpan teks label alih-alih ID, menciptakan duplikat dan laporan berantakan.
  • Hasil tidak menampilkan konteks yang cukup (mis. dua entri "John Smith" tanpa pembedanya).

Satu skenario nyata: seorang agen memilih pelanggan. Pelanggan "Acme" ada dua, satu tidak aktif, dan form menyimpan label. Sekarang invoice menunjuk record yang salah dan tidak ada yang bisa memperbaikinya dengan andal.

Di AppMaster, default yang lebih aman adalah menyimpan referensi sebagai ID di model data Anda dan menampilkan label hanya di UI, sementara endpoint pencarian Anda mengembalikan daftar match kecil dan terfilter.

Daftar periksa cepat sebelum Anda rilis form

Sebelum rilis, anggap setiap field "pilih dari daftar" sebagai risiko performa dan UX. Field ini sering terasa baik dengan data uji, lalu hancur saat record nyata muncul.

  • Jika daftar bisa tumbuh melewati ~100 item, beralihlah ke typeahead search atau picker yang dapat dicari.
  • Jaga respons pencarian kecil. Usahakan mengembalikan ~20–50 hasil per kueri, dan berikan petunjuk jelas kapan pengguna harus mengetik lebih banyak.
  • Simpan nilai yang stabil, bukan label. Simpan record ID dan validasi di server, termasuk pengecekan izin, sebelum menerima form.
  • Tangani state dengan sengaja: indikator loading saat mencari, empty state yang membantu ketika tidak ada yang cocok, dan error yang jelas saat permintaan gagal.
  • Buat cepat tanpa mouse. Dukung navigasi keyboard dan biarkan pengguna menempelkan nama, email, atau kode ke kotak pencarian.

Jika Anda membangun di tool no-code seperti AppMaster, ini biasanya perubahan kecil: satu UI input, satu endpoint pencarian, dan validasi server-side di business logic Anda. Perbedaan di kerja admin sehari-hari sangat besar, terutama pada form bertrafik tinggi.

Contoh realistis: memilih pelanggan di panel admin

Kirim lookup pelanggan
Implementasikan field Customer yang mencari berdasarkan nama dan email serta menyimpan ID stabil.
Coba AppMaster

Tim support bekerja di UI admin tempat mereka menetapkan setiap tiket masuk ke pelanggan yang benar. Terlihat sederhana sampai daftar pelanggan tumbuh menjadi 8.000 record.

Versi “sebelum” menggunakan dropdown besar. Membuka butuh waktu, gulir lag, dan browser harus menyimpan ribuan opsi di memori. Yang lebih buruk, orang memilih "Acme" yang salah karena ada duplikat, nama lama, dan perbedaan kecil seperti "ACME Inc" vs "Acme, Inc." Hasilnya adalah kerugian waktu kecil tapi terus-menerus, plus laporan berantakan nanti.

Versi “sesudah” mengganti dropdown dengan field typeahead. Agen mengetik tiga huruf, form menampilkan match terbaik dengan cepat, mereka memilih, dan lanjut. Field bisa menampilkan konteks tambahan (domain email, ID akun, kota) sehingga pelanggan yang benar jelas.

Untuk menjaga cepat, pencarian terjadi di server, bukan di browser. UI hanya meminta 10–20 match pertama, diurutkan berdasarkan relevansi (biasanya campuran prefix exact dan yang sering digunakan) dan difilter berdasarkan status (mis. hanya pelanggan aktif). Pola ini mencegah daftar panjang berubah menjadi gangguan harian.

Langkah kebersihan data kecil membuat alur baru jauh lebih aman:

  • Tetapkan aturan penamaan (mis. nama legal plus kota atau domain).\n- Cegah duplikat pada field kunci (domain email, NPWP, atau external ID).\n- Pertahankan satu field "display name" konsisten di seluruh produk.\n- Tandai record yang digabung sebagai tidak aktif, tapi simpan histori.

Di alat seperti AppMaster, ini biasanya berarti field referensi yang dapat dicari didukung oleh endpoint API yang mengembalikan match saat pengguna mengetik, alih-alih memuat setiap pelanggan ke form sebelumnya.

Langkah selanjutnya: upgrade satu field dan standarkan pola

Pilih satu dropdown yang sering dikeluhkan. Kandidat bagus adalah field yang muncul di banyak layar (Customer, Product, Assignee) dan telah tumbuh melewati beberapa ratus opsi. Mengganti satu field itu saja memberi bukti cepat, tanpa menulis ulang semua form.

Mulailah dengan memutuskan apa yang sebenarnya ditunjuk field: tabel referensi (pelanggan, users, SKU) dengan ID stabil, plus beberapa field tampilan kecil (nama, email, kode). Lalu definisikan satu endpoint pencarian yang mengembalikan hanya apa yang UI butuhkan, cepat, dalam halaman kecil.

Rencana rollout yang bekerja di tim nyata:

  • Ganti dropdown dengan typeahead search untuk field itu.
  • Tambahkan pencarian sisi-server yang mendukung teks parsial dan paging.
  • Kembalikan ID plus label (dan satu petunjuk sekunder seperti email).
  • Simpan nilai yang dipilih sebagai ID, bukan teks yang disalin.
  • Gunakan pola yang sama di mana pun entitas itu dipilih.

Ukur perubahan dengan beberapa metrik dasar. Lacak waktu untuk membuka field (harus terasa instan), waktu untuk memilih (harus turun), dan tingkat kesalahan (pilihan salah, edit ulang, atau pengguna menyerah). Bahkan pemeriksaan sebelum/sesudah ringan dengan 5–10 pengguna nyata bisa menunjukkan apakah Anda memperbaiki masalah.

Jika Anda membangun tool admin dengan AppMaster, Anda bisa memodelkan data referensi di Data Designer dan menambahkan logika pencarian server-side di Business Process Editor, jadi UI meminta potongan kecil hasil alih-alih memuat semuanya. Tim sering mengadopsi ini sebagai pola standar di seluruh aplikasi internal yang dibangun di appmaster.io, karena pola ini skala dengan baik saat tabel tumbuh.

Akhirnya, tuliskan standar yang bisa tim Anda pakai ulang: karakter minimal sebelum pencarian, ukuran halaman default, bagaimana format label, dan apa yang terjadi saat tidak ada hasil. Konsistensi adalah yang menjaga setiap form baru tetap cepat.

FAQ

When should I stop using a dropdown and switch to search?

Dropdown biasanya baik ketika daftar kecil, stabil, dan mudah dipindai. Jika orang tidak bisa menemukan pilihan yang benar tanpa mengetik, atau daftar kemungkinan tumbuh, beralihlah ke picker berbasis pencarian sebelum itu menjadi gangguan sehari-hari.

How many options is “too many” for a dropdown?

Banyak tim mulai merasakan gesekan di angka ratusan karena memindai menjadi lebih lambat dan kesalahan klik meningkat. Saat mencapai ribuan, lag performa dan kesalahan pemilihan menjadi umum, dan pada puluhan ribu elemen dropdown normal tidak lagi praktis.

What’s the simplest good typeahead setup?

Mulailah dengan minimal 2–3 karakter sebelum mencari, dan kembalikan hasil kecil seperti 10–20 item. Buat pemilihan cepat dengan dukungan keyboard dan tampilkan konteks yang cukup di tiap hasil (mis. nama plus email atau kode) sehingga duplikat mudah dibedakan.

How do I keep autocomplete from hammering my API?

Debounce input sehingga Anda tidak mengirim permintaan pada setiap ketukan, dan biarkan server melakukan pemfilteran. Kembalikan hanya field yang diperlukan untuk merender daftar saran, plus ID stabil untuk disimpan di form.

Why is server-side filtering better than loading everything once?

Lakukan pemfilteran dan paginasi di server, bukan di browser. UI harus mengirim kueri singkat dan menerima hanya satu halaman hasil, sehingga performa tetap konsisten saat tabel tumbuh dari ribuan menjadi jutaan record.

Should my form store the option label or the record ID?

Simpan ID record yang dipilih, bukan label tampilan, karena nama dan label dapat berubah. Menyimpan ID mencegah referensi rusak, mengurangi duplikat, dan membuat pelaporan serta join tetap andal meski teks "cantik" diubah nanti.

How can I reduce wrong picks like the wrong “John Smith”?

Tampilkan detail identifikasi tambahan di hasil, seperti email, kota, kode internal, atau suffix nomor akun, sehingga pilihan yang benar jelas. Kurangi duplikat di level data bila memungkinkan, dan sembunyikan record tidak aktif secara default agar orang tidak memilihnya secara tidak sengaja.

What’s the best approach for dependent fields like Country → City?

Jangan muat kedua daftar sekaligus. Muat field pertama, lalu ambil field kedua berdasarkan pemilihan pertama, dan jika daftar kedua masih besar, buat menjadi typeahead yang dibatasi oleh konteks tersebut agar kueri tetap sempit dan cepat.

How do I make these pickers usable on slow networks?

Cache pilihan “sering digunakan” per pengguna sehingga pilihan umum muncul seketika, dan simpan sisanya di balik pencarian yang dapat dicoba ulang dengan aman. Tampilkan status loading dan error yang jelas tanpa menghapus input pengguna, sehingga mereka bisa melanjutkan mengisi field lain sementara lookup berjalan.

How would I implement this pattern in AppMaster?

Buat endpoint backend yang menerima kueri dan mengembalikan daftar match yang dipaged, kecil, dan berisi ID serta field tampilan. Di UI, bind input typeahead ke endpoint tersebut, tampilkan saran, dan simpan ID yang dipilih ke model Anda; di AppMaster ini biasanya dipetakan ke endpoint backend plus binding UI, dengan aturan akses ditegakkan di logika backend.

Mudah untuk memulai
Ciptakan sesuatu yang menakjubkan

Eksperimen dengan AppMaster dengan paket gratis.
Saat Anda siap, Anda dapat memilih langganan yang tepat.

Memulai
Dropdown besar di UI admin: mengapa itu memperlambat Anda | AppMaster