Quali sono le prestazioni più elevate utilizzate nei loop di grandi dimensioni: .indexOf (str) o .match (regex)?

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

Domanda

Ho questo array.prototype sulla mia pagina e sembra che stia risucchiando molto tempo di elaborazione:

        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;
        }
È stato utile?

Soluzione

Prima di tutto, sai che non devi avere il ". * " su entrambi i lati, giusto? Un'espressione regolare già di default corrisponderà ovunque all'interno della stringa. In secondo luogo, se stai solo cercando una stringa costante e non hai bisogno di usare nessuna delle cose avanzate offerte dalle espressioni regolari, allora è sicuramente più veloce usare .indexOf () . Inoltre, non dovrai preoccuparti di sfuggire a personaggi che hanno un significato speciale.

Altri suggerimenti

Le espressioni regolari possono variare notevolmente. Immagino che un'espressione regolare semplice e ben realizzata potrebbe funzionare più velocemente o più velocemente di indexOf (). D'altra parte, un'espressione regolare complessa avrebbe bisogno di più tempo poiché sta facendo più lavoro.

Hai anche problemi di implementazione del browser in termini di clouding. A meno di scrivere un ciclo temporizzato per misurare il tempo impiegato da ciascun browser per eseguire ogni tipo di rilevamento con le tue esigenze specifiche, non puoi davvero ottenere una risposta solida.

Quel che è peggio è che crei un nuovo oggetto espressione regolare su ogni iterazione del ciclo- definiscilo una volta, al di fuori del ciclo, o passalo come argomento.

Inoltre, per questo uso, test è migliore e più veloce di corrispondenza .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top