-
-
Save ashishsajwan/0f6995a19ddbdf4fe45c86fca5990f29 to your computer and use it in GitHub Desktop.
AJAX timing interceptor: this class intercepts all AJAX calls and records the time taken for the HTTP request to complete. These timings are posted back to the server in batches, if there are any to send, about every two seconds. Tested in Firefox, Chrome
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(function(XHR) { | |
"use strict"; | |
var stats = []; | |
var timeoutId = null; | |
var open = XHR.prototype.open; | |
var send = XHR.prototype.send; | |
XHR.prototype.open = function(method, url, async, user, pass) { | |
this._url = url; | |
open.call(this, method, url, async, user, pass); | |
}; | |
XHR.prototype.send = function(data) { | |
var self = this; | |
var start; | |
var oldOnReadyStateChange; | |
var url = this._url; | |
function onReadyStateChange() { | |
if(self.readyState == 4 /* complete */) { | |
var time = new Date() - start; | |
stats.push({ | |
url: url, | |
duration: time | |
}); | |
if(!timeoutId) { | |
timeoutId = window.setTimeout(function() { | |
var xhr = new XHR(); | |
xhr.noIntercept = true; | |
xhr.open("POST", "/clientAjaxStats", true); | |
xhr.setRequestHeader("Content-type","application/json"); | |
xhr.send(JSON.stringify({ stats: stats } )); | |
timeoutId = null; | |
stats = []; | |
}, 2000); | |
} | |
} | |
if(oldOnReadyStateChange) { | |
oldOnReadyStateChange(); | |
} | |
} | |
if(!this.noIntercept) { | |
start = new Date(); | |
if(this.addEventListener) { | |
this.addEventListener("readystatechange", onReadyStateChange, false); | |
} else { | |
oldOnReadyStateChange = this.onreadystatechange; | |
this.onreadystatechange = onReadyStateChange; | |
} | |
} | |
send.call(this, data); | |
} | |
})(XMLHttpRequest); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment