From cbab2e7981ae2217d02ac896e0045f3e891f3f92 Mon Sep 17 00:00:00 2001 From: hc Date: Mon, 22 Apr 2013 18:16:13 -0400 Subject: [PATCH 1/4] benchmark --- bench/bench.js | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 bench/bench.js diff --git a/bench/bench.js b/bench/bench.js new file mode 100644 index 0000000..ce6d258 --- /dev/null +++ b/bench/bench.js @@ -0,0 +1,50 @@ +var count = 1e7; + +var SessionSocket = require('../session.socket.io'); +var EventEmitter = require('events').EventEmitter; + +// stubs +var io = { sockets: new EventEmitter() }; +var sessionStore = { + load: function(cookie, fn) { + fn(undefined, {test: 'hi'}) + } +} +var cookieParser = function(handshake, idk, fn) { + fn(); +} +var stubsocket = { + handshake: { + secureCookies: '123' + } +} +// +var s = new SessionSocket(io, sessionStore, cookieParser, 'key'); +var type, startTime, d = 0; + +function run() { + startTime = process.hrtime(); + for (var i = 0; i < count; i++) { + io.sockets.emit('connection', stubsocket); + } +} + +function done() { + var elapsed = process.hrtime(startTime); + var time = elapsed[0] + elapsed[1] / 1e9; + var opcount = count / time; + console.log('avergae: ', Math.round(opcount), ' | time: ', time); +} + +if (process.argv[2] === 'session') { + type = s; +} else { + type = io.sockets; +} + +type.on('connection', function() { + d++; + if (d === count) done(); +}) + +run(); \ No newline at end of file From 1c552df6399dd4f19dc5eb7acef6d16372ed497e Mon Sep 17 00:00:00 2001 From: hc Date: Mon, 22 Apr 2013 18:18:44 -0400 Subject: [PATCH 2/4] bug fix: repetitive scoping this.of --- session.socket.io.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/session.socket.io.js b/session.socket.io.js index a2349fb..f1ee8fe 100644 --- a/session.socket.io.js +++ b/session.socket.io.js @@ -3,11 +3,13 @@ module.exports = SessionSockets; function SessionSockets(io, sessionStore, cookieParser, key) { key = key || 'connect.sid'; + var self = this; + this.of = function(namespace) { return { on: function(event, callback) { - return bind.call(this, event, callback, io.of(namespace)); - }.bind(this) + return bind.call(self, event, callback, io.of(namespace)); + } }; }; From 24922eae5b535334387fa80dd289916090227877 Mon Sep 17 00:00:00 2001 From: hc Date: Mon, 22 Apr 2013 18:32:42 -0400 Subject: [PATCH 3/4] 80%~ faster by avoiding more scoping Additionally remove more repetitive scoping. Minor typo fix in bench.js --- bench/bench.js | 2 +- session.socket.io.js | 14 +++++++------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/bench/bench.js b/bench/bench.js index ce6d258..85408fa 100644 --- a/bench/bench.js +++ b/bench/bench.js @@ -33,7 +33,7 @@ function done() { var elapsed = process.hrtime(startTime); var time = elapsed[0] + elapsed[1] / 1e9; var opcount = count / time; - console.log('avergae: ', Math.round(opcount), ' | time: ', time); + console.log('op/s: ', Math.round(opcount), ' | time: ', time); } if (process.argv[2] === 'session') { diff --git a/session.socket.io.js b/session.socket.io.js index f1ee8fe..4b21c88 100644 --- a/session.socket.io.js +++ b/session.socket.io.js @@ -3,26 +3,26 @@ module.exports = SessionSockets; function SessionSockets(io, sessionStore, cookieParser, key) { key = key || 'connect.sid'; - var self = this; - this.of = function(namespace) { return { on: function(event, callback) { - return bind.call(self, event, callback, io.of(namespace)); + return bind(event, callback, io.of(namespace)); } }; }; this.on = function(event, callback) { - return bind.call(this, event, callback, io.sockets); + return bind(event, callback, io.sockets); }; + var self = this; + function bind(event, callback, namespace) { - namespace.on(event, function (socket) { - this.getSession(socket, function (err, session) { + namespace.on(event, function(socket) { + self.getSession(socket, function (err, session) { callback(err, socket, session); }); - }.bind(this)); + }); } this.getSession = function(socket, callback) { From d9c18d9ac5db971b0284230c4624c03649eadac0 Mon Sep 17 00:00:00 2001 From: hc Date: Mon, 22 Apr 2013 21:01:44 -0400 Subject: [PATCH 4/4] tweak resolve; pass getSession in instead of calling from scope #22 --- session.socket.io.js | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/session.socket.io.js b/session.socket.io.js index 4b21c88..bd804af 100644 --- a/session.socket.io.js +++ b/session.socket.io.js @@ -3,23 +3,23 @@ module.exports = SessionSockets; function SessionSockets(io, sessionStore, cookieParser, key) { key = key || 'connect.sid'; + var self = this; + this.of = function(namespace) { return { on: function(event, callback) { - return bind(event, callback, io.of(namespace)); + return bind(self.getSession, event, callback, io.of(namespace)); } }; }; this.on = function(event, callback) { - return bind(event, callback, io.sockets); + return bind(self.getSession, event, callback, io.sockets); }; - var self = this; - - function bind(event, callback, namespace) { + function bind(getsession, event, callback, namespace) { namespace.on(event, function(socket) { - self.getSession(socket, function (err, session) { + getsession(socket, function (err, session) { callback(err, socket, session); }); }); @@ -28,7 +28,7 @@ function SessionSockets(io, sessionStore, cookieParser, key) { this.getSession = function(socket, callback) { cookieParser(socket.handshake, {}, function (parseErr) { sessionStore.load(findCookie(socket.handshake), function (storeErr, session) { - var err = resolve(parseErr, storeErr, session); + var err = resolveErr(parseErr, storeErr, session); callback(err, session); }); }); @@ -40,10 +40,9 @@ function SessionSockets(io, sessionStore, cookieParser, key) { || (handshake.cookies && handshake.cookies[key]); } - function resolve(parseErr, storeErr, session) { - if (parseErr) return parseErr; - if (storeErr) return storeErr; - if (!session) return new Error('Could not lookup session by key: ' + key); - return null; + function resolveErr(parseErr, storeErr, session) { + var err = parseErr || storeErr || null; + if (!err && !session) err = new Error('Could not lookup session by key: ' + key); + return err; } }