From b0dc2c755b081e4783b265a55bfd95fe076b6349 Mon Sep 17 00:00:00 2001 From: Aaron Schulz Date: Sun, 11 Sep 2016 06:13:20 -0700 Subject: [PATCH] Reduce WikiPage::getContentModel() queries via caching Change-Id: I3b25be5e2b456d495cd89da9ef88cf3a2f83cbdf --- includes/page/WikiPage.php | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/includes/page/WikiPage.php b/includes/page/WikiPage.php index d5dfd3d00a..b09ef0d057 100644 --- a/includes/page/WikiPage.php +++ b/includes/page/WikiPage.php @@ -488,15 +488,23 @@ class WikiPage implements Page, IDBAccessObject { */ public function getContentModel() { if ( $this->exists() ) { - // look at the revision's actual content model - $rev = $this->getRevision(); - - if ( $rev !== null ) { - return $rev->getContentModel(); - } else { - $title = $this->mTitle->getPrefixedDBkey(); - wfWarn( "Page $title exists but has no (visible) revisions!" ); - } + $cache = ObjectCache::getMainWANInstance(); + + return $cache->getWithSetCallback( + $cache->makeKey( 'page', 'content-model', $this->getLatest() ), + $cache::TTL_MONTH, + function () { + $rev = $this->getRevision(); + if ( $rev ) { + // Look at the revision's actual content model + return $rev->getContentModel(); + } else { + $title = $this->mTitle->getPrefixedDBkey(); + wfWarn( "Page $title exists but has no (visible) revisions!" ); + return $this->mTitle->getContentModel(); + } + } + ); } // use the default model for this page -- 2.20.1