Move Article checkLastModified() up to MediaWiki::performRequest
authorAaron Schulz <aschulz@wikimedia.org>
Wed, 24 Aug 2016 06:53:31 +0000 (23:53 -0700)
committerAaron Schulz <aschulz@wikimedia.org>
Wed, 24 Aug 2016 06:53:31 +0000 (23:53 -0700)
This lets revalidations via IMS headers run a bit faster.

Change-Id: I1f61086dea4c6bc460f6249ed7fda78316117a8d

includes/MediaWiki.php
includes/page/Article.php
includes/page/WikiPage.php

index 77ac76a..2a00900 100644 (file)
@@ -286,6 +286,16 @@ class MediaWiki {
                                // may still be a wikipage redirect to another article or URL.
                                $article = $this->initializeArticle();
                                if ( is_object( $article ) ) {
+                                       $url = $request->getFullRequestURL(); // requested URL
+                                       if (
+                                               $request->getMethod() === 'GET' &&
+                                               $url === $article->getTitle()->getCanonicalURL() &&
+                                               $article->checkTouched() &&
+                                               $output->checkLastModified( $article->getTouched() )
+                                       ) {
+                                               wfDebug( __METHOD__ . ": done 304\n" );
+                                               return;
+                                       }
                                        $this->performAction( $article, $requestTitle );
                                } elseif ( is_string( $article ) ) {
                                        $output->redirect( $article );
index 6396aaa..b3a97f7 100644 (file)
@@ -543,13 +543,8 @@ class Article implements Page {
                                }
                        }
 
-                       # Is it client cached?
-                       if ( $outputPage->checkLastModified( $timestamp ) ) {
-                               wfDebug( __METHOD__ . ": done 304\n" );
-
-                               return;
-                       # Try file cache
-                       } elseif ( $wgUseFileCache && $this->tryFileCache() ) {
+                       # Try to stream the output from file cache
+                       if ( $wgUseFileCache && $this->tryFileCache() ) {
                                wfDebug( __METHOD__ . ": done file cache\n" );
                                # tell wgOut that output is taken care of
                                $outputPage->disable();
index 3851d15..4066501 100644 (file)
@@ -504,13 +504,13 @@ class WikiPage implements Page, IDBAccessObject {
 
        /**
         * Loads page_touched and returns a value indicating if it should be used
-        * @return bool True if not a redirect
+        * @return bool True if this page exists and is not a redirect
         */
        public function checkTouched() {
                if ( !$this->mDataLoaded ) {
                        $this->loadPageData();
                }
-               return !$this->mIsRedirect;
+               return ( $this->mId && !$this->mIsRedirect );
        }
 
        /**