ClickerMonkey / dayspan-vuetify

A collection of components that visualizes DaySpan Calendars and Schedules using Vuetify
MIT License
1.16k stars 254 forks source link

Performance hit due to (excessive) message and click events #124

Open mblackritter opened 5 years ago

mblackritter commented 5 years ago

While testing various VUE based calendars, I found Dayspan to be the most complete and flexible so far, but noticed that it suffers heavy performance hits on view rendering. While profiling the execution, I found ~300 message and click events called on daily views and ~3000 message and click events called on monthly views, which cause the performance hits and would seem to be unnecessary, especially the click events.

This also seems to be related to #75 (Significant delay when dragging), where the impact also grows with the displayed range.

The question is of course, why do these get triggered? Maybe someone with deeper insights to VUE, Vuetify and Dayspan can make more sense out of this. Might be a solution would be as simple as disabling events until the view is rendered, but I'm not familiar with VUE internals so far.

Daily View

image

Weekly View

image

Monthly View

image

ClickerMonkey commented 5 years ago

When you say you're having performance problems during rendering - do you mean the initial calendar render? Or are you talking about whenever something changes and it has to re-render?

I did some measuring during event dragging and a few other things and the majority of the time is spent in Vue's reactivity code and updating the DOM.

mblackritter commented 5 years ago

@ClickerMonkey, yes, these profilings are from initial renders.

Beside Safari (which shows the number of samples it was able to catch for each event), I also tested with Firefox and Chrome, and the time it takes to render the views (You can just "feel" it most notably for "Year") are within the same span.

I just mentioned #75, because I assume it's also affected by the sheer amount of event calls.

bobbarnard0205 commented 5 years ago

Came across this thread as I just implemented this calendar and finally loaded a modest 200 calendar events and the time to render month to month is 6-7 seconds on my extremely fast MacBook Pro. Upping that to 400 causes a 11-12 second delay in the Month view. If I go to 4 day view, then it is pretty fast with on 20-30 events needing to render. So there is a direct correlation between events to be displayed and time to render. Other thing I notices was all the popovers are placed in the DOM and hidden. Could this be causing performance issues?

ClickerMonkey commented 5 years ago

Yes - that could be a problem - a few other things could contribute to that as well.

Vuetify 1.5.0 has a v-calendar component that I will be migrating this library to use - and some performance issues will be improved.

ClickerMonkey commented 5 years ago

Vuetify 2.0.0 will have the event support