diff options
author | Frédéric Buclin <LpSolit@gmail.com> | 2012-02-27 14:54:13 +0100 |
---|---|---|
committer | Frédéric Buclin <LpSolit@gmail.com> | 2012-02-27 14:54:13 +0100 |
commit | 50ee6eb2ff149ab3f3b67af839680a0e2ea9eedc (patch) | |
tree | 5dbaa90d673b2c6de97c4cdb869e5047f54472d5 | |
parent | c650592f1cdb27e5605d70a80ae03e9a2afb879b (diff) | |
download | bugzilla-50ee6eb2ff149ab3f3b67af839680a0e2ea9eedc.tar.gz bugzilla-50ee6eb2ff149ab3f3b67af839680a0e2ea9eedc.tar.xz |
Bug 730670: Do not redirect in buglist.cgi to improve performance
r=glob a=LpSolit
-rw-r--r-- | Bugzilla/CGI.pm | 10 | ||||
-rwxr-xr-x | buglist.cgi | 5 | ||||
-rw-r--r-- | template/en/default/global/common-links.html.tmpl | 7 | ||||
-rw-r--r-- | template/en/default/list/list.html.tmpl | 26 | ||||
-rw-r--r-- | template/en/default/search/form.html.tmpl | 5 | ||||
-rw-r--r-- | template/en/default/search/search-specific.html.tmpl | 7 |
6 files changed, 55 insertions, 5 deletions
diff --git a/Bugzilla/CGI.pm b/Bugzilla/CGI.pm index 9f50aba32..98fa3d79b 100644 --- a/Bugzilla/CGI.pm +++ b/Bugzilla/CGI.pm @@ -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()); diff --git a/buglist.cgi b/buglist.cgi index 0350ba7ef..98b10a75d 100755 --- a/buglist.cgi +++ b/buglist.cgi @@ -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'); diff --git a/template/en/default/global/common-links.html.tmpl b/template/en/default/global/common-links.html.tmpl index cbfa7c77a..5af02afa6 100644 --- a/template/en/default/global/common-links.html.tmpl +++ b/template/en/default/global/common-links.html.tmpl @@ -21,6 +21,13 @@ 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" diff --git a/template/en/default/list/list.html.tmpl b/template/en/default/list/list.html.tmpl index be8635408..f6a688c5f 100644 --- a/template/en/default/list/list.html.tmpl +++ b/template/en/default/list/list.html.tmpl @@ -18,13 +18,35 @@ [% 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 #%] diff --git a/template/en/default/search/form.html.tmpl b/template/en/default/search/form.html.tmpl index 9b212236e..4b7ac4b07 100644 --- a/template/en/default/search/form.html.tmpl +++ b/template/en/default/search/form.html.tmpl @@ -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. diff --git a/template/en/default/search/search-specific.html.tmpl b/template/en/default/search/search-specific.html.tmpl index ae6fa5e4b..1093f70bc 100644 --- a/template/en/default/search/search-specific.html.tmpl +++ b/template/en/default/search/search-specific.html.tmpl @@ -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> |