Skip to content

Instantly share code, notes, and snippets.

@billywhizz
Created November 8, 2010 16:49
Show Gist options
  • Save billywhizz/667925 to your computer and use it in GitHub Desktop.
Save billywhizz/667925 to your computer and use it in GitHub Desktop.
function IncomingMessage() {
var msg = this;
msg.headers = {};
msg.complete = false;
}
IncomingMessage.prototype._addHeaderLine = function (field, value) {
var dest;
if (this.complete) {
dest = this.trailers;
} else {
dest = this.headers;
}
switch (field) {
// Array headers:
case 'set-cookie':
if (field in dest) {
dest[field].push(value);
} else {
dest[field] = [value];
}
break;
// Comma separate. Maybe make these arrays?
case 'accept':
case 'accept-charset':
case 'accept-encoding':
case 'accept-language':
case 'connection':
case 'cookie':
if (field in dest) {
dest[field] += ', ' + value;
} else {
dest[field] = value;
}
break;
default:
if (field.slice(0,2) == 'x-') {
// except for x-
if (field in dest) {
dest[field] += ', ' + value;
} else {
dest[field] = value;
}
} else {
// drop duplicates
if (!(field in dest)) dest[field] = value;
}
break;
}
};
var message = new IncomingMessage();
var runs = process.ARGV[2];
var then = new Date().getTime();
for(var i=0; i<runs; i++) {
message._addHeaderLine("header" + i, "hello");
}
var now = new Date().getTime();
console.log("node-http: " + (now - then));
IncomingMessage.prototype._addHeaderLine = function (field, value) {
var dest;
if (this.complete) {
dest = this.trailers;
} else {
dest = this.headers;
}
if (field in dest) {
dest[field].push(value);
} else {
dest[field] = [value];
}
};
var message = new IncomingMessage();
var runs = process.ARGV[2];
var then = new Date().getTime();
for(var i=0; i<runs; i++) {
message._addHeaderLine("header" + i, "hello");
}
var now = new Date().getTime();
console.log("all-array: " + (now - then));
IncomingMessage.prototype._addHeaderLine = function (field, value) {
var dest;
if (this.complete) {
dest = this.trailers;
} else {
dest = this.headers;
}
if (field in dest) {
dest[field] += ', ' + value;
} else {
dest[field] = value;
}
};
var message = new IncomingMessage();
var runs = process.ARGV[2];
var then = new Date().getTime();
for(var i=0; i<runs; i++) {
message._addHeaderLine("header" + i, "hello");
}
var now = new Date().getTime();
console.log("all-string: " + (now - then));
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment