Skip to content

Commit 2314c10

Browse files
billouboqdarrachequesne
authored andcommittedDec 30, 2016
[perf] Small optimisations (#57)
1 parent 5ac691e commit 2314c10

File tree

2 files changed

+53
-57
lines changed

2 files changed

+53
-57
lines changed
 

‎binary.js

+44-46
Original file line numberDiff line numberDiff line change
@@ -17,39 +17,38 @@ var isBuf = require('./is-buffer');
1717
* @api public
1818
*/
1919

20-
exports.deconstructPacket = function(packet){
20+
exports.deconstructPacket = function(packet) {
2121
var buffers = [];
2222
var packetData = packet.data;
23-
24-
function _deconstructPacket(data) {
25-
if (!data) return data;
26-
27-
if (isBuf(data)) {
28-
var placeholder = { _placeholder: true, num: buffers.length };
29-
buffers.push(data);
30-
return placeholder;
31-
} else if (isArray(data)) {
32-
var newData = new Array(data.length);
33-
for (var i = 0; i < data.length; i++) {
34-
newData[i] = _deconstructPacket(data[i]);
35-
}
36-
return newData;
37-
} else if (typeof data === 'object' && !(data instanceof Date)) {
38-
var newData = {};
39-
for (var key in data) {
40-
newData[key] = _deconstructPacket(data[key]);
41-
}
42-
return newData;
43-
}
44-
return data;
45-
}
46-
4723
var pack = packet;
48-
pack.data = _deconstructPacket(packetData);
24+
pack.data = _deconstructPacket(packetData, buffers);
4925
pack.attachments = buffers.length; // number of binary 'attachments'
5026
return {packet: pack, buffers: buffers};
5127
};
5228

29+
function _deconstructPacket(data, buffers) {
30+
if (!data) return data;
31+
32+
if (isBuf(data)) {
33+
var placeholder = { _placeholder: true, num: buffers.length };
34+
buffers.push(data);
35+
return placeholder;
36+
} else if (isArray(data)) {
37+
var newData = new Array(data.length);
38+
for (var i = 0; i < data.length; i++) {
39+
newData[i] = _deconstructPacket(data[i], buffers);
40+
}
41+
return newData;
42+
} else if (typeof data === 'object' && !(data instanceof Date)) {
43+
var newData = {};
44+
for (var key in data) {
45+
newData[key] = _deconstructPacket(data[key], buffers);
46+
}
47+
return newData;
48+
}
49+
return data;
50+
}
51+
5352
/**
5453
* Reconstructs a binary packet from its placeholder packet and buffers
5554
*
@@ -60,29 +59,28 @@ exports.deconstructPacket = function(packet){
6059
*/
6160

6261
exports.reconstructPacket = function(packet, buffers) {
62+
packet.data = _reconstructPacket(packet.data, buffers);
63+
packet.attachments = undefined; // no longer useful
64+
return packet;
65+
};
6366

64-
function _reconstructPacket(data) {
65-
if (data && data._placeholder) {
66-
var buf = buffers[data.num]; // appropriate buffer (should be natural order anyway)
67-
return buf;
68-
} else if (isArray(data)) {
69-
for (var i = 0; i < data.length; i++) {
70-
data[i] = _reconstructPacket(data[i]);
71-
}
72-
return data;
73-
} else if (data && 'object' === typeof data) {
74-
for (var key in data) {
75-
data[key] = _reconstructPacket(data[key]);
76-
}
77-
return data;
67+
function _reconstructPacket(data, buffers) {
68+
if (!data) return data;
69+
70+
if (data && data._placeholder) {
71+
return buffers[data.num]; // appropriate buffer (should be natural order anyway)
72+
} else if (isArray(data)) {
73+
for (var i = 0; i < data.length; i++) {
74+
data[i] = _reconstructPacket(data[i], buffers);
75+
}
76+
} else if (typeof data === 'object') {
77+
for (var key in data) {
78+
data[key] = _reconstructPacket(data[key], buffers);
7879
}
79-
return data;
8080
}
8181

82-
packet.data = _reconstructPacket(packet.data);
83-
packet.attachments = undefined; // no longer useful
84-
return packet;
85-
};
82+
return data;
83+
}
8684

8785
/**
8886
* Asynchronously removes Blobs or Files from data via
@@ -124,7 +122,7 @@ exports.removeBlobs = function(data, callback) {
124122
for (var i = 0; i < obj.length; i++) {
125123
_removeBlobs(obj[i], i, obj);
126124
}
127-
} else if (obj && 'object' === typeof obj && !isBuf(obj)) { // and object
125+
} else if (typeof obj === 'object' && !isBuf(obj)) { // and object
128126
for (var key in obj) {
129127
_removeBlobs(obj[key], key, obj);
130128
}

‎index.js

+9-11
Original file line numberDiff line numberDiff line change
@@ -144,22 +144,19 @@ Encoder.prototype.encode = function(obj, callback){
144144
*/
145145

146146
function encodeAsString(obj) {
147-
var str = '';
148147

149148
// first is type
150-
str += obj.type;
149+
var str = '' + obj.type;
151150

152151
// attachments if we have them
153152
if (exports.BINARY_EVENT === obj.type || exports.BINARY_ACK === obj.type) {
154-
str += obj.attachments;
155-
str += '-';
153+
str += obj.attachments + '-';
156154
}
157155

158156
// if we have a namespace other than `/`
159157
// we append it followed by a comma `,`
160158
if (obj.nsp && '/' !== obj.nsp) {
161-
str += obj.nsp;
162-
str += ',';
159+
str += obj.nsp + ',';
163160
}
164161

165162
// immediately followed by the id
@@ -265,15 +262,16 @@ Decoder.prototype.add = function(obj) {
265262
*/
266263

267264
function decodeString(str) {
268-
var p = {};
269265
var i = 0;
270-
271266
// look up type
272-
p.type = Number(str.charAt(0));
267+
var p = {
268+
type: Number(str.charAt(0))
269+
};
270+
273271
if (null == exports.types[p.type]) return error();
274272

275273
// look up attachments if type binary
276-
if (exports.BINARY_EVENT == p.type || exports.BINARY_ACK == p.type) {
274+
if (exports.BINARY_EVENT === p.type || exports.BINARY_ACK === p.type) {
277275
var buf = '';
278276
while (str.charAt(++i) !== '-') {
279277
buf += str.charAt(i);
@@ -390,7 +388,7 @@ BinaryReconstructor.prototype.finishedReconstruction = function() {
390388
this.buffers = [];
391389
};
392390

393-
function error(data){
391+
function error() {
394392
return {
395393
type: exports.ERROR,
396394
data: 'parser error'

0 commit comments

Comments
 (0)
Please sign in to comment.