2009-05-03 16 views
45

के प्रदर्शन में सुधार करने के लिए कैसे मैं साइट के लिए jquery स्वत: पूर्ण का उपयोग करने की योजना बना रहा था और एक परीक्षण संस्करण लागू किया है। मैं अब प्रत्येक चरित्र इनपुट के लिए तारों की एक नई सूची पुनर्प्राप्त करने के लिए एक AJAX कॉल का उपयोग कर रहा हूँ। समस्या यह है कि नई सूची आबादी से पहले 1.5 गुना धीमी हो जाती है। स्वतः पूर्ण करने का सबसे अच्छा तरीका क्या है? मैं केकफ़्पी का उपयोग कर रहा हूं और बस एक खोज कर रहा हूं और 10 वस्तुओं की सीमा के साथ।Jquery autocomplete

+0

हटाने 1.5s स्वत: पूर्ण के प्रतीक्षा समय (है कि, समय यह आप अतिरिक्त वर्णों को लिखने नहीं कर रहे हैं सुनिश्चित करने के लिए इंतजार कर रहा है है) शामिल हैं? – Powerlord

+0

यह प्रश्न कैसा दिखता है? 10 वस्तुओं के लिए 1.5s हास्यास्पद रूप से धीमा है। एसओएलआर के बारे में नीचे मेरी दूसरी टिप्पणी देखें। लाखों पंक्तियों के साथ हमारे लिए एक आकर्षण की तरह काम किया। – Ligemer

+0

सर्वोत्तम सुधार ... चयनित jquery प्लगइन का उपयोग करें! –

उत्तर

52

This article - कैसे flickr स्वत: पूर्णता बहुत अच्छी पढ़ी जाती है। मेरे पास पढ़ने के कुछ "वाह" अनुभव थे।

"यह विजेट प्रदर्शन के इस स्तर को पाने के लिए एक 200 मि.से तहत में अपने संपर्कों, जावास्क्रिप्ट में के सभी की सूची, (यह भी 10,000+ संपर्कों के साथ सदस्यों के लिए सच है)। डाउनलोड करता आदेश में , हमें पूरी तरह से पर पुनर्विचार करना था कि हम ग्राहक को सर्वर से डेटा कैसे भेजते हैं। "

+1

लेख के लिए अच्छा लिंक :) लेख के लिए –

+1

+1। उत्तम सामग्री। – josh3736

+1

तो वे सिर्फ उपयोगकर्ता को एक सीएसवी-सूची भेजते हैं? – tstenner

4

इस मामले में गति के लिए वास्तविक समस्या मुझे विश्वास है कि डेटाबेस पर क्वेरी चलाने के लिए समय लगता है। यदि आपकी क्वेरी की गति में सुधार करने का कोई तरीका नहीं है तो हो सकता है कि आपकी खोज को विस्तारित करने के लिए कुछ अधिक रैंकिंग परिणामों के साथ अधिक आइटम शामिल करें, आप प्रत्येक दूसरे चरित्र को एक खोज कर सकते हैं और क्लाइंट साइड पर 20-30 परिणामों के माध्यम से फ़िल्टर कर सकते हैं।

यह प्रदर्शन की उपस्थिति में सुधार कर सकता है, लेकिन 1.5 सेकंड पर, मैं पहले क्वेरी की गति में सुधार करने की कोशिश करता हूं।

इसके अलावा, यदि आप हमें कुछ और जानकारी दे सकते हैं तो मैं आपको एक और विशिष्ट उत्तर देने में सक्षम हो सकता हूं।

शुभकामनाएं!

+0

हाँ मैं भी इसका प्रस्ताव देने जा रहा था .. कुछ क्लाइंट पक्ष पर फ़िल्टरिंग करें। – Niyaz

+0

दोस्त! एसओएलआर का प्रयोग करें। आप सीधे यूआरएल हिट कर सकते हैं। मैंने अभी इसे एक परियोजना में एकीकृत करना समाप्त कर दिया है और यह आपके डीबी क्वेरी मुद्दों को हल करेगा। आप डेटा को MySQL से एसओएलआर में भी लोड कर सकते हैं (जिसे मैं केकेएफपी से मानता हूं)। – Ligemer

11

1.5-सेकंड अंतराल स्वत: पूर्ण सेवा प्रदान करने के लिए बहुत व्यापक अंतराल हैं।

  1. सबसे पहले अपनी क्वेरी और डीबी कनेक्शन अनुकूलित करें। मेमोरी कैशिंग के साथ अपने डीबी कनेक्शन जीवित रखने का प्रयास करें।
  2. परिणाम कैशिंग विधियों का उपयोग करें यदि आपकी सेवा का पुन: प्राप्त करने को अनदेखा करने के लिए अत्यधिक उपयोग किया जाता है।
  3. क्लाइंट पर पुराने अनुरोधों को रखने के लिए क्लाइंट कैश (एक जेएस सूची) का उपयोग करें। यदि उपयोगकर्ता वापस टाइप करता है और मिटा देता है, तो यह उपयोगी होगा। परिणाम बैकएंड पॉइंट के बजाय फ्रंटएंड कैश से आएंगे।
  4. क्लाइंट पक्ष पर रेगेक्स फ़िल्टरिंग महंगा नहीं होगा, आप इसे एक मौका दे सकते हैं।
5

कुछ अनुकूलन करने से पहले आपको पहले विश्लेषण करना चाहिए कि बोतल-गर्दन कहां है। यह जानने का प्रयास करें कि प्रत्येक चरण कितनी देर तक (इनपुट → अनुरोध → डीबी क्वेरी → प्रतिक्रिया → प्रदर्शन) लेता है। शायद केकेपीएचपी कार्यान्वयन में देरी हो रही है कि प्रत्येक चरित्र में प्रवेश न करें।

4

PHP/SQL पर सर्वर पक्ष धीमा है।

PHP/SQL का उपयोग न करें। मेरा स्वत: पूर्ण सी ++ पर लिखा गया है, और लुकअप करने के लिए हैशटेबल्स का उपयोग करता है। प्रदर्शन here देखें।

यह सेलेरॉन-300 कंप्यूटर, फ्रीबीएसडी, अपाचे/फास्टसीजीआई है।

और, आप देखते हैं, विशाल शब्दकोशों पर तेज़ी से चलता है। 10,000,000 रिकॉर्ड एक समस्या नहीं है।

इसके अलावा, प्राथमिकताओं, गतिशील अनुवादों और अन्य सुविधाओं का समर्थन करता है।

+0

मुझे अपने कोड के लिए लिंक दें ... – Lucky

+1

http://olegh.cc.st/autocomp-dist-64.tar.bz2 – maxihatop

+0

http://olegh.cc.st/autocomplete.html - उपलब्ध नहीं –

1

स्वत: पूर्ण स्वतः धीमा नहीं है, हालांकि आपका कार्यान्वयन निश्चित रूप से हो सकता है। पहली चीज़ जो मैं जांचूंगा वह आपके देरी विकल्प का मूल्य है (jQuery दस्तावेज़ देखें)। इसके बाद, मैं आपकी क्वेरी जांचूंगा: आप केवल 10 रिकॉर्ड वापस ला रहे हैं, लेकिन क्या आप उन 10 रिकॉर्ड प्राप्त करने के लिए एक विशाल टेबल स्कैन कर रहे हैं? क्या आप डेटाबेस से रिकॉर्ड में एक टन वापस संग्रह में ला रहे हैं और फिर डेटाबेस पर सर्वर-साइड पेजिंग करने के बजाय संग्रह से 10 आइटम ले रहे हैं? एक साधारण सूचकांक मदद कर सकता है, लेकिन आपको सुनिश्चित करने के लिए कुछ परीक्षण करना होगा।

36

फ्लाई पर क्वेरी करने के बजाय अपनी सूची ऑब्जेक्ट को प्रीलोड करने का प्रयास करें।

इसके अलावा स्वतः पूर्ण रूप से 300 एमएस विलंब होता है।
शायद देरी

$(".selector").autocomplete({ delay: 0 }); 
+0

+1। मैं भूल गया कि यह एक कारण है। मुझे नहीं पता कि डिफ़ॉल्ट देरी का समय 300 एमएस क्यों है लेकिन 0 एमएस नहीं है। –

+1

यहां +1 भी ठीक है यदि आपके प्रश्न ठीक हैं। यदि आपके प्रश्न 10 सूची वस्तुओं के लिए लंबे समय तक लेते हैं, तो आपके प्रश्नों में कुछ गड़बड़ है और यह आपको आवश्यक उत्तर नहीं है। – Ligemer

+1

आधिकारिक JQuery जो देरी विकल्प के लिए डिफ़ॉल्ट मान कहता है https://api.jqueryui.com/autocomplete/#option-delay –

संबंधित मुद्दे