هل هناك أي طريقة لتسريع هذا الحل لـ jQuery غير حساس لحالة الأحرف: يحتوي على محدد؟

StackOverflow https://stackoverflow.com/questions/1407434

سؤال

وجدت هذا الحل للحصول على jQuery غير حساس لحالة الأحرف :contains محدد على StackOverflow.إنه يعمل بشكل رائع، ولكنه يأتي على حساب الأداء.هل يجد أي شخص آخر أن هذا الحل بطيء بعض الشيء؟

أنا أستخدم :contains محدد للبحث في الجدول.يقوم المستخدم بكتابة سلسلة بحث في مربع نص.لكل ضغطة مفتاح، يقوم بالبحث في الجدول عن تلك السلسلة، ويعرض فقط الصفوف التي تحتوي على تلك السلسلة عبر :contains محدد.قبل تنفيذ الحل غير الحساس لحالة الأحرف، كان هذا البحث سريعًا وسريعًا.الآن مع هذا الحل، يتم قفله لمدة قصيرة بعد كل ضغطة على المفتاح.

هل هناك أي أفكار حول كيفية تسريع هذا الحل؟

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

المحلول

لقد وجدت حلاً آخر للبحث غير الحساس لحالة الأحرف على Google (انظر إريك فان) والذي يختلف قليلاً عن الذي كنت أستخدمه في الأصل.

إبداعي:

return jQuery(a).text().toUpperCase().indexOf(m[3].toUpperCase())>=0;

إريك فان:

return (a.textContent || a.innerText || "").toLowerCase().indexOf(m[3].toLowerCase())>=0;

وبمقارنة الاثنين، يمكنك أن ترى أن حل Eric Phan يصل إلى سمات DOM مباشرة ويستخدمها toLowerCase() بدلاً من toUpperCase().الأخير لا يهم حقًا، لكن الأول هو ما أدى بالفعل إلى تحسين أداء البحث غير الحساس لحالة الأحرف.مجرد تغيير الحل الأصلي للاستخدام (a.textContent || a.innerText || "") بدلاً من jQuery(a).text() صنعت كل الفارق!

الآن أشعر بالفضول بعض الشيء، لذا إليك سؤال المتابعة:ما هي الصفقة مع jQuery.text()؟لماذا هو بطيء جدا؟لدي افتراضاتي، ولكن أود أن أسمع ما يقوله الخبراء.

وأخيرا، شكرا لكل من استجاب.أنا أقدر مساعدتكم.=)

نصائح أخرى

هل يمكن في محاولة للتحقق محدد مرة واحدة فقط، بعد قيام المستخدم توقف الكتابة لفترة محددة من الزمن، وليس لكل ضغطة.

وعلى سبيل المثال، تطبيق بسيط:

والاستعمال:

$("#textboxId").keyup(function () {
  typewatch(function () {
    // executed only 500 ms after the user stopped typing.
  }, 500);

والتنفيذ:

var typewatch = function(){
    var timer = 0;  // store the timer id
    return function(callback, ms){
        clearTimeout (timer);  // if the function is called before the timeout
        timer = setTimeout(callback, ms); // clear the timer and start it over
    }  
}();

ويمكنك أن تحاول عدم التحقق بعد كل ضغطة مفتاح، ولكن ربما في الثانية بعد ضغطة الماضي تم الضغط عليه. بهذه الطريقة كنت عدم التحقق باستمرار في حين أن المستخدم هو كتابة بل فحص عند انتهاء المستخدم أو التوقف الكتابة.

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

وهنا متابعة السؤال: ما هو   التعامل مع jQuery.text ()؟ لماذا كل شيء   بطيئة جدا؟

وأظن أنه بطيء بسبب $(a) (تحويل عنصر DOM إلى كائن مسج) وليس .text().

لإضافة إلى ما قاله جايسون، يمكنك محاولة استخدام <لأ href = "http://notetodogself.blogspot.com/2008/12/jquery-responsiveness-plugin-for-fast.html" يختلط = "نوفولو noreferrer "> هذا البرنامج المساعد لإنجاز ذلك.

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