* Cache fallbacks separately to avoid loading whole localisations
authorNiklas Laxström <nikerabbit@users.mediawiki.org>
Sun, 27 Apr 2008 14:37:37 +0000 (14:37 +0000)
committerNiklas Laxström <nikerabbit@users.mediawiki.org>
Sun, 27 Apr 2008 14:37:37 +0000 (14:37 +0000)
languages/Language.php

index 66cb762..ab5a81a 100644 (file)
@@ -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;
        }
 
        /**