Is there a way to improve the performance of keplergl by deactivate some features not required in the use-case?
Ideas:
Remove the side bar (not just hiding but that it's not loaded at all)
Disable object interactivity (hover/click effects) on high zoom levels
Only load objects in the current viewport (+ some space around it)
One simple solution:
use the Grid-based aggregation for higher zoom levels
This improved the performance when displaying the data set linked in the question from "almost frozen" on the highest zoom level to "slightly laggy".
I'm not sure, however, how to subscribe to the view port zoom level changes.
Related
What are some scenarios where we have to decide whether to go with horizontal or vertical scaling? Also, is there any other alternative of scaling?
When you’re choosing between horizontal scaling and vertical scaling, you also have to consider what’s at stake when you scale up versus scale out. Horizontal scaling is almost always more desirable than vertical scaling because you don’t get caught in a resource deficit.
Choosing between vertical vs horizontal scaling depends on the application architecture. For instance, applications built using serverless architecture rightly suit horizontal scaling.
Scaling may apply for various kind of resources at various levels. It could be database, message broker, application runtime, etc., The below mentioned approach is in general acceptable but will vary slightly based on the kind of resource we are talking about.
Basically always choose an environment that supports horizontal scaling. But use vertical scaling for satisfying the need of benchmarked base load or a regular load. For any further varying increase or decrease in the load use horizontal scaling so that you can either increase or decrease the resources according to the need.
We have to work with very large models and we're hoping to use the first person camera to walk through them, and eventually do this in VR. The progressive rendering does wonders for improving perceived responsiveness, but it can be disorienting to have so many items around you disappear as you move.
Is there any way to turn progressive rendering off but only for objects closest to the camera? Maybe a number of objects up to a maximum number, or objects within a radius from the camera. Everything further away can load in later and flicker during motion, but it would be nice to keep the nearby objects rendered, especially structural objects like stairs. I've often walked towards stairs just to have them disappear in front of me, forcing me to fly to a platform with E and Q instead of walking.
So far I've only found a way to toggle progressive rendering for the entire model on or off with viewer.setProgressiveRendering(bool) but I haven't found a way to customize the rendering behavior.
Per our Engineering's recommendation can you try set rendering targets with
viewer.impl.setFPSTargets(1, 5, 15) //min, target, max
In fact we've been having similar reports from other developers requesting similar capability to fine tune rendering with large models so our Engineering is considering their options to extend on existing functions and even build them into extensions.
Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
This question does not appear to be about a specific programming problem, a software algorithm, or software tools primarily used by programmers. If you believe the question would be on-topic on another Stack Exchange site, you can leave a comment to explain where the question may be able to be answered.
Closed 7 years ago.
Improve this question
I've made my first steps in Adobe Illustrator, and I like it very much..
I'm an expert in Photoshop so many things seemed familiar to me.
There's one thing, I haven't been able to find an answer for on the net..
Maybe anybody knows this?
Layers and sublayers appear with a grey background in the layer window.
Groups appear with a white background in the layer window.
But they both seem to have an identical behaviour.
Is there any difference between a 'layer/sublayer' and a 'group'?
Why does Illustrator distinguish them?
I'm using Illustrator CS2.
Thanks for your help!
I really appreciate it.
Greetings
Christopher
Technically, there is very little difference. Internally, in the Illustrator artwork tree, both layers and groups perform the same function - they create a parent object that can contain one or more child objects. The differences lie in how they are used in a practical sense.
Groups are typically used to bundle artwork that you want to stay together when moving or scaling. For example, let's say you draw a door. It might contain inset panels and a door knob. When you want to move it, you can direct select each object or marquee select all the objects before moving, but that is slow and can also pick up additional art objects that may be in the way. Alternatively, if you group the door outline, the inset panels and the door knob, now all you need to do is click once on any of those objects to select the entire door.
Layers are typically used to manage visibility and stacking order. For example, let's say you draw a floor plan for a home. On one layer you might draw the walls. Then, on other layers you might draw electrical plans, furniture layouts, and plumbing plans. When you contract with an electrician, he may not need to see the furniture layout, so you would set the visibility of the furniture layer to false so that the printout would not contain any furniture. Also, you need to ensure that furniture is always drawn over walls, so you would use the layer panel to move all furniture at once above the walls layer.
Incidentally, an easy way to select everything in a layer (and thus make them act even more like a group and muddy the waters of how these two things differ even more!) is to click on the small circle icon on the right of the layers panel. This selects everything, including groups, within that layer. Additionally, holding down alt and then clicking selects everything in all the layers.
A highly useful aspect of using layers is the ability to lock and hide elements while you're working. These are found on the left hand side of the layers panel. It should be clarified that you need to keep your drawing in good order as you go along to maximise the usefulness of this feature.
It is also worth mentioning that groups cannot be made up of elements from different layers. Attempting to do so will move everything to the currently selected layer and grouping it there.
The main use for groups I have found is for ease of selection if I have certain elements within a layer that will use the same appearance settings as each other, but that are different to the rest of the layer. Doing so allows me to simply click once to select the whole group and then apply the desired appearance settings.
Ultimately, how you use layers and groups is entirely a case of personal preference and what makes sense to you as to how to use the strengths of each e.g. as mentioned in the previous answer, grouping allows the same scale factor be applied to each element within, and also prevents them from losing their positions relative to each other if you use the arrange / align buttons on the top menu bar. Personally, I tend to use layers to break down what each type of element is representing; for instance I had to make a fair few maps studying architecture, so I would have a layer named contours, buildings etc. which would broadly use the same appearance so I could alter these quickly if I needed to by using the select method I mentioned above. Occasionally there would be groups within these layers, which admittedly I could have placed in additional layers instead.
Really, if it makes sense to you then run with it.
I am writing an application that can potentially have hundreds of custom user controls on a canvas. All of them can be dragged around the screen, and there are lines connecting all of then to at least one other user control. Once you reach 250 custom user controls or so performance starts to markedly decline, with frame rates going to 10 or below.
Are there any best practices or ideas on how to optimize performance in this sort of situation? The problem seems to be in the sheer number of controls on the canvas at any one time.
Thanks!
~Steve
Unfortunately no...it becomes a system resourcing issue.
One way to alleaviate this issue is using virtualization in some form or another as was done with the VirtualizingStackPanel. This boils down to removing items from the visual tree and holding a reference to the needed item once it needs to become visible. Not forcing the item to render will significantly reduce the needed system resources. If all the items need to be rendered at a given time it becomes a system resourcing issue at that point. Keep the control as small as possible and keep things such as anotmation to a minimum as they are taxing on the system.
Summary
New to iPhone programming, I'm having trouble picking the right optimization strategy to filter a set of view components in a scrollview with huge content. In what area would my app gain the most performance?
Introduction
My current iPad app-in-progress let's users explore fairly large binary tree structures. The trees contain between 30 to 900 nodes, and when drawing inside a scrollview (with limited zoom) it looks like this.
The nodes' contents are stored in a SQLite backed Core Data model. It's a binary tree and if a node has children, there are always exactly two. The x and y positions are part of the model, as are the dimensions of the node connections, shown as dotted lines.
Optimization
Only about 50 nodes fit the screen at any given time. With the largest trees containing up to 900 nodes, it's not possible to put everything in a scrollview controlled and zooming UIView, that's a recipe for crashes. So I have to do per frame filtering of the nodes.
And that's where my troubles start. I don't have the experience to make a well founded decision between the possible filtering options, and in addition I probably don't know about that really fast special magic buried deep in Objective-C or Cocoa Touch. Because the backing store is close to 200 MB in size (some 90.000 nodes in hundreds of trees), it's very time consuming to test every single tree on the iPad device. Which is why I'd like to ask you guys for advice.
For all my attempts I'm putting a filter method in the scrollViewDidScroll: and scrollViewDidZoom:. I'm also blocking the main thread with the filter, because I can't show the content without the nodes anyway. But maybe someone has an idea in that area?
Because all the positioning is present in the Core Data model, I might use NSFetchRequest to do the filtering. Is that really fast though? I have the idea it's not a very optimized method.
From what I've tried, the faulted managed objects seem to fit in memory at once, but it might be tricky for the larger trees once their contents start firing faults. Is it a good idea to loop over the NSSet of nodes and see what items should be on screen?
Are there other tricks to gain performance? Would you see ways where I could use multi threading to get the display set faster, even though the model's context was created on the main thread?
Thanks for your advice,
EP.
Ironically your binary tree could be divided using Binary Space Partitioning done in 2D so rendering will be very fast performant and a number of check close to minimum necessary.