replace while vs replace all

JavaScript performance comparison

Test case created by Thomas Coopman

Preparation code


      
      <script>
Benchmark.prototype.setup = function() {
  function getSymbol(symbolName) {
    return 'replace';
  }
  
  
  function escapeRegExp(string) {
    return string.replace(/([.*+?^=!:${}()|\[\]\/\\])/g, "\\$1");
  }
  
  
  
  function SymbolReplacer(s) {
    this.alreadyReplaced = [];
    this.stringToReplace = s;
  };
  
  var symbolReplacer = new SymbolReplacer('Sed ut $perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem $qui, eaque ipsa quae ab illo inventore veritatis $et quasi architecto beatae vitae dicta sunt $perspiciatis. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos $qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, $qui $perspiciatis ipsum quia $perspiciatis sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit $qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum $qui dolorem eum fugiat quo voluptas nulla pariatur? Sed ut $perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem $qui, eaque ipsa quae ab illo inventore veritatis $et quasi architecto beatae vitae dicta sunt $perspiciatis. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos $qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, $qui $perspiciatis ipsum quia $perspiciatis sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit $qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum $qui dolorem eum fugiat quo voluptas nulla pariatur? Sed ut $perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem $qui, eaque ipsa quae ab illo inventore veritatis $et quasi architecto beatae vitae dicta sunt $perspiciatis. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos $qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, $qui $perspiciatis ipsum quia $perspiciatis sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit $qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum $qui dolorem eum fugiat quo voluptas nulla pariatur? Sed ut $perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem $qui, eaque ipsa quae ab illo inventore veritatis $et quasi architecto beatae vitae dicta sunt $perspiciatis. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos $qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, $qui $perspiciatis ipsum quia $perspiciatis sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit $qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum $qui dolorem eum fugiat quo voluptas nulla pariatur? Sed ut $perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem $qui, eaque ipsa quae ab illo inventore veritatis $et quasi architecto beatae vitae dicta sunt $perspiciatis. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos $qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, $qui $perspiciatis ipsum quia $perspiciatis sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit $qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum $qui dolorem eum fugiat quo voluptas nulla pariatur?');

};
</script>

Test runner

Warning! For accurate results, please disable Firebug before running the tests. (Why?)

Java applet disabled.

Testing in CCBot 2.0.0 / Other 0.0.0
Test Ops/sec
replace all occurrences
SymbolReplacer.prototype.replace = function() {
  var symbolPattern = /\$([a-zA-Z]\w*)/g;
  var matches;
  while (matches = symbolPattern.exec(this.stringToReplace)) {
    var symbolReplace = matches[0];
    var symbolName = matches[1];
    this.replaceAllInstances(symbolReplace, symbolName);
  }
};

SymbolReplacer.prototype.replaceAllInstances = function(symbolReplace, symbolName) {
  if (getSymbol(symbolName) !== null && this.alreadyReplaced.indexOf(symbolName) === -1) {
    this.alreadyReplaced.push(symbolName);
    var toReplace = new RegExp(escapeRegExp(symbolReplace), 'g');
    this.stringToReplace = this.stringToReplace.replace(toReplace, getSymbol(symbolName));
  }
};

symbolReplacer.replace();
pending…
run over each
SymbolReplacer.prototype.replace = function() {
  var symbolPattern = /\$([a-zA-Z]\w*)/g;
  var matches;
  while (matches = symbolPattern.exec(this.stringToReplace)) {
    var symbolReplace = matches[0];
    var symbolName = matches[1];
    this.replaceAllInstances(symbolReplace, symbolName);
  }
};

SymbolReplacer.prototype.replaceAllInstances = function(symbolReplace, symbolName) {
  if (getSymbol(symbolName) !== null) {
    var toReplace = new RegExp(escapeRegExp(symbolReplace));
    this.stringToReplace = this.stringToReplace.replace(symbolReplace, getSymbol(symbolName));
  }
};


symbolReplacer.replace();
pending…

You can edit these tests or add even more tests to this page by appending /edit to the URL.

Compare results of other browsers

0 Comments