Skip to content

Commit 679d7c4

Browse files
committed
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.
1 parent 688fd34 commit 679d7c4

File tree

2 files changed

+10
-4
lines changed

2 files changed

+10
-4
lines changed

lib/WeBWorK/ContentGenerator/Instructor/UsersAssignedToSet.pm

+8-2
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,10 @@ sub initialize ($c) {
3333
my $setID = $c->stash('setID');
3434
my $user = $c->param('user');
3535

36+
# Make sure these are defined for the template.
37+
$c->stash->{user_records} = [];
38+
$c->stash->{set_records} = {};
39+
3640
# Check permissions
3741
return unless $authz->hasPermissions($user, "access_instructor_tools");
3842
return unless $authz->hasPermissions($user, "assign_problem_sets");
@@ -62,7 +66,7 @@ sub initialize ($c) {
6266
}
6367

6468
# Get all user records and cache them for later use.
65-
$c->{user_records} =
69+
$c->stash->{user_records} =
6670
[ $db->getUsersWhere({ user_id => { not_like => 'set_id:%' } }, [qw/section last_name first_name/]) ];
6771

6872
if ($doAssignToSelected) {
@@ -71,7 +75,7 @@ sub initialize ($c) {
7175

7276
my %setUsers = map { $_ => 1 } $db->listSetUsers($setID);
7377
my @usersToAdd;
74-
for my $selectedUser (map { $_->user_id } @{ $c->{user_records} }) {
78+
for my $selectedUser (map { $_->user_id } @{ $c->stash->{user_records} }) {
7579
if (exists $selectedUsers{$selectedUser}) {
7680
unless ($setUsers{$selectedUser}) { # skip users already in the set
7781
debug("saving $selectedUser to be added to set later");
@@ -89,6 +93,8 @@ sub initialize ($c) {
8993
}
9094
}
9195

96+
$c->stash->{set_records} = { map { $_->user_id => $_ } $db->getUserSetsWhere({ set_id => $setID }) };
97+
9298
return;
9399
}
94100

templates/ContentGenerator/Instructor/UsersAssignedToSet.html.ep

+2-2
Original file line numberDiff line numberDiff line change
@@ -41,9 +41,9 @@
4141
</tr>
4242
</thead>
4343
<tbody class="table-group-divider">
44-
% for my $user (@{ $c->{user_records} }) {
44+
% for my $user (@$user_records) {
4545
% my $userID = $user->user_id;
46-
% my $userSet = $db->getUserSet($userID, $setID);
46+
% my $userSet = $set_records->{$userID};
4747
%
4848
<tr>
4949
<td class="text-center">

0 commit comments

Comments
 (0)