29 दिस॰ 2025·8 मिनट पढ़ने में

एडमिन UI में बड़े ड्रॉपडाउन: ये आपको क्यों धीमा करते हैं

एडमिन UI में बड़े ड्रॉपडाउन फॉर्म धीमे करते हैं, उपयोगकर्ताओं को भ्रमित करते हैं और API पर बोझ बढ़ाते हैं। टाइपहेड सर्च, सर्वर-साइड फ़िल्टरिंग और साफ़ रेफरेंस‑डेटा पैटर्न सीखें।

एडमिन UI में बड़े ड्रॉपडाउन: ये आपको क्यों धीमा करते हैं

विशाल ड्रॉपडाउन की असल समस्या

आप एक फ़ील्ड पर क्लिक करते हैं, ड्रॉपडाउन खुलता है, और सब कुछ ठिठक जाता है। पेज थोड़ी देर के लिए हक़-पकड़ करता है, स्क्रॉल चिपचिपा लगता है, और आप अपनी जगह खो देते हैं। भले ही ये सिर्फ़ एक सेकंड हो, ये फ़ॉर्म भरने की लय तोड़ देता है।

यह समस्या सबसे ज़्यादा एडमिन पैनल और अंदरूनी टूल्स में दिखती है क्योंकि वहाँ असली, मिश्रित डेटासेट होते हैं: ग्राहक, ऑर्डर, SKU, टिकट, लोकेशन, कर्मचारी। पब्लिक ऐप्स कभी-कभी विकल्प सीमित रख पाते हैं। एडमिन टूल्स अक्सर सब कुछ एक्सेस करते हैं, और फिर एक साधारण कंट्रोल भी एक छोटे डेटा ब्राउज़र जैसा बन जाता है।

क्या "बड़ा" है यह संदर्भ पर निर्भर करता है, लेकिन तकलीफ अक्सर लोगों की उम्मीद से पहले ही शुरू हो जाती है। सैकड़ों विकल्प अभी भी इस्तेमाल हो सकते हैं, पर स्कैनिंग धीमी होती है और गलत क्लिक बढ़ते हैं। हज़ारों तक पहुँचते ही यूज़र्स लेग महसूस करने लगते हैं और गलत चयन बढ़ते हैं। दसियों हज़ारों पर कंट्रोल ड्रॉपडाउन की तरह व्यवहार करना बंद कर देता है और परफ़ॉर्मेंस बग जैसा बनने लगता है। मिलियन्स पर यह ड्रॉपडाउन ही नहीं रह सकता।

असल समस्या सिर्फ़ गति नहीं है—यह सटीकता है।

लंबी लिस्ट में स्क्रॉल करते समय लोग गलत "John Smith", गलत "Springfield" या गलत प्रोडक्ट वेरिएंट चुन देते हैं, और फिर गलत डेटा सेव हो जाता है। इसकी कीमत बाद में सपोर्ट, री-एडिट्स और भरोसेमंद रिपोर्ट्स की कमी के रूप में दिखती है।

लक्ष्य साफ़ है: फ़ॉर्म को तेज़ और अनुमानयोग्य रखें बिना सटीकता खोए। आम तौर पर इसका मतलब है “सब कुछ लोड करो और स्क्रॉल करो” के बजाय ऐसे पैटर्न अपनाना जो उपयोगकर्ताओं को सही रिकॉर्ड जल्दी ढूंढने में मदद करें और सिस्टम केवल ज़रूरत के अनुरूप डेटा लाए।

धीमा होने का कारण (साधारण भाषा में)

एक विशाल ड्रॉपडाउन सरल लग सकता है, पर ब्राउज़र इसे असली काम समझकर रखता है। जब आप हज़ारों आइटम लोड करते हैं, तो पेज से हज़ारों option एलिमेंट बनाने, उन्हें मापने और स्क्रीन पर पेंट करने के लिए कहा जा रहा होता है। DOM और रेंडरिंग का ये खर्च तेज़ी से बढ़ता है, खासकर जब फ़ॉर्म में ऐसे कई फ़ील्ड हों।

धीमपन दिखने से पहले भी शुरू हो सकता है। कई एडमिन UI रेफ़रेंस लिस्ट (ग्राहक, उत्पाद, लोकेशन) प्रीलोड करते हैं ताकि बाद में ड्रॉपडाउन तुरंत खुले। इसका मतलब बड़ा API रिस्पॉन्स, नेटवर्क पर अधिक इंतज़ार, और JSON पार्सिंग में अधिक समय। अच्छी कनेक्शन पर भी बड़े पेलोड फ़ॉर्म के इन्टरेक्टिव होने के पल में देरी करते हैं।

फिर मेमोरी होती है। बड़े लिस्ट ब्राउज़र में रखने से RAM कम होता है। लो-एंड लैपटॉप, पुराने ब्राउज़र या कई टैब्स में यह स्टटर, टाइपिंग धीमी या ड्रॉपडाउन खुलने पर अस्थायी फ्रीज़ का कारण बन सकता है।

उपयोगकर्ता टेक्निकल कारणों की परवाह नहीं करते—उन्हें देरी दिखती है। सामान्य "माइक्रो-डिले" वही हैं जो फ्लो को तोड़ते हैं:

  • पेज लोड होता है, पर पहला क्लिक कुछ पलों के लिए कुछ भी नहीं करता।
  • ड्रॉपडाउन खुलने में लेग होता है, या स्क्रॉल जंप करता है।
  • दूसरे फ़ील्ड्स में टाइपिंग थोड़ी देरी से होती है।
  • सेव करना धीमा लगता है क्योंकि UI पहले से ही लोड में है।

300–600 ms का हिचकिचाना ज्यादा नहीं सुनाई देता, पर पूरे दिन डेटा एंट्री में बार-बार होने पर यह वास्तविक फ़्रस्ट्रेशन बन जाता है।

UX समस्याएं: यह सिर्फ़ परफ़ॉर्मेंस नहीं है

बड़े ड्रॉपडाउन सिर्फ़ धीमे महसूस नहीं होते। वे एक साधारण विकल्प को एक छोटे पहेली में बदल देते हैं, और उपयोगकर्ताओं को हर बार इसका मूल्य चुकाना पड़ता है।

लोग 2,000 आइटम को प्रभावी रूप से स्कैन नहीं कर सकते। भले ही लिस्ट तुरंत लोड हो जाए, आँख "हंट मोड" में चली जाती है: स्क्रॉल, ओवरशूट, वापस स्क्रॉल, दोबारा सोचना। जितनी बड़ी लिस्ट, उतना अधिक समय उपयोगकर्ता सही चीज़ चुनने की पुष्टि करने में बिताते हैं बजाय कार्य पूरा करने के।

गलत चयन भी आम हैं। ट्रैकपैड पर छोटा स्क्रोल हाइलाइट को हिला देता है, और क्लिक गलत रो पर जा गिरता है। गलती अक्सर बाद में दिखती है (गलत इनवॉइस ग्राहक, गलत वेयरहाउस, गलत कैटेगरी), जिससे अतिरिक्त काम और गंदे ऑडिट ट्रेल बनते हैं।

नेेटिव select की "सर्च" भी जाल है। कुछ प्लेटफ़ॉर्म पर टाइप करने पर उन अक्षरों से शुरू होने वाले अगले आइटम पर कूद जाता है; दूसरों पर व्यवहार अलग होता है या पता ही नहीं चलता। उपयोगकर्ता आपकी ऐप को दोष देते हैं, जबकि कंट्रोल सामान्य ड्रॉपडाउन जैसा व्यवहार कर रहा होता है।

लंबी लिस्ट डेटा क्वालिटी की समस्याओं को भी छिपा देती हैं। डुप्लिकेट, अस्पष्ट नाम, पुराने रिकॉर्ड जो आर्काइव होने चाहिए और केवल सुफ़िक्स से अलग विकल्प शोर में खो जाते हैं।

किसी भी "एक चुनें" फ़ील्ड के लिए एक त्वरित वास्तविकता जाँच:

  • क्या नया teammate पहली बार में सही चुन पाएगा?
  • क्या पास-पास की समान नामें हैं जो गलतियाँ आम बनाती हैं?
  • क्या कंट्रोल Mac, Windows और मोबाइल पर समान व्यवहार करता है?
  • अगर चयन गलत हुआ, क्या कोई तुरंत नोटिस करेगा?

कब ड्रॉपडाउन सही विकल्प है

हर select फ़ील्ड को सर्च की ज़रूरत नहीं होती। बड़े ड्रॉपडाउन तब कष्टदायक बनते हैं जब लिस्ट लंबी हो, बार-बार बदले या संदर्भ पर निर्भर हो। पर छोटी, स्थिर विकल्प श्रेणी वही है जिसमें ड्रॉपडाउन अच्छे होते हैं।

ड्रॉपडाउन तब अच्छा विकल्प है जब लोग उसे तेजी से स्कैन कर के सही मान पहचान लें बिना सोचे। जैसे order status, priority, user role, या country जैसी फील्ड। अगर लिस्ट समय के साथ लगभग वही रहती है और आमतौर पर एक स्क्रीन पर फिट हो जाती है, तो साधारण कंट्रोल जीतता है।

आम तौर पर अगर लिस्ट ~50–100 आइटम से कम है और लोग पढ़कर चुनते हैं बजाय टाइप करने के, तो आपको स्पीड और स्पष्टता दोनों मिलेंगी।

जब उपयोगकर्ता बार-बार एक जैसे पहले अक्षर टाइप करने लगें, तो यह संकेत है कि लिस्ट यादगार नहीं है और स्कैन करना सर्च करने से धीमा हो गया है।

कठोर रोक कोई भी लिस्ट है जो अक्सर बदलती है या लॉग-इन किए व्यक्ति पर निर्भर करती है। "Assigned to" अक्सर टीम, क्षेत्र और परमिशन पर निर्भर करता है। ऐसा ड्रॉपडाउन जो सारे उपयोगकर्ता लोड करता है, पुराना, भारी और भ्रमित करने वाला होगा।

अगर आप AppMaster जैसे टूल में बना रहे हैं, तो एक अच्छा नियम है: छोटे रेफरेंस डेटा (जैसे statuses) के लिए ड्रॉपडाउन रखें, और व्यवसाय के साथ बढ़ने वाली चीज़ों (ग्राहक, उत्पाद, स्टाफ) के लिए सर्च-आधारित पिकर पर स्विच करें।

टाइपहेड सर्च: सबसे सरल विकल्प

प्रोडक्शन-रेडी सोर्स कोड पाएं
नो-कोड बनाएं, फिर जब चाहें असली सोर्स कोड एक्सपोर्ट कर लें।
सोर्स कोड जनरेट करें

टाइपहेड (अक्सर ऑटोकम्प्लीट कहा जाता है) एक टेक्स्ट फ़ील्ड है जो टाइप करते ही खोजता है और मिलान वाले छोटे परिणाम दिखाता है। विशाल लिस्ट में स्क्रोल करवाने के बजाय, आप कीबोर्ड का उपयोग कर के रियल-टाइम में अपडेट होने वाले परिणामों में से चुनने देते हैं।

यह आम तौर पर पहला और सबसे अच्छा फ़िक्स है क्योंकि यह रेंडरिंग घटाता है, डाउनलोड घटाता है और सही आइटम ढूंढने की मेहनत कम करता है।

एक अच्छा टाइपहेड कुछ मूल नियम मानता है। यह खोज से पहले न्यूनतम अक्षरों का इंतज़ार करता है (आमतौर पर 2–3) ताकि UI "a" और "e" पर थ्रैश न करे। यह तेज़ नतीजे लौटाता है और लिस्ट को छोटा रखता है (अक्सर टॉप 10–20 मैच)। यह हर रिज़ल्ट में मैचिंग भाग को हाइलाइट करता है ताकि स्कैनिंग तेज़ हो। खाली स्टेट के लिए स्पष्ट "कोई परिणाम नहीं" संदेश और अगला कदम दिखाना भी ज़रूरी है।

कीबोर्ड व्यवहार लोगों की समझ से ज़्यादा मायने रखता है: Up/Down विकल्पों के बीच जाना चाहिए, Enter चयन करे, और Esc बंद करे। अगर ये बेसिक्स नहीं हैं तो टाइपहेड ड्रॉपडाउन से भी बदतर महसूस करवा सकता है।

छोटी डिटेल्स इसे स्थिर महसूस कराती हैं। एक सूक्ष्म लोडिंग स्टेट डबल-टाइपिंग और भ्रम को रोकता है। अगर कोई व्यक्ति "jo" टाइप करके रुका है, तो नतीजे जल्दी दिखने चाहिए। अगर वह "john sm" टाइप कर रहा है, तो लिस्ट बिना कूदे या हाइलाइट खोए संकुचित होनी चाहिए।

उदाहरण: एक एडमिन पैनल में ग्राहक चुनते समय "mi" टाइप करने पर "Miller Hardware", "Mina Patel" और "Midtown Bikes" दिख सकते हैं, जिसमें "mi" हिस्सा हाइलाइट हो। AppMaster में यह पैटर्न स्वाभाविक बैठता है क्योंकि UI एक ऐसा एंडपॉइंट कॉल कर सकता है जो केवल कुछ मैच लौटाए, पूरे टेबल को नहीं।

जब वाकई कोई मैच नहीं हो, तो सीधे और सहायक रहें: "'johns' के लिए कोई ग्राहक नहीं मिला। छोटा नाम आज़माएँ या ईमेल से खोजें।"

टाइपहेड लागू करने के कदम

टाइपहेड सबसे अच्छा तब काम करता है जब इसे एक छोटे सर्च टूल की तरह ट्रीट किया जाए, न कि एक छोटा ड्रॉपडाउन। लक्ष्य सीधा है: कुछ अच्छे मैच जल्दी से लाएँ, उपयोगकर्ता को चुनने दें, और चयन सुरक्षित रूप से सेव करें।

एक व्यावहारिक, तेज़ सेटअप

पहले उन एक-दो फ़ील्ड्स का चुनाव करें जिन्हें लोग वास्तव में याद रखते हैं। ग्राहकों के लिए आम तौर पर नाम या ईमेल होता है। उत्पादों के लिए यह SKU या आंतरिक कोड हो सकता है। यह चुनाव स्टाइलिंग से ज़्यादा मायने रखता है क्योंकि यह तय करता है कि उपयोगकर्ता पहले कुछ की-स्ट्रोक्स में नतीजे पाएंगे या नहीं।

फिर फ्लो को एंड-टू-एंड लागू करें:

  • खोज कुंजी चुनें (उदाहरण के लिए ग्राहक नाम और ईमेल) और न्यूनतम कैरेक्टर सेट करें (अक्सर 2–3)।
  • एक API एंडपॉइंट बनाएं जो क्वेरी टेक्स्ट और पेजिंग स्वीकार करे (उदाहरण q और limit, साथ में offset या cursor)।
  • केवल छोटा सेट लौटाएँ (अक्सर टॉप 20), बेस्ट मैच के हिसाब से सॉर्ट किया हुआ, और ID साथ में और वो लेबल फील्ड्स जो UI दिखाने चाहती है।
  • UI में लोडिंग स्टेट दिखाएँ, खाली परिणाम संभालें, और कीबोर्ड नेविगेशन सपोर्ट करें।
  • चुनी हुई रिकॉर्ड को ID के रूप में सेव करें, डिस्प्ले टेक्स्ट को केवल दिखाने के लिए रखें।

एक छोटा उदाहरण: अगर एक एडमिन "maria@" टाइप करता है, UI एंडपॉइंट को q=maria@ के साथ कॉल करता है और 20 मैच लौटते हैं। उपयोगकर्ता सही चुनता है और फॉर्म customer_id=12345 सेव कर लेता है। बाद में उस ग्राहक का नाम या ईमेल बदल भी जाए, आपकी सेव की हुई ID सही रहेगी।

अगर आप AppMaster में बना रहे हैं, तो यही विचार लागू होता है: सर्च के लिए बैकएंड एंडपॉइंट (पेजिंग के साथ) बनाएं, इसे UI फ़ील्ड से जोड़ें, और चुने गए वेल्यू को मॉडल ID से बाइंड करें।

दो डिटेल्स इसे उत्तरदायी बनाए रखते हैं: अनुरोधों को डिबाउंस करें (ताकि हर की-स्ट्रोक पर सर्वर न कॉल हो) और वर्तमान सेशन में हाल की क्वेरीज़ कैश करें।

तेज़ रहने वाले सर्वर-साइड फ़िल्टरिंग पैटर्न

फ़िल्टरिंग सर्वर पर ले जाएँ
पेजिंग के साथ एक बैकएंड सर्च API जोड़ें ताकि UI पूरी लिस्ट कभी डाउनलोड न करे।
एंडपॉइंट बनाएं

जब आपकी लिस्ट कुछ सौ आइटम से बड़ी हो जाती है, ब्राउज़र में फ़िल्टर करना अनुकूल नहीं रहता। पेज अंत में ऐसे डेटा डाउनलोड कर लेता है जिसकी उसे ज़रूरत ही नहीं, फिर थोड़ा सा स्लाइस दिखाने के लिए अतिरिक्त काम करता है।

सर्वर-साइड फ़िल्टरिंग फ्लो को उल्टा कर देती है: छोटा क्वेरी भेजें (जैसे "name starts with ali"), केवल पहला पेज मिलान वापस लें, और फ़ॉर्म को किसी भी साइज की तालिका पर भी उत्तरदायी रखें।

जवाबी समय को स्थिर रखने वाले पैटर्न

कुछ सरल नियम बड़ा फर्क डालते हैं:

  • सीमित पेज साइज लौटाएँ (उदाहरण 20–50 आइटम) और "next" टोकन या पेज नंबर शामिल करें।
  • बदलते डेटा के लिए cursor-based pagination पसंद करें ताकि रिकॉर्ड जोड़ने से गेप न बने।
  • सर्वर से केवल उन फ़ील्ड्स को माँगें जो UI को चाहिए (id और label), पूरे रिकॉर्ड नहीं।
  • स्थिर सॉर्टिंग उपयोग करें (उदाहरण के लिए name, फिर id) ताकि परिणाम कूदें नहीं।
  • वर्तमान उपयोगकर्ता की परमिशन क्वेरी में लागू करें, बाद में नहीं।

कैशिंग: सहायक पर आसान गलती के साथ

कॅशिंग लोकप्रिय सर्च को तेज़ कर सकती है, पर केवल तब जब नतीजा सुरक्षित रूप से दोबारा उपयोग करने योग्य हो। "टॉप देशों" या "कॉमन प्रोडक्ट कैटेगरी" अच्छे उम्मीदवार हैं। ग्राहक लिस्ट अक्सर नहीं होती, क्योंकि नतीजे परमिशन, अकाउंट स्टेटस या हाल की चेंजेस पर निर्भर कर सकते हैं।

अगर आप कैश करें, तो उसे अल्पकालिक रखें और यूजर रोल या टेनेंट को कैश की चाबी में शामिल करें। वरना एक व्यक्ति दूसरे का डेटा देख सकता है।

AppMaster में आम तौर पर इसका मतलब होता है एक ऐसा एंडपॉइंट बनाना जो सर्च स्ट्रिंग और करसर स्वीकार करे, फिर बैकएंड लॉजिक में एक्सेस रूल लागू करके अगला पेज लौटाए।

रेफरेंस-डेटा पैटर्न जो फ़ॉर्म्स को तेज़ रखते हैं

कई "धीमे ड्रॉपडाउन" की तकलीफ असल में "गंदा रेफरेंस डेटा" है। जब आपका फ़ील्ड किसी अन्य टेबल (ग्राहक, उत्पाद, लोकेशन) की ओर पॉइंट करता है, तो उसे रेफरेंस की तरह ट्रीट करें: ID स्टोर करें और लेबल को केवल डिस्प्ले मानें। यह रिकॉर्ड्स को छोटा रखता है, हिस्ट्री को री-राइट करने से बचाता है और खोज/फ़िल्टर को आसान बनाता है।

रेफरेंस टेबल्स को सादा और सुसंगत रखें। हर रो को स्पष्ट, यूनिक की दें (अक्सर न्यूमेरिक ID) और ऐसा नाम जो उपयोगकर्ता पहचानें। पुराने रिकॉर्ड मिटाने की बजाय एक active/inactive फ़्लैग दें ताकि पुराने रिकॉर्ड अभी भी रिज़ॉल्व हों पर नए चयन में न दिखें। यह टाइपहेड और सर्वर-साइड फ़िल्टरिंग में भी मदद करता है क्योंकि आप डिफ़ॉल्ट तौर पर active=true फ़िल्टर कर सकते हैं।

पहले यह तय करें कि क्या आपको रिकॉर्ड पर लेबल का स्नैपशॉट लेना चाहिए। एक इनवॉइस लाइन customer_id स्टोर कर सकती है, पर audit और विवाद के लिए customer_name_at_purchase भी स्टोर कर सकती है। रोज़मर्रा के एडमिन रिकॉर्ड्स के लिए अक्सर बेहतर होता है कि आप हमेशा जॉइन करके वर्तमान नाम दिखाएँ, ताकि टाइपो ठीक करने पर हर जगह सुधार दिखे। एक सरल नियम काम करता है: जहाँ अतीत को पढ़ने लायक बनाए रखना ज़रूरी हो वहाँ स्नैपशॉट लें।

स्पीड के लिए छोटी शॉर्टकट्स खोज घटाए बिना मदद करते हैं। उपयोगकर्ता-विशिष्ट "हाल ही में उपयोग हुए" आइटम ऊपर दिखाना अक्सर किसी UI ट्वीक से बेहतर काम करता है। फेवरेट्स तब मदद करते हैं जब लोग रोज़ उसी कुछ को चुनते हैं। सेफ डिफ़ॉल्ट्स (जैसे आख़िर उपयोग किया गया मान) कई इंटरैक्शन हटा सकते हैं। और उपयोगकर्ता मांगे बिना इनऐक्टिव आइटम छिपाना सूची को साफ़ रखता है।

उदाहरण: ऑर्डर पर वेयरहाउस चुनना। ऑर्डर पर warehouse_id स्टोर करें। वेयरहाउस नाम डिस्प्ले करें, पर उसे एम्बेड ना करें जब तक ऑडिट ट्रेल की ज़रूरत न हो। AppMaster में, यह साफ़ बैठता है: Data Designer में रेफरेंस मॉडल करें और बिज़नेस लॉजिक से "हाल की चयन" रिकॉर्ड करें बिना UI में हज़ारों विकल्प लोड किए।

सामान्य फ़ॉर्म परिदृश्य और बेहतर UI कंट्रोल्स

तेज़ एडमिन UI बनाएं
ऐसा एडमिन फॉर्म बनाएं जो ग्राहक और उत्पाद तालिकाओं के बढ़ने पर भी उत्तरदायी रहे।
निर्माण शुरू करें

बड़े ड्रॉपडाउन इसलिए दिखते हैं क्योंकि एक फ़ील्ड "सरल" लगती है: सूची से एक चुनें। पर असल एडमिन फ़ील्ड्स अक्सर अलग कंट्रोल्स चाहते हैं ताकि वे तेज़ और आसान रहें।

निर्भर फ़ील्ड्स क्लासिक केस हैं। अगर City, Country पर निर्भर है, तो पहले केवल Country लोड करें। उपयोगकर्ता Country चुनते ही उसके लिए Cities लोड करें। अगर City लिस्ट फिर भी बड़ी है, तो चुनी हुई Country के भीतर फ़िल्टर करने वाला टाइपहेड रखें ताकि क्वेरी संकुचित और तेज़ रहे।

मल्टी-सेलेक्ट फ़ील्ड्स (टैग्स, रोल्स, कैटेगरी) भी बड़ी लिस्ट्स से जल्दी टूट जाते हैं। एक सर्च-फर्स्ट मल्टी-सेलेक्ट जो टाइप करते समय परिणाम लोड करे और चुने हुए आइटम्स को चिप्स के रूप में दिखाए, हजारों विकल्प लोड करने की ज़रूरत हटा देता है।

एक और ज़रूरत है "फील्ड से नया बनाएं" जब विकल्प गायब हो। फ़ील्ड के पास या पिकर के अंदर "Add new…" एक्शन रखें। नया रिकॉर्ड बनाएं और फिर उसे ऑटो-सेलेक्ट कर दें। सर्वर पर वैलिडेशन करें (ज़रूरी फ़ील्ड, यूनिकनेस जहाँ जरुरी) और कॉन्फ्लिक्ट्स को स्पष्ट तरीके से हैंडल करें।

लंबी रेफरेंस लिस्ट्स (ग्राहक, उत्पाद, विक्रेता) के लिए एक लुकअप डायलॉग या सर्वर-साइड फ़िल्टरिंग वाला टाइपहेड उपयोग करें। रिज़ल्ट में संदर्भ दिखाएँ (उदाहरण: ग्राहक नाम साथ में ईमेल) ताकि सही ग्राहक चुनना आसान हो।

खराब नेटवर्क और ऑफ़लाइन क्षण बड़े लिस्ट्स को और भी बुरा बना देते हैं। कुछ विकल्प अंदरूनी ऐप्स को उपयोगी बनाए रखते हैं: हाल ही में चुने गए चयन कैश करें (जैसे आख़िर 10 ग्राहक) ताकि सामान्य विकल्प तुरन्त दिखें, स्पष्ट लोडिंग स्टेट दिखाएँ, रिट्राई सपोर्ट करें बिना यूज़र इनपुट मिटाए और जब लुकअप लोड हो रहे हों तब भी बाकी फ़ील्ड्स भरने दें।

अगर आप AppMaster में फॉर्म बनाते हैं, तो ये पैटर्न एक साफ़ डेटा मॉडल (रेफरेंस टेबल्स) और फ़िल्टर किए गए सर्च के लिए सर्वर-साइड एंडपॉइंट्स के रूप में अच्छी तरह मैप होते हैं, ताकि डेटा बढ़ने पर UI उत्तरदायी रहे।

सामान्य गलतियाँ जो इसे और बुरा करती हैं

गलत चयन घटाएँ
नतीजों में ईमेल, कोड या शहर दिखाएं ताकि उपयोगकर्ता गलत रिकॉर्ड चुनना बंद कर दें।
संदर्भ जोड़ें

अधिकांश धीमे फ़ॉर्म किसी एक बड़ी तालिका की वजह से धीमे नहीं होते—वे इसलिए धीमे होते हैं क्योंकि UI बार-बार महँगा ऑपरेशन दोहराता है।

एक क्लासिक गलती है पूरा लिस्ट "बस एक बार" पेज लोड पर लोड करना। 2,000 आइटम के साथ यह ठीक लगता है। एक साल बाद यह 200,000 हो जाता है, और हर फॉर्म एक लंबे इंतज़ार, अधिक मेमोरी उपयोग और भारी पेलोड के साथ खुलता है।

सर्च भी तब फेल कर सकता है जब यह तेज़ हो। अगर फ़ील्ड केवल डिस्प्ले नेम से खोजता है, तो उपयोगकर्ता फंस जाते हैं। असल लोग उन चीज़ों से खोजते हैं जो उनके पास होती हैं: ग्राहक ईमेल, आंतरिक कोड, फोन नंबर, या अकाउंट के आख़िर के 4 अंक।

कुछ समस्याएँ कंट्रोल को पीड़ा देने के लिए पर्याप्त हैं:

  • कोई डिबाउंस नहीं, इसलिए UI हर की-स्ट्रोक पर अनुरोध भेजता है।
  • बड़े पेलोड (पूरा रिकॉर्ड) बजाय केवल मैच की छोटी लिस्ट के।
  • इनऐक्टिव या डिलीट किए आइटम हैंडल नहीं होते, इसलिए सेव किए फ़ॉर्म बाद में खाली दिखते हैं।
  • फॉर्म लेबल टेक्स्ट स्टोर करता है बजाय ID के, जिससे डुप्लिकेट और गंदे रिपोर्ट बनते हैं।
  • परिणाम पर्याप्त संदर्भ नहीं दिखाते (उदाहरण: दो "John Smith" एंट्री बिना किसी भेदभाव के)।

एक वास्तविक परिदृश्य: एक एजेंट ग्राहक चुनता है। ग्राहक "Acme" दो बार मौजूद है, एक इनऐक्टिव है, और फॉर्म ने लेबल स्टोर कर लिया। अब इनवॉइस गलत रिकॉर्ड की ओर इशारा करता है और कोई भरोसेमंद सुधार नहीं कर सकता।

AppMaster में एक सुरक्षित डिफ़ॉल्ट यह है कि रेफरेंसेज़ को आपके डेटा मॉडल में IDs के रूप में रखें और UI में केवल लेबल दिखाएँ, जबकि आपका सर्च एंडपॉइंट छोटे, फ़िल्टर किए हुए मैच लौटाएगा।

शिप करने से पहले त्वरित चेकलिस्ट

शिप करने से पहले हर "लिस्ट से चुनें" फ़ील्ड को प्रदर्शन और UX जोखिम दोनों के रूप में इलाज करें। ये फ़ील्ड टेस्ट डेटा के साथ अक्सर ठीक लगते हैं, पर असली रिकॉर्ड्स आने पर बिखर जाते हैं।

  • अगर लिस्ट ~100 आइटम से बढ़ सकती है, तो टाइपहेड सर्च या किसी अन्य सर्चेबल पिकर पर स्विच करें।
  • सर्च रिस्पॉन्स छोटे रखें। प्रति क्वेरी ~20–50 नतीजे लौटाना लक्ष्य रखें, और उपयोगकर्ता को स्पष्ट संकेत दें कि उन्हें और टाइप करना चाहिए।
  • स्थिर मान सेव करें, लेबल नहीं। रिकॉर्ड ID स्टोर करें और सर्वर पर वैलिडेट करें, परमिशन चेक सहित, फ़ॉर्म स्वीकार करने से पहले।
  • स्टेट्स जानबूझकर हैंडल करें: सर्च करते वक्त लोडिंग इंडिकेटर, कोई मैच नहीं होने पर सहायक खाली स्टेट, और अनुरोध फेल होने पर स्पष्ट त्रुटियाँ।
  • माउस के बिना भी तेज़ बनाएं। कीबोर्ड नेविगेशन सपोर्ट करें और उपयोगकर्ता को नाम, ईमेल या कोड पेस्ट करने दें।

यदि आप नो-कोड टूल जैसे AppMaster में बना रहे हैं, तो यह अक्सर एक छोटा बदलाव होता है: एक इनपुट UI, एक सर्च एंडपॉइंट, और आपके बिज़नेस लॉजिक में सर्वर-साइड वैलिडेशन। हाई-ट्रैफिक फ़ॉर्म्स पर यह रोज़मर्रा के काम में बड़ा फर्क बनाएगा।

एक यथार्थपरक उदाहरण: एडमिन पैनल में ग्राहक चुनना

बड़े ड्रॉपडाउन जल्दी बदलें
यूज़र्स टाइप करते वक्त केवल 10–20 मिलान दिखाने वाला सर्चेबल पिकर बनाएं।
AppMaster आज़माएँ

सपोर्ट टीम एक एडमिन UI में काम करती है जहाँ वे आने वाले हर टिकट को सही ग्राहक को असाइन करते हैं। सरल लगता है, जब तक कि ग्राहक लिस्ट 8,000 रिकॉर्ड तक न बढ़ जाए।

"पहले" संस्करण एक विशाल ड्रॉपडाउन उपयोग करता है। खुलने में देर लगती है, स्क्रॉलिंग लेग करती है, और ब्राउज़र को हज़ारों विकल्प मेमोरी में रखना पड़ता है। इससे भी बुरा, लोग गलत "Acme" चुन लेते हैं क्योंकि डुप्लिकेट, पुराने नाम और छोटे फ़र्क जैसे "ACME Inc" बनाम "Acme, Inc." मौजूद हैं। परिणाम निरंतर छोटा समय नुकसान और बाद की गंदगी रिपोर्टिंग है।

"बाद में" संस्करण ड्रॉपडाउन की जगह टाइपहेड रखता है। एजेंट तीन अक्षर टाइप करता है, फॉर्म जल्दी से सर्वश्रेष्ठ मिलान दिखाता है, वे चुनते हैं और आगे बढ़ जाते हैं। फ़ील्ड अतिरिक्त संदर्भ दिखा सकती है (ईमेल डोमेन, अकाउंट ID, शहर) ताकि सही ग्राहक स्पष्ट हो।

तेज़ बनाए रखने के लिए सर्च ब्राउज़र में नहीं, सर्वर पर होता है। UI केवल पहले 10–20 मिलान मांगता है, जिन्हें प्रासंगिकता के अनुसार सॉर्ट किया जाता है (अक्सर सटीक प्रिफिक्स मैच और हाल ही में उपयोग के मिश्रण) और स्थिति द्वारा फ़िल्टर किया जाता है (उदा. केवल active ग्राहकों)। यह वह पैटर्न है जो लंबी लिस्ट्स को रोज़ाना की झंझट बनने से रोकता है।

एक छोटा डेटा हाइजीन स्टेप नए फ्लो को बहुत सुरक्षित बनाता:

  • नामकरण नियम सेट करें (उदाहरण: कानूनी नाम + शहर या डोमेन)।
  • प्रमुख फ़ील्ड्स (ईमेल डोमेन, टैक्स ID, बाहरी ID) पर डुप्लिकेट रोकें।
  • एक "display name" फ़ील्ड पूरे प्रॉडक्ट में सुसंगत रखें।
  • मर्ज किए रिकॉर्ड्स को इनऐक्टिव चिह्नित करें, पर इतिहास रखें।

AppMaster जैसे टूल में यह आम तौर पर सर्चेबल रेफरेंस फ़ील्ड बनाना होता है जो यूज़र टाइप करते समय मैच लौटाने वाले API एंडपॉइंट से जुड़ा हो, बजाय हर ग्राहक को फॉर्म में पहले से लोड करने के।

अगले कदम: एक फ़ील्ड अपग्रेड करें और पैटर्न मानकीकृत करें

एक ऐसा ड्रॉपडाउन चुनें जिसके बारे में हर कोई शिकायत करता है। अच्छा उम्मीदवार वह फ़ील्ड है जो कई स्क्रीन पर दिखता है (Customer, Product, Assignee) और जो कुछ सौ विकल्प पार कर चुका है। सिर्फ़ उस एक फ़ील्ड को बदलने से आपको जल्दी सबूत मिलेंगे, बिना हर फ़ॉर्म को फिर से लिखे।

शुरू करने के लिए तय करें कि फ़ील्ड असल में किसकी ओर पॉइंट करती है: एक रेफरेंस टेबल (ग्राहक, उपयोगकर्ता, SKU) जिसमें स्थिर ID और कुछ डिस्प्ले फ़ील्ड्स (नाम, ईमेल, कोड) हों। फिर एक सर्च एंडपॉइंट परिभाषित करें जो UI को तेज़ी से केवल वही लौटाए जो चाहिए, छोटे पेज में।

एक रोलआउट योजना जो असली टीमों में काम करती है:

  • उस फ़ील्ड के लिए ड्रॉपडाउन की जगह टाइपहेड सर्च लगाएँ।
  • आंशिक टेक्स्ट और पेजिंग सपोर्ट करने वाला सर्वर-साइड सर्च जोड़ें।
  • ID के साथ एक लेबल और एक सेकेंडरी हिंट (जैसे ईमेल) लौटाएँ।
  • चयनित मान ID के रूप में रखें, न कि कॉपी किया गया टेक्स्ट।
  • जहाँ भी वही एंटिटी चुनी जाती है, उसी पैटर्न को दोहराएँ।

परिवर्तन को मापने के लिए कुछ बुनियादी संख्याएँ रखें। फ़ील्ड खोलने का समय मापें (यह तुरंत महसूस होना चाहिए), चयन समय (यह घटना चाहिए), और त्रुटि दर (गलत चयन, री-एडिट्स या यूज़र्स का हार मानना)। 5–10 वास्तविक उपयोगकर्ताओं के साथ हल्का पहले/बाद में परीक्षण भी दिखा सकता है कि आपने दर्द कम किया है या नहीं।

यदि आप AppMaster में एडमिन टूल बनाते हैं, तो आप Data Designer में रेफरेंस डेटा मॉडल कर सकते हैं और Business Process Editor में सर्वर-साइड सर्च लॉजिक जोड़ सकते हैं, ताकि UI बढ़ते डेटा के साथ भी छोटे स्लाइस के लिए अनुरोध करे बजाय सब कुछ लोड करने के। टीमें अक्सर इसे appmaster.io पर बने अंदरूनी ऐप्स में एक मानक पैटर्न के रूप में अपनाती हैं क्योंकि यह तालिकाओं के बढ़ने पर साफ़ तरीके से स्केल करता है।

अंत में, अपनी टीम के लिए एक मानक लिखें जिसे वे फिर दोहरा सकें: सर्च से पहले न्यूनतम अक्षर, डिफ़ॉल्ट पेज साइज, लेबल कैसे फ़ॉर्मेट हों, और कोई नतीजा नहीं होने पर क्या होता है। सुसंगतता हर नए फ़ॉर्म को तेज़ रखने की कुंजी है।

सामान्य प्रश्न

कब मुझे ड्रॉपडाउन बंद कर के सर्च पर स्विच कर देना चाहिए?

ड्रॉपडाउन तब ठीक रहता है जब विकल्प छोटी, स्थिर और तेज़ी से स्कैन किए जा सकने योग्य हों। यदि लोग बिना टाइप किए सही विकल्प नहीं ढूंढ पा रहे या लिस्ट बढ़ने वाली है, तो इसे रोज़ाना की परेशानी बन जाने से पहले सर्च-आधारित पिकर में बदल दें।

ड्रॉपडाउन के लिए "बहुत ज़्यादा" कितने विकल्प होते हैं?

कई टीमों को कम-से-कम सैकड़ों विकल्प में ही परेशानी दिखने लगती है क्योंकि स्कैन धीमा होता है और गलत क्लिक बढ़ते हैं। हज़ारों पर प्रदर्शन और गलत चयन सामान्य हो जाते हैं, और दसियों हज़ारों पर सामान्य ड्रॉपडाउन वाजिब कंट्रोल नहीं रह जाता।

सबसे सरल अच्छा टाइपहेड सेटअप क्या है?

2–3 अक्षर की न्यूनतम सीमा रखें और 10–20 मिलान लौटाएँ। कीबोर्ड से चयन तेज़ बनाएं और हर रिज़ल्ट में इतना संदर्भ दिखाएँ (उदाहरण: नाम के साथ ईमेल या कोड) कि डुप्लिकेट अलग दिखें।

मैं ऑटोकंप्लीट से API पर ज़्यादा लोड कैसे रोकूँ?

इनपुट को डिबाउंस करें ताकि हर की-स्ट्रोक पर अनुरोध न भेजा जाए, और फ़िल्टरिंग सर्वर पर कराएँ। UI को रेंडर करने के लिए केवल ज़रूरी फ़ील्ड ही लौटाएँ ताकि प्रतिक्रिया छोटी रहे।

सर्वर-साइड फ़िल्टरिंग लोड-ऑल करने से बेहतर क्यों है?

बड़ा डेटा ब्राउज़र में लोड करने की बजाय सर्वर पर फ़िल्टर और पेजिंग करें। UI को छोटा क्वेरी भेजकर सिर्फ़ एक पेज मिलान लें, इस तरह तब भी प्रदर्शन ठहरा रहता है जब तालिका हज़ारों से मिलियन तक बढ़े।

क्या मेरा फॉर्म ऑप्शन लेबल या रिकॉर्ड ID स्टोर करे?

सेलेक्ट किए गए रिकॉर्ड की ID सहेजें, न कि डिस्प्ले लेबल। नाम और लेबल बदलते रहते हैं; IDs रखने से टूटे हुए रेफ़रेंस नहीं बनते और रिपोर्टिंग/जॉइन आसान रहती है।

गलत "John Smith" जैसे चयन कैसे घटाऊँ?

रिज़ल्ट में अतिरिक्त पहचान संबंधी विवरण दिखाएँ—जैसे ईमेल, शहर, आंतरिक कोड या अकाउंट नंबर का सूफिक्स—ताकि सही विकल्प स्पष्ट हो। साथ ही जहाँ संभव हो डुप्लिकेट कम करें और डिफ़ॉल्ट रूप से इनऐक्टिव रिकॉर्ड छिपाएँ।

Country → City जैसे निर्भर फ़ील्ड्स के लिए सबसे अच्छा तरीका क्या है?

दोनों लिस्ट एक साथ न लोड करें। पहले Country लोड करें, फिर Country चुनते ही City के लिए अनुरोध भेजें। अगर City लिस्ट फिर भी बड़ी है, तो उसी Country के भीतर स्कोप किया हुआ टाइपहेड रखें।

धीमी नेटवर्क पर इन पिकर्स को कैसे उपयोगी बनाऊँ?

प्रति-उपयोगकर्ता हाल ही में उपयोग किए गए चयन कैश रखें ताकि सामान्य विकल्प तुरंत दिखें। बाकी के लिए सर्च रखें जो सुरक्षित रूप से रिट्राई कर सके। लोडिंग और एरर स्टेट स्पष्ट रखें ताकि बाकी फॉर्म भरना जारी रखा जा सके।

मैं AppMaster में यह पैटर्न कैसे लागू करूँ?

एक बैकएंड एंडपॉइंट बनाएं जो क्वेरी लेते हुए छोटे, पेज किए हुए मिलान लौटाए (IDs और डिस्प्ले फ़ील्ड के साथ)। UI में टाइपहेड को उस एंडपॉइंट से बाइंड करें, सुझाव दिखाएँ और चुनी हुई ID को मॉडल में सेव करें; बैकएण्ड में एक्सेस रूल लागू करें।

शुरू करना आसान
कुछ बनाएं अद्भुत

फ्री प्लान के साथ ऐपमास्टर के साथ प्रयोग करें।
जब आप तैयार होंगे तब आप उचित सदस्यता चुन सकते हैं।

शुरू हो जाओ