billywhizz
11/8/2010 - 4:49 PM

header-test.js

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));