Krinkle has uploaded a new change for review. ( 
https://gerrit.wikimedia.org/r/342669 )

Change subject: ext.navigationTiming: Only load eventlogging when needed
......................................................................

ext.navigationTiming: Only load eventlogging when needed

Previously the schema modules (and their eventlogging client dependency)
were unconditionally loadedon all page views. This is an anti-pattern
because most metrics happen on user interaction, not on all page views.

In case of Navigation Timing, the metric is the page load itself, however
we still have sampling, so we should lazy-load here as well.

Fix by removing the dependencies and instead using the standard pattern of
mw.loader.using() and then calling mw.eventLog.logEvent().

As optimization, check inSample() early and preload the required modules.

Bug: T159911
Change-Id: I00495ab8cacc2b9cc67ff8376bc1e047e561818b
---
M NavigationTiming.hooks.php
M extension.json
M modules/ext.navigationTiming.js
3 files changed, 19 insertions(+), 6 deletions(-)


  git pull 
ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/NavigationTiming 
refs/changes/69/342669/1

diff --git a/NavigationTiming.hooks.php b/NavigationTiming.hooks.php
index afd5bc1..7535ac9 100644
--- a/NavigationTiming.hooks.php
+++ b/NavigationTiming.hooks.php
@@ -13,7 +13,11 @@
        public static function onResourceLoaderTestModules( array &$modules, 
ResourceLoader &$rl ) {
                $modules['qunit']['ext.navigationTiming.test'] = [
                        'scripts' => [ 'tests/ext.navigationTiming.test.js' ],
-                       'dependencies' => [ 'ext.navigationTiming' ],
+                       'dependencies' => [
+                               'ext.navigationTiming',
+                               'schema.NavigationTiming',
+                               'schema.SaveTiming',
+                       ],
                        'localBasePath' => __DIR__ ,
                        'remoteExtPath' => 'NavigationTiming',
                ];
diff --git a/extension.json b/extension.json
index fd259ed..aaa48c2 100644
--- a/extension.json
+++ b/extension.json
@@ -25,8 +25,6 @@
                                "ext.navigationTiming.js"
                        ],
                        "dependencies": [
-                               "schema.NavigationTiming",
-                               "schema.SaveTiming",
                                "jquery.cookie"
                        ],
                        "targets": [
diff --git a/modules/ext.navigationTiming.js b/modules/ext.navigationTiming.js
index c817f9d..951a69c 100644
--- a/modules/ext.navigationTiming.js
+++ b/modules/ext.navigationTiming.js
@@ -9,6 +9,7 @@
        'use strict';
 
        var timing, navigation, mediaWikiLoadEnd, hiddenProp, visibilityEvent,
+               loadEL,
                visibilityChanged = false,
                TYPE_NAVIGATE = 0;
 
@@ -227,10 +228,18 @@
                } );
        }
 
+       // Only perform actual instrumentation when page load is in the sampling
+       if ( !inSample() ) {
+               return;
+       }
+
        if ( window.performance ) {
                timing = performance.timing;
                navigation = performance.navigation;
        }
+
+       // Preload EventLogging and schema modules
+       loadEL = mw.loader.using( [ 'schema.NavigationTiming', 
'schema.SaveTiming' ] );
 
        // Don't report measurements for pages that have loaded in the 
background.
        // Browsers defer or deprioritize loading background pages, causing 
them to
@@ -260,10 +269,12 @@
 
        // Ensure we run after loadEventEnd.
        onLoadComplete( function () {
-               if ( inSample() && !visibilityChanged ) {
-                       emitNavigationTiming();
+               if ( !visibilityChanged ) {
+                       loadEL.then( emitNavigationTiming );
                }
-               mw.hook( 'postEdit' ).add( emitSaveTiming );
+               mw.hook( 'postEdit' ).add( function () {
+                       loadEL.then( emitSaveTiming );
+               } );
        } );
 
        if ( typeof QUnit !== 'undefined' ) {

-- 
To view, visit https://gerrit.wikimedia.org/r/342669
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I00495ab8cacc2b9cc67ff8376bc1e047e561818b
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/NavigationTiming
Gerrit-Branch: master
Gerrit-Owner: Krinkle <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to