jsPerf.app is an online JavaScript performance benchmark test runner & jsperf.com mirror. It is a complete rewrite in homage to the once excellent jsperf.com now with hopefully a more modern & maintainable codebase.
jsperf.com URLs are mirrored at the same path, e.g:
https://jsperf.com/negative-modulo/2
Can be accessed at:
https://jsperf.app/negative-modulo/2
<script>
var s1 = "jhonny",
s2 = "ponny";
function levenshtein1(str1, str2) {
var l1 = str1.length,
l2 = str2.length;
if (Math.min(l1, l2) === 0) {
return Math.max(l1, l2);
}
var i = 0,
j = 0,
d = [];
for (i = 0; i <= l1; i++) {
d[i] = [];
d[i][0] = i;
}
for (j = 0; j <= l2; j++) {
d[0][j] = j;
}
for (i = 1; i <= l1; i++) {
for (j = 1; j <= l2; j++) {
d[i][j] = Math.min(
d[i - 1][j] + 1, d[i][j - 1] + 1, d[i - 1][j - 1] + (str1.charAt(i - 1) === str2.charAt(j - 1) ? 0 : 1));
}
}
return d[l1][l2];
}
function levenshtein2(s1, s2) {
if (s1 === s2) {
return 0;
}
if (s1.length === 0) {
return s2.length;
}
if (s2.length === 0) {
return s1.length;
}
var v0 = [],
v1 = [],
j = 0,
k = 0;
s1 = s1.split('');
s2 = s2.split('');
for (j = 0; j <= s1.length; j++) {
v0[j] = j;
}
for (k = 1; k <= s2.length; k++) {
v1[0] = k;
for (j = 0; j < s1.length; j++) {
v1[j + 1] = Math.min(v0[j + 1] + 1, v1[j] + 1, v0[j] + ((s1[j] === s2[k - 1]) ? 0 : 1));
}
var v_tmp = v0;
v0 = v1;
v1 = v_tmp;
}
return v0[s1.length];
}
var levenshtein3 = function(min, split) {
// Levenshtein Algorithm Revisited - WebReflection
try {
split = !("0")[0]
} catch (i) {
split = true
};
return function(a, b) {
if (a == b) return 0;
if (!a.length || !b.length) return b.length || a.length;
if (split) {
a = a.split("");
b = b.split("")
};
var len1 = a.length + 1,
len2 = b.length + 1,
I = 0,
i = 0,
d = [
[0]
],
c, j, J;
while (++i < len2)
d[0][i] = i;
i = 0;
while (++i < len1) {
J = j = 0;
c = a[I];
d[i] = [i];
while (++j < len2) {
d[i][j] = min(d[I][j] + 1, d[i][J] + 1, d[I][J] + (c != b[J]));
++J;
};
++I;
};
return d[len1 - 1][len2 - 1];
}
}(Math.min, false);
function levenshtein4(a, b) {
var i;
var j;
var cost;
var d = new Array();
if (a.length == 0) {
return b.length;
}
if (b.length == 0) {
return a.length;
}
for (i = 0; i <= a.length; i++) {
d[i] = new Array();
d[i][0] = i;
}
for (j = 0; j <= b.length; j++) {
d[0][j] = j;
}
for (i = 1; i <= a.length; i++) {
for (j = 1; j <= b.length; j++) {
if (a.charAt(i - 1) == b.charAt(j - 1)) {
cost = 0;
}
else {
cost = 1;
}
d[i][j] = Math.min(d[i - 1][j] + 1, d[i][j - 1] + 1, d[i - 1][j - 1] + cost);
if (
i > 1 && j > 1 && a.charAt(i - 1) == b.charAt(j - 2) && a.charAt(i - 2) == b.charAt(j - 1)) {
d[i][j] = Math.min(
d[i][j], d[i - 2][j - 2] + cost)
}
}
}
return d[a.length][b.length];
}
</script>
Ready to run.
Test | Ops/sec | |
---|---|---|
Function 1 |
| ready |
Function 2 |
| ready |
Function 3 |
| ready |
Function 4 |
| ready |
You can edit these tests or add more tests to this page by appending /edit to the URL.