Follows-up
b7b84d55d4e, which embedded the whole of the three 'mediawiki'
JS files inside of startup.js, but did so inside of the pre-existing
closure that was there.
This adds some overhead we don't get value of, so best to remove
it and embed it as a sibling of startup.js in the same top-level
scope.
In local testing (Chrome stable, CPU 1/6th) this reduced startup
run-time from 73-78ms to 63-65ms.
Also:
* Declare isCompatible() as a normal function.
Disable the implicit-globals warning given this isn't a regular module,
this file is intentionally in the global scope.
* Unfold the private startUp() function to its call site.
Change-Id: Ida51ab20898c9e4ae6cbf7ad2968d88d824a1483
*
* - Beware: This file MUST parse without errors on even the most ancient of browsers!
*/
*
* - Beware: This file MUST parse without errors on even the most ancient of browsers!
*/
-/* eslint-disable vars-on-top, no-unmodified-loop-condition */
-/* global isCompatible, $VARS, $CODE */
+/* eslint-disable no-implicit-globals, vars-on-top, no-unmodified-loop-condition */
+/* global $VARS, $CODE */
/**
* See <https://www.mediawiki.org/wiki/Compatibility#Browsers>
/**
* See <https://www.mediawiki.org/wiki/Compatibility#Browsers>
* @param {string} [str] User agent, defaults to navigator.userAgent
* @return {boolean} User agent is compatible with MediaWiki JS
*/
* @param {string} [str] User agent, defaults to navigator.userAgent
* @return {boolean} User agent is compatible with MediaWiki JS
*/
-window.isCompatible = function ( str ) {
+function isCompatible( str ) {
var ua = str || navigator.userAgent;
return !!(
// https://caniuse.com/#feat=es5
var ua = str || navigator.userAgent;
return !!(
// https://caniuse.com/#feat=es5
// Note: Please extend the regex instead of adding new ones
!ua.match( /MSIE 10|webOS\/1\.[0-4]|SymbianOS|Series60|NetFront|Opera Mini|S40OviBrowser|MeeGo|Android.+Glass|^Mozilla\/5\.0 .+ Gecko\/$|googleweblight|PLAYSTATION|PlayStation/ )
);
// Note: Please extend the regex instead of adding new ones
!ua.match( /MSIE 10|webOS\/1\.[0-4]|SymbianOS|Series60|NetFront|Opera Mini|S40OviBrowser|MeeGo|Android.+Glass|^Mozilla\/5\.0 .+ Gecko\/$|googleweblight|PLAYSTATION|PlayStation/ )
);
-( function () {
- var NORLQ;
+if ( !isCompatible() ) {
- if ( !isCompatible() ) {
- // Undo speculative Grade A <html> class. See ResourceLoaderClientHtml::getDocumentAttributes().
- document.documentElement.className = document.documentElement.className
- .replace( /(^|\s)client-js(\s|$)/, '$1client-nojs$2' );
+ // Undo speculative Grade A <html> class. See ResourceLoaderClientHtml::getDocumentAttributes().
+ document.documentElement.className = document.documentElement.className
+ .replace( /(^|\s)client-js(\s|$)/, '$1client-nojs$2' );
- // Process any callbacks for Grade C
- NORLQ = window.NORLQ;
- while ( NORLQ && NORLQ[ 0 ] ) {
- NORLQ.shift()();
+ // Process any callbacks for Grade C
+ while ( window.NORLQ && window.NORLQ[ 0 ] ) {
+ window.NORLQ.shift()();
+ }
+ window.NORLQ = {
+ push: function ( fn ) {
+ fn();
- window.NORLQ = {
- push: function ( fn ) {
- fn();
- }
- };
- // Clear and disable the Grade A queue
- window.RLQ = {
- push: function () {}
- };
+ // Clear and disable the Grade A queue
+ window.RLQ = {
+ push: function () {}
+ };
+} else {
+ // Handle Grade A
+ if ( window.performance && performance.mark ) {
+ performance.mark( 'mwStartup' );
+ // This embeds mediawiki.js, which defines 'mw' and 'mw.loader'.
+ $CODE.defineLoader();
+
/**
* The $CODE and $VARS placeholders are substituted in ResourceLoaderStartUpModule.php.
*/
/**
* The $CODE and $VARS placeholders are substituted in ResourceLoaderStartUpModule.php.
*/
mw.config = new mw.Map( $VARS.wgLegacyJavaScriptGlobals );
$CODE.registrations();
mw.config = new mw.Map( $VARS.wgLegacyJavaScriptGlobals );
$CODE.registrations();
window.NORLQ = {
push: function () {}
};
window.NORLQ = {
push: function () {}
};
- }
-
- if ( window.performance && performance.mark ) {
- performance.mark( 'mwStartup' );
- }
-
- // This embeds mediawiki.js, which defines 'mw' and 'mw.loader'.
- $CODE.defineLoader();
-
- startUp();
-}() );
$this->assertRegExp( '/Ferry not found/', $errors[0] );
$this->assertCount( 1, $errors );
$this->assertRegExp(
$this->assertRegExp( '/Ferry not found/', $errors[0] );
$this->assertCount( 1, $errors );
$this->assertRegExp(
- '/isCompatible.*function startUp/s',
+ '/isCompatible.*window\.RLQ/s',
$response,
'startup response undisrupted (T152266)'
);
$response,
'startup response undisrupted (T152266)'
);