http: switch on string values

Long ago, V8 was much faster switching on string lengths than values.
That is no longer the case, so we can simplify a couple of methods.

PR-URL: https://github.com/nodejs/node/pull/18351
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Kyle Farnung <kfarnung@microsoft.com>
Reviewed-By: Anatoli Papirovski <apapirovski@mac.com>
Reviewed-By: Gireesh Punathil <gpunathi@in.ibm.com>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Jon Moss <me@jonathanmoss.me>
This commit is contained in:
Seth Brenith 2018-01-23 16:04:17 -08:00 committed by Jon Moss
parent 6c1906ab3e
commit aba6bc34a1
2 changed files with 46 additions and 23 deletions

View File

@ -0,0 +1,30 @@
'use strict';
const common = require('../common.js');
const { OutgoingMessage } = require('_http_outgoing');
const bench = common.createBenchmark(main, {
value: [
'X-Powered-By',
'Vary',
'Set-Cookie',
'Content-Type',
'Content-Length',
'Connection',
'Transfer-Encoding'
],
n: [1e6],
});
function main(conf) {
const n = +conf.n;
const value = conf.value;
const og = new OutgoingMessage();
bench.start();
for (var i = 0; i < n; i++) {
og.setHeader(value, '');
}
bench.end(n);
}

View File

@ -510,17 +510,14 @@ OutgoingMessage.prototype.setHeader = function setHeader(name, value) {
const key = name.toLowerCase();
this[outHeadersKey][key] = [name, value];
switch (key.length) {
case 10:
if (key === 'connection')
switch (key) {
case 'connection':
this._removedConnection = false;
break;
case 14:
if (key === 'content-length')
case 'content-length':
this._removedContLen = false;
break;
case 17:
if (key === 'transfer-encoding')
case 'transfer-encoding':
this._removedTE = false;
break;
}
@ -583,21 +580,17 @@ OutgoingMessage.prototype.removeHeader = function removeHeader(name) {
var key = name.toLowerCase();
switch (key.length) {
case 10:
if (key === 'connection')
switch (key) {
case 'connection':
this._removedConnection = true;
break;
case 14:
if (key === 'content-length')
case 'content-length':
this._removedContLen = true;
break;
case 17:
if (key === 'transfer-encoding')
case 'transfer-encoding':
this._removedTE = true;
break;
case 4:
if (key === 'date')
case 'date':
this.sendDate = false;
break;
}