startswith

JavaScript performance comparison

Revision 27 of this test case created by

Preparation code


      
      <script>
Benchmark.prototype.setup = function() {
  // s1 is a match
  // s2 fails on first char
  // s3 fails on second char
  var s1 = "okodjdkdjdsllsdkddkdkdkkdkdloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremlorem";
  var s2 = "odjdkdjdsllsdkddkdkdkkdkdloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremok";
  var s3 = "dkjdkdjdsllsdkddkdkdkkdkdloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremloremlorem";
  
  /* ignore buggy implementation
  function startsWith(s,starter) {
    // BUG: Will crash if s.length is less than starter.length.
    for (var i = 0, cur_c; i < starter.length; i++) {
      cur_c = starter[i];
      if (s[i] !== starter[i]) {
        return false;
      }
    }
    return true;
  }
  */
  
  function startsWith2(str, prefix) {
    if (str.length < prefix.length)
      return false;
    for (var i = prefix.length - 1;
      (i >= 0) && (str[i] === prefix[i]); --i)
      continue;
    return i < 0;
  }
  
  function startsWith3(str, prefix) {
    var length = prefix.length;
    if (str.length < length)
      return false;
    for (var i = 0;
      (i < length) && (str[i] === prefix[i]); ++i)
      continue;
    return i === length;
  }
  
  function startsWith4(s, starter) {
    var prefixlen = starter.length;
    if (s.length < prefixlen)
      return false;
    var i = 0;
    while (i < prefixlen && s[i] === starter[i]) {
      ++i;
    }
    return (i === prefixlen);
  }
  
  // github.com/tunnckoCore
  function startsWithWhile(a, b) {
    // if (Array.isArray(string)) {
    //   return string[+position || 0] === target;
    // }
  
    var i = b.length;
    if (a.length < i) {
      return false;
    }
  
    while (i--) {
      if (a[i] !== b[i]) {
        return false;
      }
    }
  
    return true;
  }
  
  // github.com/tunnckoCore/starts-with | npm.im/starts-with
  function startsWithTricky(string, target, position) {
    // if (Array.isArray(string)) {
    //   return string[+position || 0] === target;
    // }
  
    var stringLength = string ? string.length : 0;
    var targetLength = target ? target.length : 0;
  
    if (stringLength < targetLength) {
      return false;
    }
  
    position = position ? (+position || 0) : 0;
  
    if (string.charAt(position) !== target.charAt(position)) {
      return false;
    }
  
    return true;
  }

};
</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
indexOf
var a = (s1.indexOf('ok'));
var b = (s2.indexOf('ok'));
var c = (s3.indexOf('ok'));
pending…
lastIndexOf
var a = (s1.lastIndexOf('ok', 0));
var b = (s2.lastIndexOf('ok', 0));
var c = (s3.lastIndexOf('ok', 0));
pending…
startsWith2
var a = startsWith2(s1, 'ok');
var b = startsWith2(s2, 'ok');
var c = startsWith2(s3, 'ok');
pending…
startsWith3
var a = startsWith3(s1, 'ok');
var b = startsWith3(s2, 'ok');
var c = startsWith3(s3, 'ok');
pending…
slice
var a = (s1.slice(0, 2) == 'ok');
var b = (s2.slice(0, 2) == 'ok');
var c = (s3.slice(0, 2) == 'ok');
pending…
startsWith4
var a = startsWith4(s1, 'ok');
var b = startsWith4(s2, 'ok');
var c = startsWith4(s3, 'ok');
pending…
startsWithWhile
var a = startsWithWhile(s1, 'ok');
var b = startsWithWhile(s2, 'ok');
var c = startsWithWhile(s3, 'ok');
pending…
string.startsWith
var a = s1.startsWith('ok');
var b = s2.startsWith('ok');
var c = s3.startsWith('ok');
pending…
string.substring
var a = s1.substring(0, 2) === 'ok';
var b = s2.substring(0, 2) === 'ok';
var c = s3.substring(0, 2) === 'ok';
pending…
startsWithTricky
var a = startsWithTricky(s1, 'ok');
var b = startsWithTricky(s2, 'ok');
var c = startsWithTricky(s3, 'ok');
pending…
startsWithEs6
var a = s1.startsWith('ok');
var b = s2.startsWith('ok');
var c = s3.startsWith('ok');
pending…

Compare results of other browsers

Revisions

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

0 Comments