From 54a7cb40c9340c4365ba5907955969fbdf8b1122 Mon Sep 17 00:00:00 2001 From: Seth Call Date: Thu, 28 May 2015 11:10:50 -0500 Subject: [PATCH] * turn timing off, and track with GA --- .../javascripts/everywhere/everywhere.js | 14 +++++---- web/app/assets/javascripts/ga.js | 31 +++++++++++++++++++ web/config/application.rb | 1 + web/config/initializers/gon.rb | 1 + 4 files changed, 41 insertions(+), 6 deletions(-) diff --git a/web/app/assets/javascripts/everywhere/everywhere.js b/web/app/assets/javascripts/everywhere/everywhere.js index f79494f42..43a844a32 100644 --- a/web/app/assets/javascripts/everywhere/everywhere.js +++ b/web/app/assets/javascripts/everywhere/everywhere.js @@ -20,8 +20,11 @@ var stun = null; var rest = context.JK.Rest(); - $(window).on('load', sendTimingResults) - $(window).on('pagehide', setNavigationStart) + if(gon.global.web_performance_timing_enabled) { + $(window).on('load', sendTimingResults) + $(window).on('pagehide', setNavigationStart) + } + $(document).on('JAMKAZAM_CONSTRUCTED', function(e, data) { @@ -262,6 +265,7 @@ // http://githubengineering.com/browser-monitoring-for-github-com/ function sendTimingResults() { + setTimeout(function() { var timing; var hasTimingApi; @@ -294,15 +298,13 @@ try { var navStart = window.sessionStorage.getItem('navigationStart') if(navStart) { - timing['simulatedNavigationStart'] = parseInt(navStart, 10) + timing['navigationStart'] = parseInt(navStart, 10) } } catch(e) { } } - - //GitHub.reportStats timing - logger.debug("timing", timing) + context.JK.GA.trackTiming(timing); }, 0) } diff --git a/web/app/assets/javascripts/ga.js b/web/app/assets/javascripts/ga.js index 8e51a081e..3ff2c28b8 100644 --- a/web/app/assets/javascripts/ga.js +++ b/web/app/assets/javascripts/ga.js @@ -284,6 +284,36 @@ logger.debug("Tracked Jam Track Play") } + function trackTiming(timing) { + + if(!timing) {return} + + try { + var computed = { + dns: timing.domainLookupEnd - timing.domainLookupStart, + connect: timing.connectEnd - timing.connectStart, + ttfb: timing.responseStart - timing.connectEnd, + basePage: timing.responseEnd - timing.responseStart, + frontEnd: timing.loadEventStart - timing.responseEnd, + domContentLoadedEvent: timing.domContentLoadedEventEnd - timing.domContentLoadedEventStart, + windowLoadEvent: timing.loadEventEnd - timing.loadEventStart, + domInteractive: timing.domInteractive - timing.domLoading, + domComplete: timing.domComplete - timing.domLoading, + domCompleteToOnload: timing.loadEventStart - timing.domComplete + }; + + logger.debug("page load time: " + computed.frontEnd) + context._.each(computed, function (key, value) { + if (value > 0 && value < 60000) { + context.ga("send", "timing", "NavigationTiming", key, value); + } + }) + } + catch(e) { + logger.error("loading times failed in ga.js", e) + } + } + // if you want to pass in no title, either omit it from the arg list when u invoke virtualPageView, or pass in undefined, NOT null function virtualPageView(page, title) { @@ -445,6 +475,7 @@ GA.trackBand = trackBand; GA.trackJKSocial = trackJKSocial; GA.virtualPageView = virtualPageView; + GA.trackTiming = trackTiming; context.JK.GA = GA; diff --git a/web/config/application.rb b/web/config/application.rb index 44b5ce2ff..60c645415 100644 --- a/web/config/application.rb +++ b/web/config/application.rb @@ -345,5 +345,6 @@ if defined?(Bundler) config.error_on_fraud = false config.expire_fingerprint_days = 14 config.found_conflict_count = 1 + config.web_performance_timing_enabled = true end end diff --git a/web/config/initializers/gon.rb b/web/config/initializers/gon.rb index 2201a6833..71c0a7493 100644 --- a/web/config/initializers/gon.rb +++ b/web/config/initializers/gon.rb @@ -16,4 +16,5 @@ Gon.global.video_available = Rails.application.config.video_available Gon.global.gear_check_ignore_high_latency = Rails.application.config.gear_check_ignore_high_latency Gon.global.purchases_enabled = Rails.application.config.purchases_enabled Gon.global.estimate_taxes = Rails.application.config.estimate_taxes +Gon.global.web_performance_timing_enabled = Rails.application.config.web_performance_timing_enabled Gon.global.env = Rails.env