| <!DOCTYPE HTML> | |
| <html> | |
| <head> | |
|     <title>Graph2d | Performance</title> | |
| 
 | |
|     <style> | |
|         body, html { | |
|             font-family: arial, sans-serif; | |
|             font-size: 11pt; | |
|         } | |
|         span.label { | |
|             width:150px; | |
|             display:inline-block; | |
|         } | |
|     </style> | |
| 
 | |
|     <!-- note: moment.js must be loaded before vis.js, else vis.js uses its embedded version of moment.js --> | |
|     <script src="http://cdnjs.cloudflare.com/ajax/libs/moment.js/2.8.4/moment.min.js"></script> | |
| 
 | |
|     <script src="../../dist/vis.js"></script> | |
|     <link href="../../dist/vis.css" rel="stylesheet" type="text/css" /> | |
| </head> | |
| <body> | |
| <h2>Graph2d | Performance</h2> | |
| <div style="width:700px; font-size:14px; text-align: justify;"> | |
|     This example is a test of the performance of the Graph2d. Select the amount of datapoints you want to plot and press draw. | |
|     You can choose between the style of the points as well as the interpolation method. This can only be toggled with the buttons. | |
|     The interpolation options may not look different for this dataset but you can see their effects clearly in example 7. | |
|     <br /><br /> | |
|     Linear interpolation and no points are the settings that will render quickest. By default, Graph2d will downsample when there are more | |
|     than 1 point per pixel. This can be manually disabled at the cost of performance by using the <code>sampling</code> option. | |
| </div> | |
| <br /> | |
| <p> | |
|     <span class="label">Number of items:</span><input id="count" value="50000"> | |
|     <input id="draw" type="button" value="draw" style="width:200px;"> <span id="description"><b>Click the draw button to load the data!</b></span> | |
|     <br /> | |
| 
 | |
|     <span class="label">Interpolation method:</span><input id="interpolation" value="linear"> | |
|     <input id="toggleInterpolation" type="button" value="toggle Interpolation" style="width:200px;"> | |
|     <br /> | |
|     <span class="label">Points style:</span><input id="points" value="none"> | |
|     <input id="togglePoints" type="button" value="toggle Points" style="width:200px;"> | |
| 
 | |
| </p> | |
| <div id="visualization"></div> | |
| 
 | |
| <script> | |
|     var points = 'none'; | |
|     var interpolation = 'linear'; | |
| 
 | |
|     function togglePoints() { | |
|         var pointsOptions = {}; | |
|         var pointsField = document.getElementById("points"); | |
|         if (points == "none") { | |
|             points = 'circle'; | |
|             pointsOptions = {drawPoints: {style: points}}; | |
|         } | |
|         else if (points == "circle") { | |
|             points = 'square'; | |
|             pointsOptions = {drawPoints: {style: points}}; | |
|         } | |
|         else if (points == "square") { | |
|             points = 'none'; | |
|             pointsOptions = {drawPoints: false}; | |
|         } | |
|         pointsField.value = points; | |
| 
 | |
|         graph2d.setOptions(pointsOptions); | |
|     } | |
| 
 | |
|     function toggleInterpolation() { | |
|         var interpolationOptions = {}; | |
|         var interpolationField = document.getElementById("interpolation"); | |
|         if (interpolation == "linear") { | |
|             interpolation = 'centripetal'; | |
|             interpolationOptions = {catmullRom: {parametrization: interpolation}}; | |
|         } | |
|         else if (interpolation == "centripetal") { | |
|             interpolation = 'chordal'; | |
|             interpolationOptions = {catmullRom: {parametrization: interpolation}}; | |
|         } | |
|         else if (interpolation == "chordal") { | |
|             interpolation = 'uniform'; | |
|             interpolationOptions = {catmullRom: {parametrization: interpolation}}; | |
|         } | |
|         else if (interpolation == "uniform") { | |
|             interpolation = 'linear'; | |
|             interpolationOptions = {catmullRom: false}; | |
|         } | |
|         interpolationField.value = interpolation; | |
|         graph2d.setOptions(interpolationOptions); | |
|     } | |
| 
 | |
| 
 | |
|     // create a dataset with items | |
|     var now = moment().minutes(0).seconds(0).milliseconds(0); | |
|     var dataset = new vis.DataSet({ | |
|         type: {start: 'ISODate', end: 'ISODate' } | |
|     }); | |
| 
 | |
| 
 | |
|     var startPoint = now; | |
|     var endPoint = now + 3600000 * 5000; | |
| 
 | |
|     // create data -- this is seperated into 3 functions so we can update the span. | |
|     function createData() { | |
|         var span = document.getElementById("description"); | |
|         span.innerHTML = 'Generating data... (just javascript, not vis.graph2D)...'; | |
|         setTimeout(generateData,10); | |
|     } | |
| 
 | |
|     function generateData() { | |
|         var count = parseInt(document.getElementById('count').value) || 100; | |
|         var newData = []; | |
|         var span = document.getElementById("description"); | |
|         var start = now; | |
|         for (var i = 0; i < count; i++) { | |
|             var yval = Math.sin(i/100) * Math.cos(i/50) * 50 + Math.sin(i/1000) * 50; | |
|             newData.push({id: i, x: start + 3600000 * i, y: yval}); | |
|         } | |
|         span.innerHTML = 'Loading data into Graph2d...'; | |
|         setTimeout(function() {loadDataIntoVis(newData);},10); | |
| 
 | |
|     } | |
| 
 | |
|     function loadDataIntoVis(newData) { | |
|         var span = document.getElementById("description"); | |
|         dataset.clear(); | |
|         dataset.add(newData); | |
|         span.innerHTML = 'Done!'; | |
|     } | |
| 
 | |
|     document.getElementById('draw').onclick = createData; | |
|     document.getElementById('toggleInterpolation').onclick = toggleInterpolation; | |
|     document.getElementById('togglePoints').onclick = togglePoints; | |
| 
 | |
|     var container = document.getElementById('visualization'); | |
|     var options = { | |
|         sampling: true, | |
|         drawPoints: {enabled:false, size:3}, | |
|         catmullRom: false, | |
|         start: startPoint, | |
|         end: endPoint | |
|     }; | |
| 
 | |
|     var graph2d = new vis.Graph2d(container, dataset, options); | |
| </script> | |
| </body> | |
| </html> |