Erik is surprised but Nemo_bis nicely summarized the issue: Commons is a multimedia repository; as opposed to Wikipedia or Wikivoyage. MediaWiki was developed mainly for creating an encyclopaedia. Some of the shortcomings are compensated using JavaScript at Commons. We do already use load on demand techniques for larger code files (RenameLink[17], RotateLink[1], UserMessages[18], WatchlistNotice[19]) and 93 of 97 or our gadgets[20] use RL (with its white-space compression).
Gadgets without RL usage: Gadget Reason --------------------------------------- popups|popups.js|navpop.css After switching to RL, popups "did not work" for a user. Perhaps just a caching issue... contribsrange|contribsrange.js No volunteer prepared it for RL yet. GalleryDetails|GalleryDetails.js No volunteer prepared it for RL yet. Flickrfixr [...]|Flickrfixr.js No volunteer prepared it for RL yet.
Name Full size Without i18n Gadgets 2.0 would save up to ----------------------------------------------------------------------------- RotateLink[1] 2.900 Bytes 2.002 Bytes 898 Bytes (about 30%) MyUploads[4] 6.367 Bytes 1.105 Bytes 5262 Bytes (about 82%) WikiMiniAtlas[5] 23.901 Bytes 17.339 Bytes (*+compression, global gadget: 11.794 Bytes) 12.107 Bytes (about 51%) [[MediaWiki:Common.js]]
The following RL-enhanced gadgets load uncompressed i18n-user-language-files (i.e. including whitespace and comments): * AjaxQuickDelete (provides the "nominate for deletion" link) * ExtraTabs2 * [[MediaWiki:Common.js]]
Default gadgets that should not be implemented by community gadget but are due to missing Media-support in MediaWiki: * Stockphoto.js 19.526 Bytes[2] * RotateLink 2.900 Bytes [1] * Slideshow 12.645 Bytes[3] * HotCat 77.824 Bytes[6] * ImageAnnotator [7]130.798 Bytes + [10]74.933 Bytes + [11]49.152 Bytes + [12]17.398 Bytes + [13]4.731 Bytes + [14]14.950 Bytes + [15]7.099 Bytes = 299.061 Bytes
Gadgets present for legacy support (could be replaced if someone would run a bot and some templates are changed): * CollapsibleTemplates 2.150 Bytes
What could be optimised by the Community without changing any settings? * Make ImageAnnotator [7] and all its dependencies [10], [11], [12], [13], [14] a default gadget with compression by RL and load-on-demand technique.
Still no proper support for Language-switching for anonymous users, hence * AjaxTranslation[8] 3.356 Bytes * Anonymousi18n[9] 21.492 Bytes are still required.
Please do not forget to account TMH and its dependencies. Something is loading mediawiki.jqueryMsg and jquery.jStorage by default, even on the main page. Also note the all the fonts that are fetched, that makes >500 KB which is also a lot.
All byte-values are calculated from UTF-8 (windows line ending, with BOM) without gzip compression.
I did not analyse how many bytes we could save when not serving legacy code or code that does simply the same. But I guess it is enormous. That's why my appeal to the WMF is making more JS-core-features instead of waiting until all wikis and community JS-maintainers installed their own stuff. This was true, once for jQuery -- now we have stuff like LAPI ("Lupo's API")[10] or UIElements[13]; temporarily we had jStorage installed at Commons because Bug 35073[21] was "WONTFIX"ed and libAPI has been created because the core functionality is unable to deal with a lot of issues including connection loss (WiFi), logIn-loss or CAPTCHA-requests, for example. Repeating the same i18n and logic in all the modules using mw.Api is a waste of human resources.
Best Rainer -------------------- just a commons user
[1] http://bits.wikimedia.org/commons.wikimedia.org/load.php?modules=ext.gadget.... [2] http://bits.wikimedia.org/commons.wikimedia.org/load.php?modules=ext.gadget.... [3] http://bits.wikimedia.org/commons.wikimedia.org/load.php?modules=ext.gadget.... [4] http://bits.wikimedia.org/commons.wikimedia.org/load.php?modules=ext.gadget.... [5] http://meta.wikimedia.org/w/index.php?title=MediaWiki:Wikiminiatlas.js&a... [6] http://bits.wikimedia.org/commons.wikimedia.org/load.php?modules=ext.gadget.... [7] http://commons.wikimedia.org/w/index.php?title=MediaWiki:Gadget-ImageAnnotat... [8] http://commons.wikimedia.org/w/index.php?title=MediaWiki:AjaxTranslation.js&... [9] http://commons.wikimedia.org/w/index.php?title=MediaWiki:AnonymousI18N.js&am... [10] http://commons.wikimedia.org/w/index.php?title=MediaWiki:LAPI.js&action=... [11] http://commons.wikimedia.org/w/index.php?title=MediaWiki:Tooltips.js&act... [12] http://commons.wikimedia.org/w/index.php?title=MediaWiki:TextCleaner.js&... [13] http://commons.wikimedia.org/w/index.php?title=MediaWiki:UIElements.js&a... [14] http://commons.wikimedia.org/w/index.php?title=MediaWiki:ImageAnnotatorConfi... [15] http://commons.wikimedia.org/w/index.php?title=MediaWiki:AjaxSubmit.js&a... [16] http://www.mediawiki.org/wiki/Gadgets_2.0 [17] http://bits.wikimedia.org/commons.wikimedia.org/load.php?modules=ext.gadget.... [18] http://bits.wikimedia.org/commons.wikimedia.org/load.php?modules=ext.gadget.... [19] http://bits.wikimedia.org/commons.wikimedia.org/load.php?modules=ext.gadget.... [20] http://commons.wikimedia.org/wiki/MediaWiki:Gadgets-definition [21] https://bugzilla.wikimedia.org/show_activity.cgi?id=35073