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
Comparing two RegExp and String parsing methods for getting a value from a cookie.
Then adding in Lawnchair's cookie parser, for fun.
<script src="//ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js">
</script>
<script src="https://raw.github.com/carhartl/jquery-cookie/master/jquery.cookie.js">
</script>
<script>
function generateCookieString(count) {
var name = "name",
stringParts = [],
array = new Array(6);
for (var j = 0; j < count; j++) {
stringParts.push(name + j + '=' + array.join(name + j));
}
return stringParts.join(';');
}
function string(name, cookie) {
// ERROR for "foo=bar" and "ffoo=bar"!
setPos = cookie.indexOf(name + '='), stopPos = cookie.indexOf(';', setPos);
// Dataset does not exist, attempt to register default
return !~setPos ? null : cookie.substring(
setPos, ~stopPos ? stopPos : undefined).split('=')[1];
}
function stringFix(name, cookie) {
setPos = (';' + cookie).indexOf(';' + name + '='), stopPos = cookie.indexOf(';', setPos);
// Dataset does not exist, attempt to register default
return !~setPos ? null : cookie.substring(
setPos, ~stopPos ? stopPos : undefined).split('=')[1];
}
function regexp(name, cookie) {
var regex = new RegExp(name + '=([^;]*)', 'g'),
result = regex.exec(cookie);
return result[1] || null;
}
function getStrCookie(name, cookie) {
var regex = new RegExp("(^" + name + "=([a-zA-Z-_0-9]+);?.*)|(.*;\\s?" + name + "=([a-zA-Z-_0-9]+);?.*)"),
ret
return cookie.match(regex) ? cookie.replace(regex, "$2$4") : '';
}
function lawnchair(name, cookie) {
var nameEQ = name + '=',
ca = cookie.split(';'),
len = ca.length,
i = 0,
c;
for (; i < len; i++) {
c = ca[i];
while (c.charAt(0) == ' ') {
c = c.substring(1, c.length);
}
if (c.indexOf(nameEQ) == 0) {
return c.substring(nameEQ.length, c.length);
}
}
return null;
}
function simplesplits(name, cookie) {
var parts = cookie.split(name);
return parts.length === 0 ? null : parts[1].split('=')[1].split(';')[0];
}
function CookieHandler() {
function CookieParser() {
var kvs = document.cookie.split(";");
function trim(stringToTrim) {
return stringToTrim.replace(/^\s+|\s+$/g, "");
}
function parseCookies() {
var result = {};
$.each(kvs, function(i, v) {
var kvp = v.split("=");
result[trim(kvp[0])] = kvp[1];
});
return result;
}
return {
cookies: function() {
return parseCookies();
}
};
}
return {
getCookies: CookieParser().cookies,
getCookie: function(cookieName) {
return CookieParser().cookies()[cookieName] || null;
}
};
}
var cache = [];
function cacheCookie(key, cookie) {
if (!cache[key]) cookie.replace(/\b([^;=]*)=([^;]*)/g, function(m, k, v) {
cache[k] = v
});
return cache[key]
};
var numberOfCookie = 30;
var cookieString = generateCookieString(numberOfCookie);
</script>
Ready to run.
Test | Ops/sec | |
---|---|---|
String |
| ready |
RegExp |
| ready |
Lawnchair |
| ready |
Simple splits |
| ready |
CookieHandler |
| ready |
$.cookie |
| ready |
getStrCookie |
| ready |
cached Cookie (1st call) |
| ready |
cached Cookie (all cookies) |
| ready |
RegExp (all cookies) |
| ready |
You can edit these tests or add more tests to this page by appending /edit to the URL.