Commit d42920ce authored by karl's avatar karl Committed by Commit bot

[es6] Use SubString in String{Starts,Ends}With

Much faster and constant than always searching the whole string

````
var allCodePoints = [];
for (var i = 0; i < 65536; i++) allCodePoints[i] = i;
var allCharsString = String.fromCharCode.apply(String, allCodePoints);

function bench(search) {
  var counter = 0;
  print(search + " found at " + allCharsString.startsWith(search));
  var start = Date.now();
  while (counter++ < 5000000) {
    allCharsString.startsWith(search);
  }
  var end = Date.now();
  print(end - start);
  return counter;
}

print("single character");
bench("\u0000");
bench("\u0050");
bench("\u1000");
````

OLD

single character
 found at true
374
P found at false
559
က found at false
13492

NEW

single character
 found at true
261
P found at false
146
က found at false
146

BUG=v8:4384
LOG=N

Review URL: https://codereview.chromium.org/1321853006

Cr-Commit-Position: refs/heads/master@{#30599}
parent 0304b299
...@@ -997,7 +997,7 @@ function StringStartsWith(searchString /* position */) { // length == 1 ...@@ -997,7 +997,7 @@ function StringStartsWith(searchString /* position */) { // length == 1
return false; return false;
} }
return %StringIndexOf(s, ss, start) === start; return %_SubString(s, start, start + ss_len) === ss;
} }
...@@ -1028,7 +1028,7 @@ function StringEndsWith(searchString /* position */) { // length == 1 ...@@ -1028,7 +1028,7 @@ function StringEndsWith(searchString /* position */) { // length == 1
return false; return false;
} }
return %StringLastIndexOf(s, ss, start) === start; return %_SubString(s, start, start + ss_len) === ss;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment