jenkins-bot has submitted this change and it was merged. Change subject: Don't report stats when page visibility changes during page load ......................................................................
Don't report stats when page visibility changes during page load Browsers sometime defer or deprioritize painting or executing code on pages that load in the background (for example, in an inactive browser tab). We don't want to report metrics in these cases, because a slow page load is not necessarily a bad thing if it is invisible to the user and if the slowdown is in service of making some operation that is user-facing quicker. Bug: T146510 Change-Id: I8e8ec96fc99f1e38d254f421c5f48cb313ba36e5 (cherry picked from commit 9532593ecc78b6415d4a014850e1c4d5a05b6c73) --- M modules/ext.navigationTiming.js 1 file changed, 29 insertions(+), 2 deletions(-) Approvals: Ori.livneh: Looks good to me, approved jenkins-bot: Verified diff --git a/modules/ext.navigationTiming.js b/modules/ext.navigationTiming.js index 5c45e64..3baf459 100644 --- a/modules/ext.navigationTiming.js +++ b/modules/ext.navigationTiming.js @@ -8,12 +8,39 @@ ( function ( mw, $ ) { 'use strict'; - var timing, navigation, mediaWikiLoadEnd, + var timing, navigation, mediaWikiLoadEnd, hiddenProp, visibilityEvent, + visibilityChanged = false, TYPE_NAVIGATE = 0; if ( window.performance ) { timing = performance.timing; navigation = performance.navigation; + } + + // Don't report measurements for pages that have loaded in the background. + // Browsers defer or deprioritize loading background pages, causing them to + // take longer to load, which throws off our measurements. + // See <https://phabricator.wikimedia.org/T146510#2794213> for more details. + if ( typeof document.hidden !== 'undefined' ) { + hiddenProp = 'hidden'; + visibilityEvent = 'visibilitychange'; + } else if ( typeof document.mozHidden !== 'undefined' ) { + hiddenProp = 'mozHidden'; + visibilityEvent = 'mozvisibilitychange'; + } else if ( typeof document.msHidden !== 'undefined' ) { + hiddenProp = 'msHidden'; + visibilityEvent = 'msvisibilitychange'; + } else if ( typeof document.webkitHidden !== 'undefined' ) { + hiddenProp = 'webkitHidden'; + visibilityEvent = 'webkitvisibilitychange'; + } + if ( hiddenProp ) { + $( document ).one( visibilityEvent, function () { + visibilityChanged = true; + } ); + if ( document[ hiddenProp ] ) { + visibilityChanged = true; + } } function inSample() { @@ -234,7 +261,7 @@ // Ensure we run after loadEventEnd. onLoadComplete( function () { - if ( inSample() ) { + if ( inSample() && !visibilityChanged ) { emitNavigationTiming(); } mw.hook( 'postEdit' ).add( emitSaveTiming ); -- To view, visit https://gerrit.wikimedia.org/r/322096 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: merged Gerrit-Change-Id: I8e8ec96fc99f1e38d254f421c5f48cb313ba36e5 Gerrit-PatchSet: 1 Gerrit-Project: mediawiki/extensions/NavigationTiming Gerrit-Branch: wmf/1.29.0-wmf.3 Gerrit-Owner: Ori.livneh <o...@wikimedia.org> Gerrit-Reviewer: Ori.livneh <o...@wikimedia.org> Gerrit-Reviewer: jenkins-bot <> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits