]> 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:02:32 +0000 (17:02 +0200)
committerFrédéric Buclin <LpSolit@gmail.com>
Mon, 8 Oct 2012 15:02:32 +0000 (17:02 +0200)
r=glob a=LpSolit

Bugzilla/Util.pm

index 9e1a01e2d1bc17f0a19a20fc8c445a2993a1289b..125b2445f6a2b2b1805ecefb304517c518385631 100644 (file)
@@ -96,6 +96,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
@@ -117,7 +120,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));
 
@@ -161,14 +164,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 {