Commit a76bf07ae2ecaf47dab58cbeac37cb82ae8d3ad8

Authored by Dmitriy Zaporozhets
2 parents ec8d3989 181aa2b9

Merge branch 'performance-improve' into 'master'

More performance improvements for large groups

* fetch team members using much less sql queries
* collect mentioned users without iterating over all project users
app/models/concerns/mentionable.rb
@@ -50,7 +50,7 @@ module Mentionable @@ -50,7 +50,7 @@ module Mentionable
50 matches.each do |match| 50 matches.each do |match|
51 identifier = match.delete "@" 51 identifier = match.delete "@"
52 if has_project 52 if has_project
53 - id = project.team.members.find { |u| u.username == identifier }.try(:id) 53 + id = project.team.members.find_by(username: identifier).try(:id)
54 else 54 else
55 id = User.where(username: identifier).pluck(:id).first 55 id = User.where(username: identifier).pluck(:id).first
56 end 56 end
app/models/project_team.rb
@@ -144,7 +144,10 @@ class ProjectTeam @@ -144,7 +144,10 @@ class ProjectTeam
144 group_members = group_members.send(level) if group 144 group_members = group_members.send(level) if group
145 end 145 end
146 146
147 - (project_members + group_members).map(&:user).uniq 147 + user_ids = project_members.pluck(:user_id)
  148 + user_ids += group_members.pluck(:user_id) if group
  149 +
  150 + User.where(id: user_ids)
148 end 151 end
149 152
150 def group 153 def group