[Rt-commit] rt branch, 5.0-trunk, updated. rt-5.0.0-123-g778095531d

? sunnavy sunnavy at bestpractical.com
Wed Nov 18 16:30:15 EST 2020


The branch, 5.0-trunk has been updated
       via  778095531d02d072e9629f13f5dca9992a05309e (commit)
       via  9ef508bec227ec0eee8c53247cc24e3586d87a06 (commit)
      from  23ee4e35a6bd2b4323bbce266cdd20c4d930753d (commit)

Summary of changes:
 lib/RT/Interface/Web.pm                     | 23 +++++++++++++++++++++++
 share/html/Elements/EditCustomFieldCombobox |  2 +-
 share/html/Elements/EditCustomFieldSelect   |  6 +++---
 share/html/Elements/SelectCustomFieldValue  |  4 ++--
 4 files changed, 29 insertions(+), 6 deletions(-)

- Log -----------------------------------------------------------------
commit 9ef508bec227ec0eee8c53247cc24e3586d87a06
Author: Dianne Skoll <dianne at bestpractical.com>
Date:   Tue Nov 17 15:43:24 2020 -0500

    Cache custom field values to improve performance of inline edit

diff --git a/lib/RT/Interface/Web.pm b/lib/RT/Interface/Web.pm
index de32934bbb..faee16d5d7 100644
--- a/lib/RT/Interface/Web.pm
+++ b/lib/RT/Interface/Web.pm
@@ -5059,6 +5059,29 @@ sub ProcessAuthToken {
     return @results;
 }
 
+=head3 CachedCustomFieldValues FIELD
+
+Similar to FIELD->Values, but caches the return value of FIELD->Values
+in $m->notes in anticipation of it being used again.
+
+=cut
+
+sub CachedCustomFieldValues {
+    my $cf = shift;
+
+    my $key = 'CF-' . $cf->Id . '-Values';
+
+    if ($m->notes($key)) {
+        # Reset the iterator so we always start from the beginning
+        $m->notes($key)->GotoFirstItem;
+        return $m->notes($key);
+    }
+
+    # Wasn't in the cache; grab it and cache it.
+    $m->notes($key, $cf->Values);
+    return $m->notes($key);
+}
+
 package RT::Interface::Web;
 RT::Base->_ImportOverlays();
 
diff --git a/share/html/Elements/EditCustomFieldCombobox b/share/html/Elements/EditCustomFieldCombobox
index 54e14bd7eb..e7ddfa84cf 100644
--- a/share/html/Elements/EditCustomFieldCombobox
+++ b/share/html/Elements/EditCustomFieldCombobox
@@ -56,7 +56,7 @@
     Default => $Default,
     Rows    => $Rows,
     Class   => "CF-".$CustomField->id."-Edit",
-    Values  => [map {$_->Name} @{$CustomField->Values->ItemsArrayRef}],
+    Values  => [map {$_->Name} @{CachedCustomFieldValues($CustomField)->ItemsArrayRef}],
 &>
 
 <%INIT>
diff --git a/share/html/Elements/EditCustomFieldSelect b/share/html/Elements/EditCustomFieldSelect
index eccdbabd8f..13c4c1f2f3 100644
--- a/share/html/Elements/EditCustomFieldSelect
+++ b/share/html/Elements/EditCustomFieldSelect
@@ -67,7 +67,7 @@
   </div>
 % }
 %   }
-%   my $CFVs = $CustomField->Values;
+%   my $CFVs = CachedCustomFieldValues($CustomField);
 %   while ( my $value = $CFVs->Next ) {
 %     my $content = $value->Name;
 %     my $labelid = "$name-". $value->id;
@@ -153,7 +153,7 @@ else {
     }
 }
 
-my $use_chosen = $CustomField->Values->Count >= 10 ? 1 : 0;
+my $use_chosen = CachedCustomFieldValues($CustomField)->Count >= 10 ? 1 : 0;
 $m->callback( CallbackName => 'Chosen', UseChosen => \$use_chosen, CustomField => $CustomField );
 
 # it's weird to see "(no value) X" in the input when selecting multiple values
@@ -183,7 +183,7 @@ $MaxValues => 1
 % }
 % $_ = lc $_ foreach @Default;
 % my $selected;
-% my $CFVs = $CustomField->Values;
+% my $CFVs = CachedCustomFieldValues($CustomField);
 % my @levels;
 % while ( my $value = $CFVs->Next ) {
 %       my $name = $value->Name;
diff --git a/share/html/Elements/SelectCustomFieldValue b/share/html/Elements/SelectCustomFieldValue
index 18af1e7a0d..a5ba438174 100644
--- a/share/html/Elements/SelectCustomFieldValue
+++ b/share/html/Elements/SelectCustomFieldValue
@@ -48,7 +48,7 @@
 % $m->callback( Name => $Name, CustomField => $CustomField, Default => \$Default );
 % $Default = "" unless defined $Default;
 % if ($CustomField->Type =~ /Select/i) {
-% my $values = $CustomField->Values;
+% my $values = CachedCustomFieldValues($CustomField);
 <select name="<%$Name%>" class="form-control selectpicker">
 <option value="" selected="selected">-</option>
 <option value="NULL"><&|/l&>(no value)</&></option>
@@ -62,7 +62,7 @@
 <input type="text" id="CF-<% $CustomField->id %>" name="<% $Name %>" size="20" value="<% $Default %>" />
 <script type="text/javascript">
 % my @options;
-% my $values = $CustomField->Values;
+% my $values = CachedCustomFieldValues($CustomField);
 % while (my $value = $values->Next) {
 %   push @options, {
 %       value => $value->Name,

commit 778095531d02d072e9629f13f5dca9992a05309e
Merge: 23ee4e35a6 9ef508bec2
Author: sunnavy <sunnavy at bestpractical.com>
Date:   Thu Nov 19 05:20:58 2020 +0800

    Merge branch '5.0/cache-custom-field-values' into 5.0-trunk


-----------------------------------------------------------------------


More information about the rt-commit mailing list