From: Aaron Schulz Date: Sat, 26 Sep 2015 05:57:58 +0000 (-0700) Subject: Made convertNamespace() use APC X-Git-Tag: 1.31.0-rc.0~9697^2 X-Git-Url: https://git.cyclocoop.org/%27.WWW_URL.%27admin/?a=commitdiff_plain;h=eb5a2fd8ea1d9f8caf19277c4bbeeba5ab8135a5;p=lhc%2Fweb%2Fwiklou.git Made convertNamespace() use APC * This can avoid MessageCache::load() calls on another language due to variants. The convertNamespace() method takes up a significant amount of time for 404 pages. Change-Id: I4551d5b8e5b5a0bc01d02702b80f93591fc19440 --- diff --git a/languages/LanguageConverter.php b/languages/LanguageConverter.php index 787930907e..5f1dca4f76 100644 --- a/languages/LanguageConverter.php +++ b/languages/LanguageConverter.php @@ -539,27 +539,45 @@ class LanguageConverter { * @return string Namespace name for display */ public function convertNamespace( $index, $variant = null ) { + if ( $index === NS_MAIN ) { + return ''; + } + if ( $variant === null ) { $variant = $this->getPreferredVariant(); } - if ( $index === NS_MAIN ) { - return ''; - } else { - // First check if a message gives a converted name in the target variant. - $nsConvMsg = wfMessage( 'conversion-ns' . $index )->inLanguage( $variant ); - if ( $nsConvMsg->exists() ) { - return $nsConvMsg->plain(); - } - // Then check if a message gives a converted name in content language - // which needs extra translation to the target variant. + + $cache = ObjectCache::newAccelerator( CACHE_NONE ); + $key = wfMemcKey( 'languageconverter', 'namespace-text', $index, $variant ); + $nsVariantText = $cache->get( $key ); + if ( $nsVariantText !== false ) { + return $nsVariantText; + } + + // First check if a message gives a converted name in the target variant. + $nsConvMsg = wfMessage( 'conversion-ns' . $index )->inLanguage( $variant ); + if ( $nsConvMsg->exists() ) { + $nsVariantText = $nsConvMsg->plain(); + } + + // Then check if a message gives a converted name in content language + // which needs extra translation to the target variant. + if ( $nsVariantText === false ) { $nsConvMsg = wfMessage( 'conversion-ns' . $index )->inContentLanguage(); if ( $nsConvMsg->exists() ) { - return $this->translate( $nsConvMsg->plain(), $variant ); + $nsVariantText = $this->translate( $nsConvMsg->plain(), $variant ); } + } + + if ( $nsVariantText === false ) { // No message exists, retrieve it from the target variant's namespace names. $langObj = $this->mLangObj->factory( $variant ); - return $langObj->getFormattedNsText( $index ); + $nsVariantText = $langObj->getFormattedNsText( $index ); } + + $cache->set( $key, $nsVariantText, 60 ); + + return $nsVariantText; } /**