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 50 matches.each do |match|
51 51 identifier = match.delete "@"
52 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 54 else
55 55 id = User.where(username: identifier).pluck(:id).first
56 56 end
... ...
app/models/project_team.rb
... ... @@ -144,7 +144,10 @@ class ProjectTeam
144 144 group_members = group_members.send(level) if group
145 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 151 end
149 152  
150 153 def group
... ...