From ff7adf1cf7c517b3c475ff3d24579a9a5c8d5ec6 Mon Sep 17 00:00:00 2001 From: Amish Shah Date: Sun, 6 Dec 2015 20:53:23 +0000 Subject: [PATCH] basic speed improvement - eats more memory --- lib/Client/InternalClient.js | 16 +++++++++++++--- lib/Structures/Server.js | 4 ++++ lib/Util/Cache.js | 36 +++++++++++++++--------------------- src/Client/InternalClient.js | 12 +++++++++++- src/Structures/Server.js | 4 ++++ src/Util/Cache.js | 23 +++++++++++++++-------- 6 files changed, 62 insertions(+), 33 deletions(-) diff --git a/lib/Client/InternalClient.js b/lib/Client/InternalClient.js index 366355f4b..f7ea63d3e 100644 --- a/lib/Client/InternalClient.js +++ b/lib/Client/InternalClient.js @@ -1184,6 +1184,15 @@ var InternalClient = (function () { case _Constants.PacketType.READY: var startTime = Date.now(); + self.intervals.kai = setInterval(function () { + return self.sendWS({ op: 1, d: Date.now() }); + }, data.heartbeat_interval); + + self.users.setHighPerformance(); + self.servers.setHighPerformance(); + self.channels.setHighPerformance(); + self.private_channels.setHighPerformance(); + self.user = self.users.add(new _StructuresUser2["default"](data.user, client)); data.guilds.forEach(function (server) { self.servers.add(new _StructuresServer2["default"](server, client)); @@ -1193,9 +1202,10 @@ var InternalClient = (function () { }); self.state = _ConnectionState2["default"].READY; - self.intervals.kai = setInterval(function () { - return self.sendWS({ op: 1, d: Date.now() }); - }, data.heartbeat_interval); + self.users.setNormalPerformance(); + self.servers.setNormalPerformance(); + self.channels.setNormalPerformance(); + self.private_channels.setNormalPerformance(); client.emit("ready"); client.emit("debug", "ready packet took " + (Date.now() - startTime) + "ms to process"); diff --git a/lib/Structures/Server.js b/lib/Structures/Server.js index 1332da1ba..6899882ad 100644 --- a/lib/Structures/Server.js +++ b/lib/Structures/Server.js @@ -65,6 +65,8 @@ var Server = (function (_Equality) { this.afkChannelID = data.afk_channel_id; this.memberMap = {}; + this.members.setHighPerformance(); + var self = this; data.roles.forEach(function (dataRole) { @@ -116,6 +118,8 @@ var Server = (function (_Equality) { } } } + + this.members.setNormalPerformance(); } Server.prototype.detailsOf = function detailsOf(user) { diff --git a/lib/Util/Cache.js b/lib/Util/Cache.js index 3932779be..ce8830eaa 100644 --- a/lib/Util/Cache.js +++ b/lib/Util/Cache.js @@ -14,12 +14,23 @@ var Cache = (function (_Array) { _Array.call(this); this.discrim = discrim || "id"; + this.discrimCache = []; + this.highPerformance = false; } + Cache.prototype.setHighPerformance = function setHighPerformance() { + this.highPerformance = true; + }; + + Cache.prototype.setNormalPerformance = function setNormalPerformance() { + this.discrimCache = []; + this.highPerformance = false; + }; + Cache.prototype.get = function get(key, value) { var found = null; this.forEach(function (val, index, array) { - if (val.hasOwnProperty(key) && val[key] == value) { + if (val[key] == value) { found = val; return; } @@ -44,32 +55,15 @@ var Cache = (function (_Array) { Cache.prototype.add = function add(data) { var exit = false; - for (var _iterator = this, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) { - var _ref; - - if (_isArray) { - if (_i >= _iterator.length) break; - _ref = _iterator[_i++]; - } else { - _i = _iterator.next(); - if (_i.done) break; - _ref = _i.value; - } - - var item = _ref; - - if (item[this.discrim] === data[this.discrim]) { - exit = item; - break; - } - } + exit = ~this.discrimCache.indexOf(data[this.discrim]); if (exit) { - return exit; + return data; } else { if (this.limit && this.length >= this.limit) { this.splice(0, 1); } this.push(data); + this.discrimCache.push(data[this.discrim]); return data; } }; diff --git a/src/Client/InternalClient.js b/src/Client/InternalClient.js index 4be9b1323..243f71f38 100644 --- a/src/Client/InternalClient.js +++ b/src/Client/InternalClient.js @@ -1074,6 +1074,13 @@ export default class InternalClient { case PacketType.READY: var startTime = Date.now(); + self.intervals.kai = setInterval(() => self.sendWS({ op: 1, d: Date.now() }), data.heartbeat_interval); + + self.users.setHighPerformance(); + self.servers.setHighPerformance(); + self.channels.setHighPerformance(); + self.private_channels.setHighPerformance(); + self.user = self.users.add(new User(data.user, client)); data.guilds.forEach(server => { self.servers.add(new Server(server, client)); @@ -1083,7 +1090,10 @@ export default class InternalClient { }); self.state = ConnectionState.READY; - self.intervals.kai = setInterval(() => self.sendWS({ op: 1, d: Date.now() }), data.heartbeat_interval); + self.users.setNormalPerformance(); + self.servers.setNormalPerformance(); + self.channels.setNormalPerformance(); + self.private_channels.setNormalPerformance(); client.emit("ready"); client.emit("debug", `ready packet took ${Date.now() - startTime}ms to process`); diff --git a/src/Structures/Server.js b/src/Structures/Server.js index df8157d02..b5dd5aa89 100644 --- a/src/Structures/Server.js +++ b/src/Structures/Server.js @@ -33,6 +33,8 @@ export default class Server extends Equality { this.afkChannelID = data.afk_channel_id; this.memberMap = {}; + this.members.setHighPerformance(); + var self = this; data.roles.forEach((dataRole) => { @@ -69,6 +71,8 @@ export default class Server extends Equality { } } } + + this.members.setNormalPerformance(); } detailsOf(user) { diff --git a/src/Util/Cache.js b/src/Util/Cache.js index fedbc3990..4ca19292c 100644 --- a/src/Util/Cache.js +++ b/src/Util/Cache.js @@ -4,12 +4,23 @@ export default class Cache extends Array { constructor(discrim, limit) { super(); this.discrim = discrim || "id"; + this.discrimCache = []; + this.highPerformance = false; + } + + setHighPerformance() { + this.highPerformance = true; + } + + setNormalPerformance() { + this.discrimCache = []; + this.highPerformance = false; } get(key, value) { var found = null; this.forEach((val, index, array) => { - if (val.hasOwnProperty(key) && val[key] == value) { + if (val[key] == value) { found = val; return; } @@ -34,19 +45,15 @@ export default class Cache extends Array { add(data) { var exit = false; - for (var item of this) { - if (item[this.discrim] === data[this.discrim]) { - exit = item; - break; - } - } + exit = ~this.discrimCache.indexOf(data[this.discrim]); if (exit) { - return exit; + return data; } else { if (this.limit && this.length >= this.limit) { this.splice(0, 1); } this.push(data); + this.discrimCache.push(data[this.discrim]); return data; } }