Skip to content

Commit

Permalink
http: optimize headers iteration
Browse files Browse the repository at this point in the history
This commit uses instanceof instead of Array.isArray() for faster
type checking and avoids calling Object.keys() when the headers are
stored as a 2D array instead of a plain object.

PR-URL: #6533
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Fedor Indutny <fedor.indutny@gmail.com>
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
  • Loading branch information
mscdex committed Dec 29, 2016
1 parent af74e72 commit 4d7531d
Showing 1 changed file with 22 additions and 14 deletions.
36 changes: 22 additions & 14 deletions lib/_http_outgoing.js
Expand Up @@ -209,23 +209,31 @@ function _storeHeader(firstLine, headers) {
messageHeader: firstLine
};

if (headers) {
var keys = Object.keys(headers);
var isArray = Array.isArray(headers);
var field, value;

for (var i = 0, l = keys.length; i < l; i++) {
var key = keys[i];
if (isArray) {
field = headers[key][0];
value = headers[key][1];
var i;
var j;
var field;
var value;
if (headers instanceof Array) {
for (i = 0; i < headers.length; ++i) {
field = headers[i][0];
value = headers[i][1];

if (value instanceof Array) {
for (j = 0; j < value.length; j++) {
storeHeader(this, state, field, value[j]);
}
} else {
field = key;
value = headers[key];
storeHeader(this, state, field, value);
}
}
} else if (headers) {
var keys = Object.keys(headers);
for (i = 0; i < keys.length; ++i) {
field = keys[i];
value = headers[field];

if (Array.isArray(value)) {
for (var j = 0; j < value.length; j++) {
if (value instanceof Array) {
for (j = 0; j < value.length; j++) {
storeHeader(this, state, field, value[j]);
}
} else {
Expand Down

0 comments on commit 4d7531d

Please sign in to comment.