From f8bde388eaddf921f612acb9813f51278fd81c72 Mon Sep 17 00:00:00 2001 From: Guilherme Gazzo Date: Wed, 10 Apr 2019 16:40:07 -0300 Subject: [PATCH] Fix threads rendering performance (#14059) Fix threads rendering performance --- app/authorization/client/hasPermission.js | 8 ++-- app/models/client/models/Subscriptions.js | 2 +- app/threads/client/flextab/thread.html | 4 +- app/threads/client/flextab/thread.js | 2 +- app/threads/client/flextab/threads.html | 51 +++++++++++++---------- app/threads/client/flextab/threads.js | 36 +++++++++------- app/ui-message/client/message.js | 39 ++++++++--------- app/ui/client/views/app/room.js | 3 +- 8 files changed, 75 insertions(+), 70 deletions(-) diff --git a/app/authorization/client/hasPermission.js b/app/authorization/client/hasPermission.js index 8b7fda69bca1..33cee33364fe 100644 --- a/app/authorization/client/hasPermission.js +++ b/app/authorization/client/hasPermission.js @@ -5,11 +5,11 @@ import { ChatPermissions } from './lib/ChatPermissions'; function atLeastOne(permissions = [], scope) { return permissions.some((permissionId) => { - const permission = ChatPermissions.findOne(permissionId); + const permission = ChatPermissions.findOne(permissionId, { fields: { roles: 1 } }); const roles = (permission && permission.roles) || []; return roles.some((roleName) => { - const role = Models.Roles.findOne(roleName); + const role = Models.Roles.findOne(roleName, { fields: { scope: 1 } }); const roleScope = role && role.scope; const model = Models[roleScope]; @@ -20,11 +20,11 @@ function atLeastOne(permissions = [], scope) { function all(permissions = [], scope) { return permissions.every((permissionId) => { - const permission = ChatPermissions.findOne(permissionId); + const permission = ChatPermissions.findOne(permissionId, { fields: { roles: 1 } }); const roles = (permission && permission.roles) || []; return roles.some((roleName) => { - const role = Models.Roles.findOne(roleName); + const role = Models.Roles.findOne(roleName, { fields: { scope: 1 } }); const roleScope = role && role.scope; const model = Models[roleScope]; diff --git a/app/models/client/models/Subscriptions.js b/app/models/client/models/Subscriptions.js index 602f06c5e271..5d2f9198daf0 100644 --- a/app/models/client/models/Subscriptions.js +++ b/app/models/client/models/Subscriptions.js @@ -14,7 +14,7 @@ Object.assign(Subscriptions, { rid: roomId, }; - const subscription = this.findOne(query); + const subscription = this.findOne(query, { fields: { roles: 1 } }); return subscription && Array.isArray(subscription.roles) && subscription.roles.includes(roleName); }, { maxAge: 1000 }), diff --git a/app/threads/client/flextab/thread.html b/app/threads/client/flextab/thread.html index 863ebb2c6751..64d88d2c8735 100644 --- a/app/threads/client/flextab/thread.html +++ b/app/threads/client/flextab/thread.html @@ -14,9 +14,9 @@

{{_ 'Thread'}}
    {{# with messageContext}} - {{> nrr nrrargs 'message' msg=mainMessage room=room subscription=subscription settings=settings customClass="thread-message" templatePrefix='thread-' customClass="thread-main" u=u}} + {{> nrr nrrargs 'message' hideRoles=true msg=mainMessage room=room subscription=subscription settings=settings customClass="thread-message" templatePrefix='thread-' customClass="thread-main" u=u}} {{#each msg in messages}} - {{> nrr nrrargs 'message' msg=msg room=room subscription=subscription settings=settings templatePrefix='thread-' u=u}} + {{> nrr nrrargs 'message' hideRoles=true msg=msg room=room subscription=subscription settings=settings templatePrefix='thread-' u=u}} {{/each}} {{/with}}
diff --git a/app/threads/client/flextab/thread.js b/app/threads/client/flextab/thread.js index d8dbaf39500a..96f70d058cd3 100644 --- a/app/threads/client/flextab/thread.js +++ b/app/threads/client/flextab/thread.js @@ -95,7 +95,7 @@ Template.thread.onRendered(function() { const tmid = this.state.get('tmid'); this.threadsObserve && this.threadsObserve.stop(); - this.threadsObserve = Messages.find({ tmid }).observe({ + this.threadsObserve = Messages.find({ tmid, _updatedAt: { $gt: new Date() } }).observe({ added: ({ _id, ...message }) => { const { atBottom } = this; this.Threads.upsert({ _id }, message); diff --git a/app/threads/client/flextab/threads.html b/app/threads/client/flextab/threads.html index 812d43eadf5e..a8a457119a7e 100644 --- a/app/threads/client/flextab/threads.html +++ b/app/threads/client/flextab/threads.html @@ -1,30 +1,35 @@