سؤال

كنت أخطط لاستخدام الإكمال التلقائي لـ jquery لموقع ما وقمت بتنفيذ إصدار تجريبي.أنا الآن أستخدم استدعاء ajax لاسترداد قائمة جديدة من السلاسل لكل حرف مُدخل.تكمن المشكلة في أن الأمر يصبح بطيئًا إلى حد ما، حيث يستغرق الأمر 1.5 ثانية قبل ملء القائمة الجديدة.ما هي أفضل طريقة لجعل الإكمال التلقائي سريعًا؟أنا أستخدم cakephp وأقوم فقط بالبحث وبحد أقصى 10 عناصر.

هل كانت مفيدة؟

المحلول

هذه المقالة - حول كيفية فليكر لا الإكمال التلقائي هو قراءة جيدة للغاية. كان لي عدد قليل من "نجاح باهر" تجارب قراءته.

<اقتباس فقرة>   

و"هذه القطعة بتحميل قائمة بجميع   جهات الاتصال الخاصة بك، في جافا سكريبت، في   تحت 200MS (وهذا صحيح حتى ل   أعضاء من ذوي 10،000+ الأسماء). في   من أجل الحصول على هذا المستوى من   أداء، كان علينا أن تماما   إعادة التفكير في كيفية إرسال البيانات من   الملقم إلى العميل ".

نصائح أخرى

وحاول تحميلها مسبقا وجوه قائمتك بدلا من القيام الاستعلام على الطاير.

وأيضا الإكمال التلقائي لديه تأخير 300 مللي ثانية افتراضيا.
ربما إزالة تأخير

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

تعد الفواصل الزمنية البالغة 1.5 ثانية بمثابة فجوات واسعة جدًا لخدمة خدمة الإكمال التلقائي.

  1. أولاً ، قم بتحسين اتصالات الاستعلام و DB.حاول الحفاظ على اتصال DB الخاص بك على قيد الحياة مع التخزين المؤقت للذاكرة.
  2. استخدم أساليب التخزين المؤقت للنتيجة إذا كانت خدمتك تستخدم بشكل كبير لتجاهل إعادة التوترات.
  3. استخدم ذاكرة التخزين المؤقت للعميل (قائمة JS) للاحتفاظ بالطلبات القديمة على العميل.إذا قام المستخدم بالكتابة مرة أخرى ومسحها، فسيكون ذلك مفيدًا.ستأتي النتائج من ذاكرة التخزين المؤقت للواجهة الأمامية بدلاً من نقطة الواجهة الخلفية.
  4. لن تكون تصفية Regex من جانب العميل مكلفة، يمكنك منحها فرصة.

وقبل أن أفعل بعض التحسينات يجب تحليل أولا حيث زجاجة الرقبة. في محاولة لمعرفة المدة التي تستغرقها كل خطوة (المدخلات → → طلب استجابة → الاستعلام ديسيبل → عرض) يأخذ. ربما تنفيذ للكيك لديه تأخير لا لتقوم بإرسال طلب لكل حرف تم إدخالها.

والقضية الحقيقية للسرعة في هذه الحالة أعتقد هو الوقت الذي يستغرقه لتشغيل الاستعلام على قاعدة البيانات. إذا كان هناك أي وسيلة لتحسين سرعة الاستعلام الخاص بك، ثم ربما توسيع البحث لتشمل المزيد من البنود مع بعض النتائج مرتبة عالية في أنه يمكنك إجراء البحث واحدة كل شخصية أخرى، وتصفية من خلال 20-30 النتائج على جانب العميل.

وهذا قد تحسين مظهر من الأداء، ولكن في 1.5 ثانية، وأود أن أول محاولة لتحسين سرعة الاستعلام.

وبخلاف ذلك، إذا كنت تستطيع أن تعطينا بعض مزيد من المعلومات قد أكون قادرا على إعطاء إجابة أكثر تحديدا.

وحظا سعيدا!

جانب الخادم على PHP / SQL بطيء.

لا تستخدم PHP / SQL. بلدي الإكمال التلقائي مكتوبة على C ++، ويستخدم hashtables لبحث. نرى أداء هنا .

وهذا هو سيليرون 300 جهاز كمبيوتر، فري، اباتشي / FastCGI.

و، كما ترى، يدير سريعة على قواميس ضخمة. 10،000،000 السجلات ليست مشكلة.

وبالإضافة إلى ذلك، يدعم أولويات، ترجمة ديناميكية، وميزات أخرى.

والإكمال التلقائي في حد ذاته ليس بطيئا، على الرغم من أن التطبيق الخاص بك بالتأكيد يمكن أن يكون. أول شيء أود أن تحقق هي قيمة خيار التأخير (انظر مستندات مسج). وبعد ذلك، أود أن تحقق الاستعلام الخاص بك: قد يكون فقط اعادة 10 السجلات ولكن تفعلون مسح الجدول ضخمة للحصول على تلك السجلات 10؟ هل اعادة طن من السجلات من قاعدة البيانات إلى مجموعة ثم أخذ 10 عناصر من المجموعة بدلا من القيام الترحيل من جانب الخادم على قاعدة البيانات؟ A مؤشر بسيط قد يساعد، ولكن هل ستكون لدينا للقيام ببعض التجارب للتأكد.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top