Hi guys,
We've been struggling with some performance problems for some of our users for a few months now. And, I'm finally making some headway into understanding the problem. I'm hoping you can provide some guidance. This is somewhat urgent because we've developed some frustrated users.
Here is the deal. These users have a list grid with the following
1. User defined hilites
2. About 10 user formulas...several formulas referring to other formulas
3. Grouping that typically results in 10-15 different groups
4. Grid summaries showing 3 summary rows and Group summaries also showing 3 summary rows for each group.
After debugging today, I realize the combination of all this functionality is the root of the problem. It seems when summary rows are recalculated, each unique summary row is causing the groupTreeChanged event to fire on the grid as a whole. And, each time the groupTreeChanged event fires, applylHilites is called every time. When applyHilites is called, every formula is recalculated. So, this appears to be a cascading chain of events that is causing significant slowness.
If we remove the grid and group summaries, the app speeds up significantly. If we reduce the number of summary rows on the grid and the group from 3 rows to 1, it also speeds up significantly. If we remove grouping, again it speeds up. If we change grouping so that it is only 1 or 2 groups instead of 10, again improvement. If we remove hilites, big improvement. But, the requirement for our users is to be able to combine all of these features into their grids.
So, it seems like the root of the problem is that the groupTreeChanged event is firing every time a summary row is updated. But, there may be other ways to improve this such as not re-calculating formulas every time we applyHilites if possible. I can send you a google chrome cpu profile showing what it looks like when CPU on a client machine has been pegged as a result of this problem if that is helpful.
Please let me know what you think. Hopefully that gives you enough detail to understand the issue. I started to try re-producing the setup above with one of your examples like this one: http://www.smartclient.com/#summaryGridFS but wasn't sure how to use that example to demonstrate the firing of groupTreeChanged over and over again.
We've been struggling with some performance problems for some of our users for a few months now. And, I'm finally making some headway into understanding the problem. I'm hoping you can provide some guidance. This is somewhat urgent because we've developed some frustrated users.
Here is the deal. These users have a list grid with the following
1. User defined hilites
2. About 10 user formulas...several formulas referring to other formulas
3. Grouping that typically results in 10-15 different groups
4. Grid summaries showing 3 summary rows and Group summaries also showing 3 summary rows for each group.
After debugging today, I realize the combination of all this functionality is the root of the problem. It seems when summary rows are recalculated, each unique summary row is causing the groupTreeChanged event to fire on the grid as a whole. And, each time the groupTreeChanged event fires, applylHilites is called every time. When applyHilites is called, every formula is recalculated. So, this appears to be a cascading chain of events that is causing significant slowness.
If we remove the grid and group summaries, the app speeds up significantly. If we reduce the number of summary rows on the grid and the group from 3 rows to 1, it also speeds up significantly. If we remove grouping, again it speeds up. If we change grouping so that it is only 1 or 2 groups instead of 10, again improvement. If we remove hilites, big improvement. But, the requirement for our users is to be able to combine all of these features into their grids.
So, it seems like the root of the problem is that the groupTreeChanged event is firing every time a summary row is updated. But, there may be other ways to improve this such as not re-calculating formulas every time we applyHilites if possible. I can send you a google chrome cpu profile showing what it looks like when CPU on a client machine has been pegged as a result of this problem if that is helpful.
Please let me know what you think. Hopefully that gives you enough detail to understand the issue. I started to try re-producing the setup above with one of your examples like this one: http://www.smartclient.com/#summaryGridFS but wasn't sure how to use that example to demonstrate the firing of groupTreeChanged over and over again.
Comment