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

Reply via email to