]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 795650: Cache the HTML::Scrubber object for improved performance
authorFrédéric Buclin <LpSolit@gmail.com>
Mon, 8 Oct 2012 15:03:59 +0000 (17:03 +0200)
committerFrédéric Buclin <LpSolit@gmail.com>
Mon, 8 Oct 2012 15:03:59 +0000 (17:03 +0200)
r=glob a=LpSolit

Bugzilla/Util.pm

index 810c6972fea50b473658dac24704db33e413d1cd..28f13ba29f03fb0d2547b15aa6cfa3ea62ae0975 100644 (file)
@@ -95,6 +95,9 @@ sub html_quote {
 
 sub html_light_quote {
     my ($text) = @_;
+    # admin/table.html.tmpl calls |FILTER html_light| many times.
+    # There is no need to recreate the HTML::Scrubber object again and again.
+    my $scrubber = Bugzilla->process_cache->{html_scrubber};
 
     # List of allowed HTML elements having no attributes.
     my @allow = qw(b strong em i u p br abbr acronym ins del cite code var
@@ -116,7 +119,7 @@ sub html_light_quote {
         $text =~ s#$chr($safe)$chr#<$1>#go;
         return $text;
     }
-    else {
+    elsif (!$scrubber) {
         # We can be less restrictive. We can accept elements with attributes.
         push(@allow, qw(a blockquote q span));
 
@@ -160,14 +163,14 @@ sub html_light_quote {
                           },
                     );
 
-        my $scrubber = HTML::Scrubber->new(default => \@default,
-                                           allow   => \@allow,
-                                           rules   => \@rules,
-                                           comment => 0,
-                                           process => 0);
-
-        return $scrubber->scrub($text);
+        Bugzilla->process_cache->{html_scrubber} = $scrubber =
+          HTML::Scrubber->new(default => \@default,
+                              allow   => \@allow,
+                              rules   => \@rules,
+                              comment => 0,
+                              process => 0);
     }
+    return $scrubber->scrub($text);
 }
 
 sub email_filter {