Created
May 11, 2018 06:26
-
-
Save sshopov/0059461c4ab494ebf48ab48dd690bf33 to your computer and use it in GitHub Desktop.
This is a handy hack for testing ArcGIS Web AppBuilder app's performance. I put it together to better understand a LayerList widget problem (described here: https://community.esri.com/message/674623-turning-the-layer-list-widget-on-causes-performance-degradation).
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
var WidgetManager = require("jimu/WidgetManager"); | |
var Extent = require("esri/geometry/Extent"); | |
var wm = WidgetManager.getInstance(); | |
var map = wm.getAllWidgets()[0].map; | |
//Fires when one or more layers begins updating their content. There is a gap between the set-extent and update-start event and it can be quite large. | |
//Fires after layers that are updating their content have completed. | |
var listener1 = map.on('update-start', | |
function(e){ | |
startTime = new Date().getTime()/1000; | |
updateStarts.push(startTime); | |
console.log('start: ' + new Date().getTime()/1000); | |
}); | |
var listener2 = map.on('update-end', | |
function(e){ | |
endTime = new Date().getTime()/1000; | |
updateEnds.push(endTime); | |
console.log( metrics1.length, 'stop: ' + (endTime - startTime), endTime - startExtentTime, startTime - startExtentTime, zzz); | |
metrics1.push(endTime - startTime); | |
metrics2.push(endTime - startExtentTime); | |
if (metrics1.length == extents.length){ | |
console.log(metrics1); | |
console.log(metrics2); | |
calculateStats(); | |
} | |
}); | |
var breakPeriod = 10; //seconds allowed for the operation to complete before the next operation is called | |
//this needs to be greater than the longest possible response time otherwise the results may be skewed | |
extents = [{"xmin":16675516.081326026,"ymin":-3434556.727452047,"xmax":16678386.052872181,"ymax":-3433499.7466703802,"spatialReference":{"wkid":102100}} , | |
{"xmin":16676258.057948027,"ymin":-3434093.029386024,"xmax":16677693.043721423,"ymax":-3433564.538995073,"spatialReference":{"wkid":102100}} , | |
{"xmin":16676723.39821615,"ymin":-3433886.261252783,"xmax":16677440.89110253,"ymax":-3433622.0160574247,"spatialReference":{"wkid":102100}} , | |
{"xmin":16676994.846705677,"ymin":-3433865.547116706,"xmax":16677174.219927272,"ymax":-3433799.4858178664,"spatialReference":{"wkid":102100}} , | |
{"xmin":16676367.040429777,"ymin":-3434096.7616627617,"xmax":16677802.026203172,"ymax":-3433568.271271811,"spatialReference":{"wkid":102100}} , | |
{"xmin":16665604.64713091,"ymin":-3438060.439594304,"xmax":16688564.419502039,"ymax":-3429604.5933402684,"spatialReference":{"wkid":102100}} , | |
{"xmin":16680025.567412717,"ymin":-3436310.1510793893,"xmax":16682895.538958872,"ymax":-3435253.1702977223,"spatialReference":{"wkid":102100}} , | |
{"xmin":16680207.403936861,"ymin":-3436121.7457480263,"xmax":16681642.389710257,"ymax":-3435593.2553570755,"spatialReference":{"wkid":102100}} , | |
{"xmin":16680648.260469358,"ymin":-3435925.726571889,"xmax":16681365.753355738,"ymax":-3435661.481376531,"spatialReference":{"wkid":102100}} , | |
{"xmin":16675267.063819608,"ymin":-3437907.5655377777,"xmax":16686746.950005488,"ymax":-3433679.6424106425,"spatialReference":{"wkid":102100}} , | |
{"xmin":16678862.58997068,"ymin":-3437970.2677874863,"xmax":16681732.561516834,"ymax":-3436913.2870058194,"spatialReference":{"wkid":102100}} , | |
{"xmin":16680329.971906213,"ymin":-3437658.100158295,"xmax":16681047.464792592,"ymax":-3437393.854962937,"spatialReference":{"wkid":102100}} ]; | |
function calculateStats(){ | |
script = require('dojo/io/script'); | |
var deferred = script.get({url:'//cdn.jsdelivr.net/jstat/latest/jstat.min.js'}); | |
deferred.then(function() { | |
s1=jStat(metrics1); | |
s2=jStat(metrics2); | |
console.log(s1.min(), s1.mean(), s1.median(), s1.max(), s1.sum(), s1.stdev(), metrics1.length); | |
console.log(s2.min(), s2.mean(), s2.median(), s2.max(), s2.sum(), s2.stdev(), metrics2.length); | |
var m1 = []; | |
var m2 = []; | |
for (var i=0; i<updateEnds.length; ++i){ | |
m1.push(updateEnds[i] - updateStarts[i]); | |
m2.push(updateEnds[i] - extentStarts[i]); | |
} | |
s1=jStat(m1); | |
s2=jStat(m2); | |
console.log(s1.min(), s1.mean(), s1.median(), s1.max(), s1.sum(), s1.stdev(), m1.length); | |
console.log(s2.min(), s2.mean(), s2.median(), s2.max(), s2.sum(), s2.stdev(), m2.length); | |
}); | |
} | |
function setExtent(i){ | |
var e = new Extent(extents[i]); | |
startExtentTime = new Date().getTime()/1000; | |
extentStarts.push(startExtentTime); | |
map.setExtent(e); | |
startExtentTime2 = new Date().getTime()/1000; | |
console.log('before after setExtent', startExtentTime2 - startExtentTime); | |
if (i == extents.length){ | |
//we are done so remove the listeners so that they don't double up | |
//listener1.remove(); | |
//listener2.remove(); | |
} | |
} | |
extentStarts = []; | |
updateStarts = []; | |
updateEnds = []; | |
metrics1 = []; | |
metrics2 = []; | |
for (i=0;i<extents.length; i++){ | |
setTimeout(setExtent.bind(null, i), breakPeriod*1000*i); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment