Vote #77649
未完了Speedup Project Settings with many members
0%
説明
Hi,
There is a .sort in _members.html.erb partial that take a lot of time for project that have more than 12s to execute, so I change for .order('roles.builtin, roles.position, users.firstname, users.lastname')
- members = @project.memberships.active.includes(:member_roles, :roles, :principal).to_a.sort
+ members = @project.memberships.active.includes(:member_roles, :roles, :principal).order('roles.builtin, roles.position, users.firstname, users.lastname')
Benchmark.measure { project.memberships.active.includes(:member_roles, :roles, :principal).order('roles.builtin, roles.position, users.firstname, users.lastname').to_a }
#
Benchmark.measure { project.memberships.active.includes(:member_roles, :roles, :principal).to_a.sort }
#
journals
Interesting. Reducing 12 sec to 0.6 sec is big improvement. How many members on the project?
Here is a diff made from the first post.
<pre><code class="diff">
Index: app/views/projects/settings/_members.html.erb
===================================================================
--- app/views/projects/settings/_members.html.erb (revision 15732)
+++ app/views/projects/settings/_members.html.erb (working copy)
@@ -1,5 +1,5 @@
<% roles = Role.find_all_givable
- members = @project.memberships.active.includes(:member_roles, :roles, :principal).to_a.sort %>
+ members = @project.memberships.active.includes(:member_roles, :roles, :principal).order('roles.builtin, roles.position, users.firstname, users.lastname')
<p><%= link_to l(:label_member_new), new_project_membership_path(@project), :remote => true, :class => "icon icon-add" %></p>
</code></pre>
--------------------------------------------------------------------------------
6K members
--------------------------------------------------------------------------------
I think SQL "users.firstname, users.lastname" order is not acceptable because AFAIK user sort is configurable.
source:tags/3.3.0/app/models/user.rb#L24
--------------------------------------------------------------------------------