]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 730670: Do not redirect in buglist.cgi to improve performance
authorFrédéric Buclin <LpSolit@gmail.com>
Mon, 27 Feb 2012 13:54:13 +0000 (14:54 +0100)
committerFrédéric Buclin <LpSolit@gmail.com>
Mon, 27 Feb 2012 13:54:13 +0000 (14:54 +0100)
r=glob a=LpSolit

Bugzilla/CGI.pm
buglist.cgi
template/en/default/global/common-links.html.tmpl
template/en/default/list/list.html.tmpl
template/en/default/search/form.html.tmpl
template/en/default/search/search-specific.html.tmpl

index 9f50aba3274130d45704e6549877a2385064ac80..98fa3d79bfb23b094c0e42f2c594002bb0cc966d 100644 (file)
@@ -189,7 +189,10 @@ sub clean_search_url {
 
     # list_id is added in buglist.cgi after calling clean_search_url,
     # and doesn't need to be saved in saved searches.
-    $self->delete('list_id'); 
+    $self->delete('list_id');
+
+    # no_redirect is used internally by redirect_search_url().
+    $self->delete('no_redirect');
 
     # And now finally, if query_format is our only parameter, that
     # really means we have no parameters, so we should delete query_format.
@@ -445,6 +448,7 @@ sub redirect_search_url {
         return;
     }
 
+    my $no_redirect = $self->param('no_redirect');
     $self->clean_search_url();
 
     # Make sure we still have params still after cleaning otherwise we 
@@ -458,6 +462,10 @@ sub redirect_search_url {
         $self->param('list_id', $recent_search->id);
     }
 
+    # Browsers which support history.replaceState do not need to be
+    # redirected. We can fix the URL on the fly.
+    return if $no_redirect;
+
     # GET requests that lacked a list_id are always redirected. POST requests
     # are only redirected if they're under the CGI_URI_LIMIT though.
     my $uri_length = length($self->self_url());
index 0350ba7eff7c1aefdb91fc9702a40475bec8a4c1..98b10a75d20baec299d92b22a3b5639f08a5b907 100755 (executable)
@@ -37,19 +37,20 @@ my $cgi = Bugzilla->cgi;
 my $dbh = Bugzilla->dbh;
 my $template = Bugzilla->template;
 my $vars = {};
-my $buffer = $cgi->query_string();
 
 # We have to check the login here to get the correct footer if an error is
 # thrown and to prevent a logged out user to use QuickSearch if 'requirelogin'
 # is turned 'on'.
 my $user = Bugzilla->login();
 
+$cgi->redirect_search_url();
+
+my $buffer = $cgi->query_string();
 if (length($buffer) == 0) {
     print $cgi->header(-refresh=> '10; URL=query.cgi');
     ThrowUserError("buglist_parameters_required");
 }
 
-$cgi->redirect_search_url();
 
 # Determine whether this is a quicksearch query.
 my $searchstring = $cgi->param('quicksearch');
index cbfa7c77aa3b5e5aaecec6a9d1023b0b3edc85b7..5af02afa650fa7dc5a52f79c423d1053a665d9d0 100644 (file)
         onsubmit="if (this.quicksearch.value == '')
                   { alert('Please enter one or more search terms first.');
                     return false; } return true;">
+    <input type="hidden" id="no_redirect" name="no_redirect" value="0">
+    <script type="text/javascript">
+      if (history && history.replaceState) {
+        var no_redirect = document.getElementById("no_redirect");
+        no_redirect.value = 1;
+      }
+    </script>
     <input class="txt" type="text" id="quicksearch[% qs_suffix FILTER html %]" name="quicksearch" 
            title="Quick Search" value="[% quicksearch FILTER html %]">
     <input class="btn" type="submit" value="Search" 
index be8635408289ac782a6beb2dc71247c985e6d11c..f6a688c5f3eff867d396581eaeb5a6779a9140c6 100644 (file)
 
 [% PROCESS "global/field-descs.none.tmpl" %]
 
-[% title = "$terms.Bug List" %]
+[% USE Bugzilla %]
+[% cgi = Bugzilla.cgi %]
+
+[% unfiltered_title = "$terms.Bug List" %]
 [% IF searchname || defaultsavename %]
-  [% title = title _ ": " _ (searchname OR defaultsavename) FILTER html %]
+  [% unfiltered_title = unfiltered_title _ ": " _ (searchname OR defaultsavename) %]
 [% END %]
+[% title = unfiltered_title FILTER html %]
 
 [% qorder = order FILTER uri IF order %]
 
+[% javascript =  BLOCK %]
+  [% new_url = cgi.self_url %]
+  [% IF quicksearch %]
+    [% new_url = BLOCK ~%]
+      buglist.cgi?quicksearch=[% quicksearch FILTER uri %]
+      [%~ IF cgi.param('list_id') ~%]
+        &list_id=[% cgi.param('list_id') FILTER uri %]
+      [%~ END %]
+    [% END %]
+  [% END %]
+
+  if (history && history.replaceState) {
+    history.replaceState(null, "[% unfiltered_title FILTER js %]",
+                         "[% new_url FILTER js %]");
+    document.title = "[% unfiltered_title FILTER js %]";
+  }
+  [% javascript FILTER none %]
+[% END %]
 
 [%############################################################################%]
 [%# Page Header                                                              #%]
index 9b212236e609cf079413f87f75513123553c82a5..4b7ac4b079f339b60c8186d37be7344d29ad146c 100644 (file)
@@ -8,7 +8,12 @@
 
 [% PROCESS "global/field-descs.none.tmpl" %]
 
+<input type="hidden" id="no_redirect" name="no_redirect" value="0">
 <script type="text/javascript">
+  if (history && history.replaceState) {
+    var no_redirect = document.getElementById("no_redirect");
+    no_redirect.value = 1;
+  }
 
 // Hide the Advanced Fields by default, unless the user has a cookie
 // that specifies otherwise.
index ae6fa5e4b199d0e593db33df4c3c075d6ce21146..1093f70bc88d9b187995862cf29b15fd772d5c69 100644 (file)
@@ -28,6 +28,13 @@ for "crash secure SSL flash".
 <form name="queryform" method="get" action="buglist.cgi">
 <input type="hidden" name="query_format" value="specific">
 <input type="hidden" name="order" value="relevance desc">
+<input type="hidden" id="no_redirect" name="no_redirect" value="0">
+<script type="text/javascript">
+  if (history && history.replaceState) {
+    var no_redirect = document.getElementById("no_redirect");
+    no_redirect.value = 1;
+  }
+</script>
 
 <table summary="Search fields" class="bz_simple_search_form">
   <tr>