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
Trying to find the fastest trim for IE6
<script>
/*
Source of es5_shim(str): https://github.com/kriskowal/es5-shim/blob/master/es5-shim.js
*/
var es5_shim = function(){
var ws = "\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003" + "\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028" + "\u2029\uFEFF";
ws = "[" + ws + "]";
var trimBeginRegexp = new RegExp("^" + ws + ws + "*"),
trimEndRegexp = new RegExp(ws + ws + "*$");
return function(str) {
return str.replace(trimBeginRegexp, "").replace(trimEndRegexp, "");
};
}();
function trim27a(str) {
var c;
for (var i = 0; i < str.length; i++) {
c = str.charCodeAt(i);
if (c == 32 || c == 10 || c == 13 || c == 9 || c == 12 || c == 11 || c == 160 || c == 5760 || c == 6158 || c == 8192 || c == 8193 || c == 8194 || c == 8195 || c == 8196 || c == 8197 || c == 8198 || c == 8199 || c == 8200 || c == 8201 || c == 8202 || c == 8232 || c == 8233 || c == 8239 || c == 8287 || c == 12288) continue;
else break;
}
for (var j = str.length - 1; j >= i; j--) {
c = str.charCodeAt(j);
if (c == 32 || c == 10 || c == 13 || c == 9 || c == 12 || c == 11 || c == 160 || c == 5760 || c == 6158 || c == 8192 || c == 8193 || c == 8194 || c == 8195 || c == 8196 || c == 8197 || c == 8198 || c == 8199 || c == 8200 || c == 8201 || c == 8202 || c == 8232 || c == 8233 || c == 8239 || c == 8287 || c == 12288) continue;
else break;
}
return str.substring(i, j + 1);
}
function trim27(str) {
var c;
for (var i = 0; i < str.length; i++) {
c = str.charCodeAt(i);
if (c == 32 || c == 10 || c == 13 || c == 9 || c == 12) continue;
else break;
}
for (var j = str.length - 1; j >= i; j--) {
c = str.charCodeAt(j);
if (c == 32 || c == 10 || c == 13 || c == 9 || c == 12) continue;
else break;
}
return str.substring(i, j + 1);
}
function trim8(str) { return str.replace(/^\s*((?:[\S\s]*\S)?)\s*$/, '$1'); }
function trim27b(str) {
var c;
for (var i = 0; i < str.length; i++) {
c = str.charCodeAt(i);
if (c === 32 || c === 10 || c === 13 || c === 9 || c === 12) continue;
else break;
}
for (var j = str.length - 1; j >= i; j--) {
c = str.charCodeAt(j);
if (c === 32 || c === 10 || c === 13 || c === 9 || c === 12) continue;
else break;
}
return str.substring(i, j + 1);
}
var whiteSpaceCharacters = { 32: true, 10: true, 13: true, 9: true, 12: true };
function trim27c(str) {
var c;
for (var i = 0; i < str.length; i++) {
c = str.charCodeAt(i);
if (whiteSpaceCharacters.hasOwnProperty(c)) continue;
else break;
}
for (var j = str.length - 1; j >= i; j--) {
c = str.charCodeAt(j);
if (whiteSpaceCharacters.hasOwnProperty(c)) continue;
else break;
}
return str.substring(i, j + 1);
}
function trim27d(str) {
var c;
for (var i = 0; i < str.length; i++) {
c = str.charCodeAt(i);
if (whiteSpaceCharacters[c]) continue;
else break;
}
for (var j = str.length - 1; j >= i; j--) {
c = str.charCodeAt(j);
if (whiteSpaceCharacters[c]) continue;
else break;
}
return str.substring(i, j + 1);
}
var whiteSpaceCharacterStrings = { " ": true, "\u000A": true, "\u000D": true, "\u0009": true, "\u000C": true };
function trim27e(str) {
var l = str.length;
for (var i = 0; i < l; i++) {
if (whiteSpaceCharacterStrings[str.charAt(i)]) continue;
else break;
}
for (var j = l - 1; j >= i; j--) {
if (whiteSpaceCharacterStrings[str.charAt(j)]) continue;
else break;
}
return str.substring(i, j + 1);
}
var whiteSpaceCharacterArray = [];
whiteSpaceCharacterArray[9] = true;
whiteSpaceCharacterArray[10] = true;
whiteSpaceCharacterArray[12] = true;
whiteSpaceCharacterArray[13] = true;
whiteSpaceCharacterArray[32] = true;
function trim27f(str) {
var l = str.length;
for (var i = 0; i < l; i++) {
if (whiteSpaceCharacterArray[str.charCodeAt(i)]) continue;
else break;
}
for (var j = l - 1; j >= i; j--) {
if (whiteSpaceCharacterArray[str.charCodeAt(j)]) continue;
else break;
}
return str.substring(i, j + 1);
}
function trim_native(str) {
return str.trim(); // should throw is no such function
}
var inp = " \n\n \n\n a \n a\n a\n a\n a \n\t\ta\t\ta\njahsdkjahkjshdakjhsdkahskd akhsjdh akjshd kashdkajhsd kajshd \nkauyiuqhwep iasldk qpwoie ad \n askdjaslkdjaslkjdaoiur qowioqwhr aspodiquw ijasod iqwiue pqowipoqiw epoqiwpeo iaslkjdqur \t kjahsdkj hakshd\nkajhdk\nk as d \t\n".split('\n');
function e(f) {
var x = [];
for (i = 0; i < inp.length; i++) {
x.push(f(inp[i]));
}
return x;
}
</script>
Ready to run.
Test | Ops/sec | |
---|---|---|
trim-native |
| ready |
trim27 |
| ready |
trim27a |
| ready |
es5_shim |
| ready |
trim27b |
| ready |
trim27c |
| ready |
trim27d |
| ready |
trim8 |
| ready |
trim27e |
| ready |
trim27f |
| ready |
You can edit these tests or add more tests to this page by appending /edit to the URL.