Cookie Parsing
JavaScript performance comparison
Info
Comparing two RegExp and String parsing methods for getting a value from a cookie.
Then adding in Lawnchair's cookie parser, for fun.
Preparation code
<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 = 1; j <= count; j++)
{
stringParts.push(name + j + '=' + array.join(name+j));
}
return stringParts.join(';');
}
function string(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) {
var regex = new RegExp("(^" + name + "=([a-zA-Z-_0-9]+);?.*)|(.*;\\s?" + name + "=([a-zA-Z-_0-9]+);?.*)"),
cookie = document.cookie;
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 cookieString = generateCookieString(30);
</script>
Preparation code output
Test runner
Warning! For accurate results, please disable Firebug before running the tests. (Why?)
Java applet disabled.
| Test | Ops/sec | |
|---|---|---|
String |
|
pending… |
RegExp |
|
pending… |
Lawnchair |
|
pending… |
Simple splits |
|
pending… |
CookieHandler |
|
pending… |
$.cookie |
|
pending… |
getStrCookie |
|
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. Here’s a list of current revisions for this page:
- Revision 1: published by BrianMB
- Revision 3: published by BrianMB
- Revision 4: published by BrianMB
- Revision 5: published
- Revision 6: published
- Revision 7: published
- Revision 8: published
- Revision 9: published by taf2
- Revision 10: published
- Revision 11: published
- Revision 13: published
- Revision 14: published
0 comments