From: Frédéric Buclin
Date: Mon, 1 Aug 2011 08:36:48 +0000 (+0200)
Subject: Bug 634812: Having a very large number of custom fields can make displaying show_bug...
X-Git-Tag: bugzilla-4.0.2~9
X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6b56e1ac30ed96ab3d47936552023dfabbf7d6c2;p=thirdparty%2Fbugzilla.git
Bug 634812: Having a very large number of custom fields can make displaying show_bug.cgi slow
r=glob a=LpSolit
---
diff --git a/Bugzilla/Template.pm b/Bugzilla/Template.pm
index 4320121bfb..3ebda68efa 100644
--- a/Bugzilla/Template.pm
+++ b/Bugzilla/Template.pm
@@ -922,6 +922,10 @@ sub create {
# $template->process() is called.
'field_descs' => sub { return template_var('field_descs') },
+ # Calling bug/field-help.none.tmpl once per label is very
+ # expensive, so we generate it once per-language.
+ 'help_html' => sub { return template_var('help_html') },
+
'install_string' => \&Bugzilla::Install::Util::install_string,
'report_columns' => \&Bugzilla::Search::REPORT_COLUMNS,
diff --git a/template/en/default/bug/field-help.none.tmpl b/template/en/default/bug/field-help.none.tmpl
index 558cad6c64..de16f20add 100644
--- a/template/en/default/bug/field-help.none.tmpl
+++ b/template/en/default/bug/field-help.none.tmpl
@@ -19,11 +19,13 @@
# Max Kanat-Alexander
#%]
-[%# This file describes both bug fields and search fields. %]
+[%# This file describes both bug fields and search fields.
+ # As calling this template once per label is very expensive,
+ # it is called only by Template.pm. %]
-[% PROCESS "global/field-descs.none.tmpl" %]
+[% RETURN UNLESS in_template_var %]
-[% help_html = {
+[% vars.help_html = {
# Note that all these keys here are in alphabetical order, though
# search-specific fields are at the bottom.
@@ -100,7 +102,7 @@ op_sys =>
percentage_complete =>
"How close to 100% done this $terms.bug is, by comparing its
- $field_descs.work_time to its ${field_descs.estimated_time}.",
+ $vars.field_descs.work_time to its ${vars.field_descs.estimated_time}.",
priority =>
"Engineers prioritize their $terms.bugs using this field.",
@@ -116,8 +118,8 @@ qa_contact =>
remaining_time =>
"The number of hours of work left on this $terms.bug, calculated by
- subtracting the $field_descs.work_time from the
- ${field_descs.estimated_time}.",
+ subtracting the $vars.field_descs.work_time from the
+ ${vars.field_descs.estimated_time}.",
rep_platform =>
"The hardware platform the $terms.bug was observed on.",
@@ -137,8 +139,8 @@ see_also =>
You should normally use this field to refer to $terms.bugs in
other installations. For $terms.bugs in this
- installation, it is better to use the $field_descs.dependson and
- $field_descs.blocked fields.
",
+ installation, it is better to use the $vars.field_descs.dependson and
+ $vars.field_descs.blocked fields.
",
short_desc =>
"The $terms.bug summary is a short sentence which succinctly"
@@ -149,7 +151,7 @@ status_whiteboard =>
_ " adding tags and status information.",
target_milestone =>
- "The $field_descs.target_milestone field is used to define when the"
+ "The $vars.field_descs.target_milestone field is used to define when the"
_ " engineer the $terms.bug is assigned to expects to fix it.",
version =>
@@ -185,8 +187,8 @@ chfieldvalue =>
content =>
"This is a field available in searches that does a Google-like
- 'full-text' search on the $field_descs.short_desc and
- $field_descs.longdesc fields.",
+ 'full-text' search on the $vars.field_descs.short_desc and
+ $vars.field_descs.longdesc fields.",
# Duplicated to email2 below, also.
email1 =>
@@ -195,10 +197,10 @@ email1 =>
} %]
-[% help_html.email2 = help_html.email1 %]
-[% help_html.chfieldto = help_html.chfieldfrom %]
-[% help_html.deadlinefrom = help_html.deadline %]
-[% help_html.deadlineto = help_html.deadline %]
+[% vars.help_html.email2 = vars.help_html.email1 %]
+[% vars.help_html.chfieldto = vars.help_html.chfieldfrom %]
+[% vars.help_html.deadlinefrom = vars.help_html.deadline %]
+[% vars.help_html.deadlineto = vars.help_html.deadline %]
[% help_all_note = BLOCK %]
Note: When searching, selecting the option "All"
@@ -206,34 +208,34 @@ email1 =>
the word "All".
[% END %]
[% FOREACH all_field = ['op_sys', 'rep_platform'] %]
- [% help_html.$all_field = help_html.$all_field _ ' ' _ help_all_note %]
+ [% vars.help_html.$all_field = vars.help_html.$all_field _ ' ' _ help_all_note %]
[% END %]
[% IF Param('useclassification') %]
- [% help_html.product = help_html.product
+ [% vars.help_html.product = vars.help_html.product
_ " Select a Classification to narrow down this list." %]
[% END %]
[% FOREACH help_field = bug_fields.keys %]
[%# Add help for custom fields. %]
- [% IF !help_html.${help_field}.defined %]
+ [% IF !vars.help_html.${help_field}.defined %]
[% SET field_type = bug_fields.${help_field}.type %]
[% field_type_desc = BLOCK -%]
[% field_types.$field_type FILTER html %]
[%- END %]
- [% help_html.${help_field} =
+ [% vars.help_html.${help_field} =
"A custom $field_type_desc field in this installation"
_ " of ${terms.Bugzilla}." %]
[% END %]
[%# Add help for the search types, for query.cgi. %]
[% type_desc = BLOCK %]
- The type of [% field_descs.${help_field} FILTER html %] search you
+ The type of [% vars.field_descs.${help_field} FILTER html %] search you
would like.
[% END %]
[% SET type_name = help_field _ '_type' %]
- [% help_html.$type_name = type_desc %]
+ [% vars.help_html.$type_name = type_desc %]
[% END %]
[% Hook.process("end") %]
diff --git a/template/en/default/bug/field-label.html.tmpl b/template/en/default/bug/field-label.html.tmpl
index 0b794f82a0..2138f03625 100644
--- a/template/en/default/bug/field-label.html.tmpl
+++ b/template/en/default/bug/field-label.html.tmpl
@@ -26,7 +26,6 @@
# tag_name: the tag to use to surround the label
#%]
-[% PROCESS "bug/field-help.none.tmpl" %]
[% DEFAULT tag_name = "th" %]
<[% tag_name FILTER html %] class="field_label [% ' bz_hidden_field' IF hidden %]
[%- ' required' IF field.is_mandatory && NOT bug.id %]"
diff --git a/template/en/default/global/field-descs.none.tmpl b/template/en/default/global/field-descs.none.tmpl
index aefef454f3..57af42af1c 100644
--- a/template/en/default/global/field-descs.none.tmpl
+++ b/template/en/default/global/field-descs.none.tmpl
@@ -125,7 +125,7 @@
"component" => "Component",
"content" => "Content",
"creation_ts" => "Creation date",
- "days_elapsed" => "Days since bug changed",
+ "days_elapsed" => "Days since $terms.bug changed",
"deadline" => "Deadline",
"delta_ts" => "Changed",
"dependson" => "Depends on",
@@ -174,6 +174,8 @@
IF !vars.field_descs.${bz_field.name}.defined %]
[% END %]
[% END %]
+
+ [% PROCESS "bug/field-help.none.tmpl" %]
[% END %]
[% Hook.process("end") %]
diff --git a/template/en/default/pages/fields.html.tmpl b/template/en/default/pages/fields.html.tmpl
index 9c905abad0..e68b1572f1 100644
--- a/template/en/default/pages/fields.html.tmpl
+++ b/template/en/default/pages/fields.html.tmpl
@@ -182,8 +182,6 @@
Other Fields
-[% PROCESS "bug/field-help.none.tmpl" %]
-
[% SET field_help_map = {} %]
[% FOREACH field = bug_fields.keys %]
[% SET field_desc = field_descs.$field %]