From f2e158a489aaff26406c17b4f7256db7d404a01b Mon Sep 17 00:00:00 2001 From: Glenn Rice Date: Mon, 21 Apr 2025 14:48:15 -0500 Subject: [PATCH] Speed up loading of the "Users Assigned to Set" page. Load all user sets for the given set and all users before rendering the template instead of getting one set at a time in the for loop inside the template. This speeds up loading of this page a lot with a large number of users. With 5000 users it decreases the load time from 3.4 seconds to 0.14 seconds. --- .../ContentGenerator/Instructor/UsersAssignedToSet.pm | 10 ++++++++-- .../Instructor/UsersAssignedToSet.html.ep | 4 ++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/lib/WeBWorK/ContentGenerator/Instructor/UsersAssignedToSet.pm b/lib/WeBWorK/ContentGenerator/Instructor/UsersAssignedToSet.pm index 687ac4961c..fa9ada3e8e 100644 --- a/lib/WeBWorK/ContentGenerator/Instructor/UsersAssignedToSet.pm +++ b/lib/WeBWorK/ContentGenerator/Instructor/UsersAssignedToSet.pm @@ -33,6 +33,10 @@ sub initialize ($c) { my $setID = $c->stash('setID'); my $user = $c->param('user'); + # Make sure these are defined for the template. + $c->stash->{user_records} = []; + $c->stash->{set_records} = {}; + # Check permissions return unless $authz->hasPermissions($user, "access_instructor_tools"); return unless $authz->hasPermissions($user, "assign_problem_sets"); @@ -62,7 +66,7 @@ sub initialize ($c) { } # Get all user records and cache them for later use. - $c->{user_records} = + $c->stash->{user_records} = [ $db->getUsersWhere({ user_id => { not_like => 'set_id:%' } }, [qw/section last_name first_name/]) ]; if ($doAssignToSelected) { @@ -71,7 +75,7 @@ sub initialize ($c) { my %setUsers = map { $_ => 1 } $db->listSetUsers($setID); my @usersToAdd; - for my $selectedUser (map { $_->user_id } @{ $c->{user_records} }) { + for my $selectedUser (map { $_->user_id } @{ $c->stash->{user_records} }) { if (exists $selectedUsers{$selectedUser}) { unless ($setUsers{$selectedUser}) { # skip users already in the set debug("saving $selectedUser to be added to set later"); @@ -89,6 +93,8 @@ sub initialize ($c) { } } + $c->stash->{set_records} = { map { $_->user_id => $_ } $db->getUserSetsWhere({ set_id => $setID }) }; + return; } diff --git a/templates/ContentGenerator/Instructor/UsersAssignedToSet.html.ep b/templates/ContentGenerator/Instructor/UsersAssignedToSet.html.ep index b520fa2036..670849becd 100644 --- a/templates/ContentGenerator/Instructor/UsersAssignedToSet.html.ep +++ b/templates/ContentGenerator/Instructor/UsersAssignedToSet.html.ep @@ -41,9 +41,9 @@ - % for my $user (@{ $c->{user_records} }) { + % for my $user (@$user_records) { % my $userID = $user->user_id; - % my $userSet = $db->getUserSet($userID, $setID); + % my $userSet = $set_records->{$userID}; %