EBernhardson has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/247885

Change subject: Refactor search.js to only load deps for users in test
......................................................................

Refactor search.js to only load deps for users in test

This should reduce the amount of code loaded by 999 out of 1000
users of WMF wiki's.

Change-Id: I846752cef863e2c1fad1ba1f4fcaeb39868c2676
---
M WikimediaEvents.php
M modules/ext.wikimediaEvents.search.js
2 files changed, 46 insertions(+), 42 deletions(-)


  git pull 
ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/WikimediaEvents 
refs/changes/85/247885/1

diff --git a/WikimediaEvents.php b/WikimediaEvents.php
index 846a1d1..1e13c88 100644
--- a/WikimediaEvents.php
+++ b/WikimediaEvents.php
@@ -113,8 +113,6 @@
                'dependencies' => array(
                        'mediawiki.user', // needed by search.js, 
searchSuggest.js
                        'mediawiki.Uri', // needed by searchSatisfaction.js
-                       'schema.Search', // needed by search.js
-                       'ext.eventLogging', // needed by search.js
                ),
                'localBasePath' => __DIR__ . '/modules',
                'remoteExtPath' => 'WikimediaEvents/modules',
diff --git a/modules/ext.wikimediaEvents.search.js 
b/modules/ext.wikimediaEvents.search.js
index 6062562..0edd61b 100644
--- a/modules/ext.wikimediaEvents.search.js
+++ b/modules/ext.wikimediaEvents.search.js
@@ -2,51 +2,57 @@
 ( function ( $ ) {
        'use strict';
 
-       var isLoggingEnabled = mw.config.get( 
'wgCirrusSearchEnableSearchLogging' ),
-               // For 1 in a 1000 users the metadata about interaction
-               // with the search form (absent search terms) is event logged.
-               // See https://meta.wikimedia.org/wiki/Schema:Search
-               isSampled = Math.random() < 1 / 1000,
-               defaults,
-               sessionStartTime;
+       var defaults, depsPromise, sessionStartTime,
+               getRandomToken = function () {
+                       return mw.user.generateRandomSessionId() + ( new Date() 
).getTime().toString();
+               },
+               oneIn = function ( populationSize ) {
+                       var rand = parseInt( 
mw.user.generateRandomSessionId().slice( 0, 13 ), 16 );
+                       return rand % populationSize === 0;
+               },
+               isLoggingEnabled = mw.config.get( 
'wgCirrusSearchEnableSearchLogging' );
 
-       /**
-        * Generate a random token
-        * @return {String}
-        */
-       function getRandomToken() {
-               return mw.user.generateRandomSessionId() + ( new Date() 
).getTime().toString();
+       // For 1 in a 1000 users the metadata about interaction
+       // with the search form (absent search terms) is event logged.
+       // See https://meta.wikimedia.org/wiki/Schema:Search
+       if ( !isLoggingEnabled || !oneIn( 1000 ) ) {
+               return;
        }
 
-       if ( isLoggingEnabled && isSampled ) {
-               defaults = {
-                       platform: 'desktop',
-                       userSessionToken: getRandomToken(),
-                       searchSessionToken: getRandomToken()
+       depsPromise = mw.loader.using( [
+               'schema.Search',
+               'ext.eventLogging'
+       ] );
+
+       defaults = {
+               platform: 'desktop',
+               userSessionToken: getRandomToken(),
+               searchSessionToken: getRandomToken()
+       };
+
+       mw.trackSubscribe( 'mediawiki.searchSuggest', function ( topic, data ) {
+               var loggingData = {
+                       action: data.action
                };
 
-               mw.trackSubscribe( 'mediawiki.searchSuggest', function ( topic, 
data ) {
-                       var loggingData = {
-                               action: data.action
-                       };
-
-                       if ( data.action === 'session-start' ) {
-                               // update session token if it's a new search
-                               defaults.searchSessionToken = getRandomToken();
-                               sessionStartTime = this.timeStamp;
-                       } else if ( data.action === 'impression-results' ) {
-                               loggingData.numberOfResults = 
data.numberOfResults;
-                               loggingData.resultSetType = data.resultSetType;
-                               loggingData.timeToDisplayResults = Math.round( 
this.timeStamp - sessionStartTime );
-                       } else if ( data.action === 'click-result' ) {
-                               loggingData.clickIndex = data.clickIndex;
-                               loggingData.numberOfResults = 
data.numberOfResults;
-                       } else if ( data.action === 'submit-form' ) {
-                               loggingData.numberOfResults = 
data.numberOfResults;
-                       }
-                       loggingData.timeOffsetSinceStart = Math.round( 
this.timeStamp - sessionStartTime ) ;
-                       $.extend( loggingData, defaults );
+               if ( data.action === 'session-start' ) {
+                       // update session token if it's a new search
+                       defaults.searchSessionToken = getRandomToken();
+                       sessionStartTime = this.timeStamp;
+               } else if ( data.action === 'impression-results' ) {
+                       loggingData.numberOfResults = data.numberOfResults;
+                       loggingData.resultSetType = data.resultSetType;
+                       loggingData.timeToDisplayResults = Math.round( 
this.timeStamp - sessionStartTime );
+               } else if ( data.action === 'click-result' ) {
+                       loggingData.clickIndex = data.clickIndex;
+                       loggingData.numberOfResults = data.numberOfResults;
+               } else if ( data.action === 'submit-form' ) {
+                       loggingData.numberOfResults = data.numberOfResults;
+               }
+               loggingData.timeOffsetSinceStart = Math.round( this.timeStamp - 
sessionStartTime ) ;
+               $.extend( loggingData, defaults );
+               depsPromise.then( function () {
                        mw.eventLog.logEvent( 'Search', loggingData );
                } );
-       }
+       } );
 }( jQuery ) );

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I846752cef863e2c1fad1ba1f4fcaeb39868c2676
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/WikimediaEvents
Gerrit-Branch: master
Gerrit-Owner: EBernhardson <[email protected]>

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

Reply via email to