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 authored and evanlucas committed Jan 4, 2017
1 parent a760d70 commit 32b6bcd
Showing 1 changed file with 22 additions and 14 deletions.
36 changes: 22 additions & 14 deletions lib/_http_outgoing.js
Original file line number Diff line number Diff line change
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 32b6bcd

Please sign in to comment.