هل هناك أي طريقة لتسريع هذا الحل لـ jQuery غير حساس لحالة الأحرف: يحتوي على محدد؟
-
05-07-2019 - |
سؤال
وجدت هذا الحل للحصول على 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 "> هذا البرنامج المساعد لإنجاز ذلك.