| | 1 | <html xmlns="http://www.w3.org/1999/xhtml"> |
|---|
| | 2 | <head> |
|---|
| | 3 | <title>Vector Features Performance Test</title> |
|---|
| | 4 | <style type="text/css"> |
|---|
| | 5 | body { |
|---|
| | 6 | font-size: 0.8em; |
|---|
| | 7 | } |
|---|
| | 8 | p { |
|---|
| | 9 | padding-top: 1em; |
|---|
| | 10 | } |
|---|
| | 11 | #map { |
|---|
| | 12 | margin: 1em; |
|---|
| | 13 | width: 512px; |
|---|
| | 14 | height: 512px; |
|---|
| | 15 | } |
|---|
| | 16 | </style> |
|---|
| | 17 | |
|---|
| | 18 | <script src="../../lib/Firebug/firebug.js"></script> |
|---|
| | 19 | <script src="../../lib/OpenLayers.js"></script> |
|---|
| | 20 | <script type="text/javascript"> |
|---|
| | 21 | var map, wmsLayer, vectorLayer, drawFeature, features |
|---|
| | 22 | |
|---|
| | 23 | var run = 0; |
|---|
| | 24 | |
|---|
| | 25 | function nextRun() { |
|---|
| | 26 | window.setTimeout(function() { |
|---|
| | 27 | if (run < 4) { |
|---|
| | 28 | vectorLayer.removeFeatures(features); |
|---|
| | 29 | } |
|---|
| | 30 | }, 750); |
|---|
| | 31 | |
|---|
| | 32 | window.setTimeout(function(){ |
|---|
| | 33 | run++; |
|---|
| | 34 | |
|---|
| | 35 | switch(run) { |
|---|
| | 36 | case 1: |
|---|
| | 37 | wmsLayer.events.register("loadend", this, vectorTestNew); |
|---|
| | 38 | console.log("First run - feature bboxes will be cached"); |
|---|
| | 39 | map.setCenter(new OpenLayers.LonLat(-22.5, -22.5), 3); |
|---|
| | 40 | break; |
|---|
| | 41 | case 2: |
|---|
| | 42 | console.log("Test with all features inside extent"); |
|---|
| | 43 | map.layers[0].redraw(true); |
|---|
| | 44 | break; |
|---|
| | 45 | case 3: |
|---|
| | 46 | vectorTestOld(); |
|---|
| | 47 | break; |
|---|
| | 48 | case 4: |
|---|
| | 49 | console.log("Test with some features outside extent"); |
|---|
| | 50 | map.setCenter(new OpenLayers.LonLat(-22.5, -22.5), 5); |
|---|
| | 51 | break; |
|---|
| | 52 | case 5: |
|---|
| | 53 | wmsLayer.events.unregister("loadend", this, vectorTestNew); |
|---|
| | 54 | vectorTestOld(); |
|---|
| | 55 | break; |
|---|
| | 56 | } |
|---|
| | 57 | }, 1000); |
|---|
| | 58 | } |
|---|
| | 59 | |
|---|
| | 60 | function vectorTestOld(){ |
|---|
| | 61 | vectorLayer.renderer.drawFeature = function(feature, style) { |
|---|
| | 62 | if(style == null) { |
|---|
| | 63 | style = feature.style; |
|---|
| | 64 | } |
|---|
| | 65 | if (feature.geometry) { |
|---|
| | 66 | this.drawGeometry(feature.geometry, style, feature.id); |
|---|
| | 67 | } |
|---|
| | 68 | }; |
|---|
| | 69 | |
|---|
| | 70 | console.time("addFeaturesOld"); |
|---|
| | 71 | vectorLayer.addFeatures(features); |
|---|
| | 72 | console.timeEnd("addFeaturesOld"); |
|---|
| | 73 | } |
|---|
| | 74 | |
|---|
| | 75 | function vectorTestNew() { |
|---|
| | 76 | vectorLayer.renderer.drawFeature = drawFeature; |
|---|
| | 77 | |
|---|
| | 78 | console.time("addFeatures"); |
|---|
| | 79 | vectorLayer.addFeatures(features); |
|---|
| | 80 | console.timeEnd("addFeatures"); |
|---|
| | 81 | } |
|---|
| | 82 | |
|---|
| | 83 | function init(){ |
|---|
| | 84 | map = new OpenLayers.Map('map'); |
|---|
| | 85 | wmsLayer = new OpenLayers.Layer.WMS("OpenLayers WMS", "http://labs.metacarta.com/wms/vmap0", { |
|---|
| | 86 | layers: 'basic' |
|---|
| | 87 | }); |
|---|
| | 88 | |
|---|
| | 89 | vectorLayer = new OpenLayers.Layer.Vector("Vector Layer"); |
|---|
| | 90 | drawFeature = vectorLayer.renderer.drawFeature; |
|---|
| | 91 | |
|---|
| | 92 | map.addLayers([wmsLayer, vectorLayer]); |
|---|
| | 93 | map.addControl(new OpenLayers.Control.MousePosition()); |
|---|
| | 94 | map.setCenter(new OpenLayers.LonLat(-22.5, -22.5), 3); |
|---|
| | 95 | |
|---|
| | 96 | vectorLayer.events.register("featuresadded", this, nextRun); |
|---|
| | 97 | |
|---|
| | 98 | features = new Array(100); |
|---|
| | 99 | var x, y |
|---|
| | 100 | for (var i = 0; i < 100; i++) { |
|---|
| | 101 | x = -Math.random()*45; |
|---|
| | 102 | y = -Math.random()*45; |
|---|
| | 103 | features[i] = new OpenLayers.Feature.Vector( |
|---|
| | 104 | new OpenLayers.Geometry.LinearRing([ |
|---|
| | 105 | new OpenLayers.Geometry.Point( |
|---|
| | 106 | -Math.random()*5+x, -Math.random()*5+y), |
|---|
| | 107 | new OpenLayers.Geometry.Point( |
|---|
| | 108 | -Math.random()*5+x, -Math.random()*5+y), |
|---|
| | 109 | new OpenLayers.Geometry.Point( |
|---|
| | 110 | -Math.random()*5+x, -Math.random()*5+y), |
|---|
| | 111 | new OpenLayers.Geometry.Point( |
|---|
| | 112 | -Math.random()*5+x, -Math.random()*5+y), |
|---|
| | 113 | new OpenLayers.Geometry.Point( |
|---|
| | 114 | -Math.random()*5+x, -Math.random()*5+y) |
|---|
| | 115 | ])); |
|---|
| | 116 | |
|---|
| | 117 | } |
|---|
| | 118 | |
|---|
| | 119 | nextRun(); |
|---|
| | 120 | } |
|---|
| | 121 | </script> |
|---|
| | 122 | </head> |
|---|
| | 123 | <body onload="init()"> |
|---|
| | 124 | <h1 id="title">Vector Features Performance Test</h1> |
|---|
| | 125 | <div id="map"></div> |
|---|
| | 126 | <p> |
|---|
| | 127 | |
|---|
| | 128 | This test examines if checking for a feature being inside the visible |
|---|
| | 129 | extent before rendering it has an impact on performance. Make sure that |
|---|
| | 130 | the Firebug console is visible when running this test to see the results. |
|---|
| | 131 | |
|---|
| | 132 | </p> |
|---|
| | 133 | </body> |
|---|
| | 134 | </html> |