Follows-up6fa4893928(T84960), which disabled minification for 'user.tokens'. In 2014 'user.tokens' module was changed to change tokens on every page view, even for the same user within a short period of time. This led to a huge minify-cache growth, and we subsequently disabled caching for its minification result. Since then, we have also done: * Disable minification for 'user.tokens' more generally, given that it's just a simple JSON blob and we already pass down the 'debug' mode flag down to the creation of that blob, so there's virtually nothing to left to minify. * Disable minification for mw.config.set(). Config values are exported by ResourceLoaderClientHtml and not part of any module. Given that since 2015 we minify per-module and not per-response (b7eb243d92) that means config data naturally doesn't go through minification, which is good, because just like for 'user.tokens', the config data is JSON which is already created without whitespace. Minification would be pointless. However, 'user.options' is still being minified and cached, and makes up about 25% of the 'resourceloader:minify-js.*' keys in APC on Wikimedia servers. Unlike 'user.tokens', the minify cache for 'user.options' does actually get used by subsequent page views from the same user (unless preferences changed). However, it isn't useful because it's plain JSON and already compressed enough. Besides, the blob is so small that it's not worth the overhead of cache-checking. If we would want to minify it, I'd recommend we re-minify each view without cache. Change-Id: Ic0ffb0e23df9b40e2c1283c89bd876a5c0555951
81 lines
2.1 KiB
PHP
81 lines
2.1 KiB
PHP
<?php
|
|
/**
|
|
* ResourceLoader module for user preference customizations.
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License along
|
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
* http://www.gnu.org/copyleft/gpl.html
|
|
*
|
|
* @file
|
|
* @author Trevor Parscal
|
|
* @author Roan Kattouw
|
|
*/
|
|
|
|
/**
|
|
* Module for user preference customizations
|
|
*/
|
|
class ResourceLoaderUserOptionsModule extends ResourceLoaderModule {
|
|
|
|
protected $origin = self::ORIGIN_CORE_INDIVIDUAL;
|
|
|
|
protected $targets = [ 'desktop', 'mobile' ];
|
|
|
|
/**
|
|
* @param ResourceLoaderContext $context
|
|
* @return array List of module names as strings
|
|
*/
|
|
public function getDependencies( ResourceLoaderContext $context = null ) {
|
|
return [ 'user.defaults' ];
|
|
}
|
|
|
|
/**
|
|
* @return bool
|
|
*/
|
|
public function enableModuleContentVersion() {
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* @param ResourceLoaderContext $context
|
|
* @return string JavaScript code
|
|
*/
|
|
public function getScript( ResourceLoaderContext $context ) {
|
|
return Xml::encodeJsCall( 'mw.user.options.set',
|
|
[ $context->getUserObj()->getOptions( User::GETOPTIONS_EXCLUDE_DEFAULTS ) ],
|
|
ResourceLoader::inDebugMode()
|
|
) . ResourceLoader::FILTER_NOMIN;
|
|
}
|
|
|
|
/**
|
|
* @return bool
|
|
*/
|
|
public function supportsURLLoading() {
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* @param ResourceLoaderContext $context
|
|
* @return bool
|
|
*/
|
|
public function isKnownEmpty( ResourceLoaderContext $context ) {
|
|
return !$context->getUserObj()->getOptions( User::GETOPTIONS_EXCLUDE_DEFAULTS );
|
|
}
|
|
|
|
/**
|
|
* @return string
|
|
*/
|
|
public function getGroup() {
|
|
return 'private';
|
|
}
|
|
}
|