From 130dbf7358272da5c902e2e9afb8dfadcdd7497c Mon Sep 17 00:00:00 2001 From: Sam Date: Tue, 24 Feb 2015 13:31:23 +1100 Subject: [PATCH] PERF: don't run stats query in user card --- .../javascripts/discourse/controllers/user-card.js.es6 | 2 +- app/assets/javascripts/discourse/models/user.js | 8 ++++---- app/controllers/users_controller.rb | 3 +++ app/serializers/user_serializer.rb | 6 ++++++ 4 files changed, 14 insertions(+), 5 deletions(-) diff --git a/app/assets/javascripts/discourse/controllers/user-card.js.es6 b/app/assets/javascripts/discourse/controllers/user-card.js.es6 index 7701837f38e..ac4d451d506 100644 --- a/app/assets/javascripts/discourse/controllers/user-card.js.es6 +++ b/app/assets/javascripts/discourse/controllers/user-card.js.es6 @@ -71,7 +71,7 @@ export default ObjectController.extend({ this.setProperties({ user: null, userLoading: username, cardTarget: target }); var self = this; - Discourse.User.findByUsername(username).then(function (user) { + Discourse.User.findByUsername(username, {stats: false}).then(function (user) { user = Discourse.User.create(user); self.setProperties({ user: user, avatar: user, visible: true}); self.appEvents.trigger('usercard:shown'); diff --git a/app/assets/javascripts/discourse/models/user.js b/app/assets/javascripts/discourse/models/user.js index c650d1704e6..e25139ecab9 100644 --- a/app/assets/javascripts/discourse/models/user.js +++ b/app/assets/javascripts/discourse/models/user.js @@ -292,11 +292,11 @@ Discourse.User = Discourse.Model.extend({ return this.get('stats').rejectProperty('isPM'); }.property('stats.@each.isPM'), - findDetails: function() { + findDetails: function(options) { var user = this; return PreloadStore.getAndRemove("user_" + user.get('username'), function() { - return Discourse.ajax("/users/" + user.get('username') + '.json'); + return Discourse.ajax("/users/" + user.get('username') + '.json', {data: options}); }).then(function (json) { if (!Em.isEmpty(json.user.stats)) { @@ -468,9 +468,9 @@ Discourse.User.reopenClass(Discourse.Singleton, { @method findByUsername @returns {Promise} a promise that resolves to a `Discourse.User` **/ - findByUsername: function(username) { + findByUsername: function(username, options) { var user = Discourse.User.create({username: username}); - return user.findDetails(); + return user.findDetails(options); }, /** diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 1e2bfd071e8..5673c3298d4 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -28,6 +28,9 @@ class UsersController < ApplicationController def show @user = fetch_user_from_params user_serializer = UserSerializer.new(@user, scope: guardian, root: 'user') + if params[:stats].to_s == "false" + user_serializer.omit_stats = true + end respond_to do |format| format.html do @restrict_fields = guardian.restrict_user_fields?(@user) diff --git a/app/serializers/user_serializer.rb b/app/serializers/user_serializer.rb index 6cc710935f2..c1e96e40c1c 100644 --- a/app/serializers/user_serializer.rb +++ b/app/serializers/user_serializer.rb @@ -1,5 +1,7 @@ class UserSerializer < BasicUserSerializer + attr_accessor :omit_stats + def self.staff_attributes(*attrs) attributes(*attrs) attrs.each do |attr| @@ -171,6 +173,10 @@ class UserSerializer < BasicUserSerializer scope.can_edit_name?(object) end + def include_stats? + !omit_stats == true + end + def stats UserAction.stats(object.id, scope) end