ما أعلى من الأداء المستخدمة في الحلقات:.indexOf(str) أو .مباراة(regex)?

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

سؤال

لدي هذه المجموعة.النموذج على الصفحة و يبدو أن تمتص الكثير من وقت المعالجة:

        Array.prototype.findInArray = function(searchStr) {
          var returnArray = false;
          for (i=0; i<this.length; i++) {
            if (typeof(searchStr) == 'function') {
              if (searchStr.test(this[i])) {
                if (!returnArray) { returnArray = [] }
                returnArray.push(i);
              }
            } else {
              var regexp = new RegExp(".*" + searchStr + ".*");
              if (this[i].match(regexp)) {
                if (!returnArray) { returnArray = [] }
                returnArray.push(i);
              }
            }
          }
          return returnArray;
        }
هل كانت مفيدة؟

المحلول

وأولا وقبل كل شيء، كنت أعرف أنك لا يكون لديك ". *" على جانبي، أليس كذلك؟ وهناك تعبير عادي بالفعل افتراضيا تطابق في أي مكان داخل السلسلة. ثانيا، إذا كنت مجرد البحث عن سلسلة مستمرة، ولست بحاجة لاستخدام أي من الاشياء المتقدمة التي توفر التعابير العادية، ثم انها بالتأكيد أسرع لاستخدام .indexOf(). بالإضافة إلى أن الطريقة سوف لا يكون لديك ما يدعو للقلق الهروب الحروف التي لها معنى خاص.

نصائح أخرى

والتعابير العادية يمكن أن تختلف إلى حد كبير. أتصور أن لذلك، وضعت بشكل جيد التعبير العادي البسيط قد تعمل بنفس السرعة أو أسرع من indexOf (). من ناحية أخرى، فإن تعبير عادي معقدة تحتاج إلى مزيد من الوقت لأنه يفعل المزيد من العمل.

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

ما هو أسوأ من ذلك هو خلق لكم من جديد التعبير العادي كائن على كل التكرار من حلقة تعريفه مرة خارج الحلقة أو تمر عليه كحجة.

أيضا, من أجل هذا الاستخدام ، اختبار أفضل و أسرع من المباراة.

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