From: Niklas Laxström Date: Sun, 27 Apr 2008 14:37:37 +0000 (+0000) Subject: * Cache fallbacks separately to avoid loading whole localisations X-Git-Tag: 1.31.0-rc.0~48047 X-Git-Url: http://git.cyclocoop.org/%22.%28%24lien.?a=commitdiff_plain;h=6eba3f283dd45cfad5b03d3127ab01c96f847af0;p=lhc%2Fweb%2Fwiklou.git * Cache fallbacks separately to avoid loading whole localisations --- diff --git a/languages/Language.php b/languages/Language.php index 66cb762534..ab5a81a85d 100644 --- a/languages/Language.php +++ b/languages/Language.php @@ -176,8 +176,7 @@ class Language { } function getFallbackLanguageCode() { - $this->load(); - return $this->fallback; + return self::getFallbackFor( $this->mCode ); } /** @@ -2055,10 +2054,12 @@ class Language { # Try the global cache $memcKey = wfMemcKey('localisation', $code ); + $fbMemcKey = wfMemcKey('fallback', $cache['fallback'] ); $cache = $wgMemc->get( $memcKey ); if ( $cache ) { if ( self::isLocalisationOutOfDate( $cache ) ) { $wgMemc->delete( $memcKey ); + $wgMemc->delete( $fbMemcKey ); $cache = false; wfDebug( "Language::loadLocalisation(): localisation cache for $code had expired\n" ); } else { @@ -2147,6 +2148,7 @@ class Language { self::$mLocalisationCache[$code] = $cache; if ( !$disableCache ) { $wgMemc->set( $memcKey, $cache ); + $wgMemc->set( $fbMemcKey, $cache['fallback'] ); } wfProfileOut( __METHOD__ ); @@ -2180,8 +2182,19 @@ class Language { * Get the fallback for a given language */ static function getFallbackFor( $code ) { + global $wgMemc; + $memcKey = wfMemcKey('fallback', $code ); + $fbcode = $wgMemc->get( $memcKey ); + + if ( $fbcode !== null ) { + wfDebug( __METHOD__ . ": got fallback for $code from memc: $fbcode\n" ); + return $fbcode; + } + self::loadLocalisation( $code ); - return self::$mLocalisationCache[$code]['fallback']; + $fbcode = self::$mLocalisationCache[$code]['fallback']; + $wgMemc->set( $memcKey, $fbcode ); + return $fbcode; } /**