Optimize parse_request for the home page. Props duck_. see #17177

git-svn-id: http://svn.automattic.com/wordpress/trunk@18466 1a063a9b-81f0-0310-95a4-ce76da25c4cd
This commit is contained in:
ryan 2011-07-25 20:18:07 +00:00
parent 009b264271
commit b1842a700c
1 changed files with 39 additions and 41 deletions

View File

@ -185,54 +185,52 @@ class WP {
// Look for matches. // Look for matches.
$request_match = $request; $request_match = $request;
foreach ( (array) $rewrite as $match => $query) { if ( empty( $req_uri ) ) {
// Don't try to match against AtomPub calls if ( isset( $rewrite['$'] ) ) {
if ( $req_uri == 'wp-app.php' ) $this->matched_rule = '$';
break; $query = $rewrite['$'];
$matches = array('');
// If the requesting file is the anchor of the match, prepend it
// to the path info.
if ( (! empty($req_uri)) && (strpos($match, $req_uri) === 0) && ($req_uri != $request) )
$request_match = $req_uri . '/' . $request;
if ( preg_match("#^$match#", $request_match, $matches) ||
preg_match("#^$match#", urldecode($request_match), $matches) ) {
// Got a match.
$this->matched_rule = $match;
// Trim the query of everything up to the '?'.
$query = preg_replace("!^.+\?!", '', $query);
// Substitute the substring matches into the query.
$query = addslashes(WP_MatchesMapRegex::apply($query, $matches));
$this->matched_query = $query;
// Parse the query.
parse_str($query, $perma_query_vars);
// If we're processing a 404 request, clear the error var
// since we found something.
if ( isset($_GET['error']) )
unset($_GET['error']);
if ( isset($error) )
unset($error);
break;
} }
} else if ( $req_uri != 'wp-app.php' ) {
foreach ( (array) $rewrite as $match => $query ) {
// If the requesting file is the anchor of the match, prepend it to the path info.
if ( ! empty($req_uri) && strpos($match, $req_uri) === 0 && $req_uri != $request )
$request_match = $req_uri . '/' . $request;
if ( preg_match("#^$match#", $request_match, $matches) ||
preg_match("#^$match#", urldecode($request_match), $matches) ) {
// Got a match.
$this->matched_rule = $match;
break;
}
}
}
if ( isset( $this->matched_rule ) ) {
// Trim the query of everything up to the '?'.
$query = preg_replace("!^.+\?!", '', $query);
// Substitute the substring matches into the query.
$query = addslashes(WP_MatchesMapRegex::apply($query, $matches));
$this->matched_query = $query;
// Parse the query.
parse_str($query, $perma_query_vars);
// If we're processing a 404 request, clear the error var
// since we found something.
unset( $_GET['error'] );
unset( $error );
} }
// If req_uri is empty or if it is a request for ourself, unset error. // If req_uri is empty or if it is a request for ourself, unset error.
if ( empty($request) || $req_uri == $self || strpos($_SERVER['PHP_SELF'], 'wp-admin/') !== false ) { if ( empty($request) || $req_uri == $self || strpos($_SERVER['PHP_SELF'], 'wp-admin/') !== false ) {
if ( isset($_GET['error']) ) unset( $_GET['error'] );
unset($_GET['error']); unset( $error );
if ( isset($error) )
unset($error);
if ( isset($perma_query_vars) && strpos($_SERVER['PHP_SELF'], 'wp-admin/') !== false ) if ( isset($perma_query_vars) && strpos($_SERVER['PHP_SELF'], 'wp-admin/') !== false )
unset($perma_query_vars); unset( $perma_query_vars );
$this->did_permalink = false; $this->did_permalink = false;
} }