mirror of
https://github.com/discourse/discourse.git
synced 2025-02-25 18:55:32 -06:00
PERF: don't run stats query in user card
This commit is contained in:
parent
8c7cce1bfc
commit
130dbf7358
@ -71,7 +71,7 @@ export default ObjectController.extend({
|
|||||||
this.setProperties({ user: null, userLoading: username, cardTarget: target });
|
this.setProperties({ user: null, userLoading: username, cardTarget: target });
|
||||||
|
|
||||||
var self = this;
|
var self = this;
|
||||||
Discourse.User.findByUsername(username).then(function (user) {
|
Discourse.User.findByUsername(username, {stats: false}).then(function (user) {
|
||||||
user = Discourse.User.create(user);
|
user = Discourse.User.create(user);
|
||||||
self.setProperties({ user: user, avatar: user, visible: true});
|
self.setProperties({ user: user, avatar: user, visible: true});
|
||||||
self.appEvents.trigger('usercard:shown');
|
self.appEvents.trigger('usercard:shown');
|
||||||
|
@ -292,11 +292,11 @@ Discourse.User = Discourse.Model.extend({
|
|||||||
return this.get('stats').rejectProperty('isPM');
|
return this.get('stats').rejectProperty('isPM');
|
||||||
}.property('stats.@each.isPM'),
|
}.property('stats.@each.isPM'),
|
||||||
|
|
||||||
findDetails: function() {
|
findDetails: function(options) {
|
||||||
var user = this;
|
var user = this;
|
||||||
|
|
||||||
return PreloadStore.getAndRemove("user_" + user.get('username'), function() {
|
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) {
|
}).then(function (json) {
|
||||||
|
|
||||||
if (!Em.isEmpty(json.user.stats)) {
|
if (!Em.isEmpty(json.user.stats)) {
|
||||||
@ -468,9 +468,9 @@ Discourse.User.reopenClass(Discourse.Singleton, {
|
|||||||
@method findByUsername
|
@method findByUsername
|
||||||
@returns {Promise} a promise that resolves to a `Discourse.User`
|
@returns {Promise} a promise that resolves to a `Discourse.User`
|
||||||
**/
|
**/
|
||||||
findByUsername: function(username) {
|
findByUsername: function(username, options) {
|
||||||
var user = Discourse.User.create({username: username});
|
var user = Discourse.User.create({username: username});
|
||||||
return user.findDetails();
|
return user.findDetails(options);
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -28,6 +28,9 @@ class UsersController < ApplicationController
|
|||||||
def show
|
def show
|
||||||
@user = fetch_user_from_params
|
@user = fetch_user_from_params
|
||||||
user_serializer = UserSerializer.new(@user, scope: guardian, root: 'user')
|
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|
|
respond_to do |format|
|
||||||
format.html do
|
format.html do
|
||||||
@restrict_fields = guardian.restrict_user_fields?(@user)
|
@restrict_fields = guardian.restrict_user_fields?(@user)
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
class UserSerializer < BasicUserSerializer
|
class UserSerializer < BasicUserSerializer
|
||||||
|
|
||||||
|
attr_accessor :omit_stats
|
||||||
|
|
||||||
def self.staff_attributes(*attrs)
|
def self.staff_attributes(*attrs)
|
||||||
attributes(*attrs)
|
attributes(*attrs)
|
||||||
attrs.each do |attr|
|
attrs.each do |attr|
|
||||||
@ -171,6 +173,10 @@ class UserSerializer < BasicUserSerializer
|
|||||||
scope.can_edit_name?(object)
|
scope.can_edit_name?(object)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def include_stats?
|
||||||
|
!omit_stats == true
|
||||||
|
end
|
||||||
|
|
||||||
def stats
|
def stats
|
||||||
UserAction.stats(object.id, scope)
|
UserAction.stats(object.id, scope)
|
||||||
end
|
end
|
||||||
|
Loading…
Reference in New Issue
Block a user