ThinkGeo.com    |     Documentation    |     Premium Support

Super slow Map client markers performance

Hi, 


We have a map client which incorporate the thinkGeo Web Map Service. Our map client retrieves ~2000 coordinates periodically and add/update them on the map as OpenLayers.Marker(). Currently our customer needs most the markers on display most of the time, but map performance suffers greatly when zooming and panning.


We need to sort out the source of the performance issue soon! Can someone shed some light on this?? Thanks in advance.


 


 


 



I have been looking at many things which might be the cause. Then I came across the different browser renderers: Canvas, VML, SVG. I believe our map client is using IE9, but seems like only the VML renderer can be used. Does any one know how to enable the HTML5 Canvas renderer??


And here are other things which I have experienmented with,


InMemoryFeatureLayer, InMemoryMarkerOverlay, OpenLayers.Vectors(),


 


 


thanks,


Alvin



Hi Alvin,
Maybe there is some confusion here, the Marker is render on client as an element of Dom tree instead of SVG, HTML5 and so on. I think there are 2 improvements here:
1.       Try the ClusterMarkerStyle, which has 2 effects to the performance:
a.       Decrease the number of the marker if you use Distance property as not “0” value
b.      Decrease the size of each marker on client side, even if you make “distance” property as “0”
2.        Render these Markers as a normal FeatureLayer, such as a InMemoryFeatureLayer or ShapeFileFeatureLayer.
Hope it’s helped to you.
 
Thanks,
Johnny

Hi Johnny, 



Thank you so much for your fast reply.  

Please let me explain our map background and what we would like to accomplish. And please bear with me if I'm missing something here as I just started working on the map application recently. 



What we have: 

We have a functional ThinkGeo WMS Server and Client. The server provides the client with the map data. The client displays the map and periodically retrieves coordinate data from a database. The client then display/update these coordinates on the map as OpenLayers.Markers. Each marker has an external graphic, is auto re-sized at each zoom level, has a label, and has a mouse hover popup. There will be multiple clients connected to the server, and each client is able to filter the markers and display a different subset of markers. Everything is working OK with up to a few hundred markers, but one of our customers needs to track ~2000 coordinates and the map performance is very bad with that many markers (5-15 sconds response time in zooming/panning). 



What we want: 

We want better performance. I have modified this example (openlayers.org/dev/examples/strategy-cluster-extended.html) to display 3000 vector points and the performance feels good. With this example in mind, we are considering a vector layers with decreased functionality(each coordinate to be represented by a basic vector shape [a triangle] with an arbitrary rotation and a left mouse click popup). And we are experimenting with this approach, hence my questions about the browser renderer. 



Questions: 

1. I have tested with InMemoryFeatureLayer. My understanding is that this layer resides on the server side. If one client makes changes to the layer, all other clients see the same change. Is this right? We need the clients to view different sets of data. 



2. Do you have any comments on our approach from Markers Layer to Vectors Layer? 





Your help is much appreciated, 

Alvin 



PS: this thread (gis.thinkgeo.com/tabid/143/afv/topic/aff/12/aft/10367/Default.aspx) is an extension of my experiment with vector layers. Can you please merge these 2 threads?



 


Hi alvin,
Thank you very much for the detailed description. i think I agree with you on the way about how to improve the performance of markers if you don’t need a mouse hover popup. It do has a good performance.
BTM, have you tried the ClusterMarkerStyle of MarkerOverlay? I think it maybe fits your requirements.
Regarding the thread about “WMS”, can you try the source code of installation sample “Samples\CSharp Samples\Samples\Overlays\LoadAWmsOverlay.aspx”? I think it contains what we want.
 
Hope your further information.
Best Regards!
Johnny

Thanks for the help johnny. 



I've figured out the renderer problem. I have to add a meta tag to force into IE9 rendering mode
 to take advantage of the IE9 SVG renderer to easily draw the 2000 coordinates.  



However, when the map is rendered in IE9 mode, I observed a weird behavior. The mouse wheel zoom in/out will periodically get disabled. To enable it again, I can do a double right click, which triggers a Map1.ZoomOut().  



Have you seen anything like this? 



Thanks, 

Alvin



Hello alvin, 
  
 I didn’t saw this before, and I tested our websample with IE9, can’t recreate the problem, could you please give me more details how to recreate this? 
  
 Regards, 
  
 Gary

Hi Gary, 
  
 After some more testing, I believe the problem is in the windows control, and here’s why: 
  
 When the map is rendered in IE5 mode in our C# application, the mouse wheel zoom in/out works perfectly fine. However, when the map is rendered in IE9 mode (with this tag – meta http-equiv=“X-UA-Compatible” content=“IE=9” --) in our C# application, the mouse wheel zoom in/out can be unintentionally disabled in the following scenario: 
  
     1. Map finishes loading in the C# application, wheel zoom working 
     2. Open a dialogue window within the application (our application has many dialogue windows, but only some causes this problem) 
     3. Click on the map, wheel zoom NOT working 
     4. Click on the dialogue window 
     5. Click on the map, wheel zoom working again! 
     6. click on the dialogue window 
     7. Click on the map, wheel zoom NOT working 
  
  
  
 PS. When the map (forced to be rendered in IE9 mode) is displayed in a normal web browser, the mouse wheel zoom in/out works OK too. 
  
 Thanks, 
 Alvin

Hello alvin, 
  
 Thanks for your further information, this situation sounds like a little complex, need open dialogues but only some can cause the problem, is that possbile you can provide a self-contained sample to us to recreate this problem? 
  
 Regards, 
  
 Gary