I’m curious what methods there are to speed up the rendering of many plots using Bokeh server, e.g. 30+ plots
I’m working with the pivot tool I contributed, bokeh/examples/app/pivot, and have noticed that many plots takes a while to render. If you’d like to reproduce the specific performance issues I’m talking about, follow these steps:
Launch “pivot” example app, e.g: bokeh serve --show bokeh/examples/app/pivot
Configure widgets as shown in attached screenshot and listed here:
X-Axis: Region
Y-Axis: Electricity Generation
Separate Series by: Case
Explode By: Year
Group Exploded Charts By: Technology
Chart Type: Dot
This configuration produces 30 plots, and for me it takes around 30 seconds to render the plots.
However, I noticed that it takes only 8 seconds to render the same data in this configuration (which produces only 6 plots):
X-Axis: Year
Y-Axis: Electricity Generation
Separate Series by: Technology
Explode By: Case
Group Exploded Charts By: Region
Chart Type: Dot
I’m planning to profile the code to find where the bottlenecks are, but up front I’m curious if there are general performance suggestions/resources you may have for this type of application.
Updating to the latest bokeh 0.12.5, it looks like the update time has improved from ~30 seconds to ~15 seconds for the first example above that produces 30 plots. But I also added a timer to the pivot app update function update_plots() and noticed that it takes only ~1.4 seconds to run that entire function, which includes the update to children of the plots area (bokeh.layouts.column). So the bulk of the time seems to be spent outside of the pivot app code, rendering the plots. (I’m using Python 2.7, by the way)
Was there some recent change that improved speed of rendering charts? Are there any efforts in the works to increase speed even more? I’d be interested in helping out with this if I can (not sure if I have the time/required knowledge).
Thanks.
···
On Wednesday, May 10, 2017 at 3:30:58 AM UTC-4, Matt Mowers wrote:
Hi,
I’m curious what methods there are to speed up the rendering of many plots using Bokeh server, e.g. 30+ plots
I’m working with the pivot tool I contributed, bokeh/examples/app/pivot, and have noticed that many plots takes a while to render. If you’d like to reproduce the specific performance issues I’m talking about, follow these steps:
Launch “pivot” example app, e.g: bokeh serve --show bokeh/examples/app/pivot
Configure widgets as shown in attached screenshot and listed here:
X-Axis: Region
Y-Axis: Electricity Generation
Separate Series by: Case
Explode By: Year
Group Exploded Charts By: Technology
Chart Type: Dot
This configuration produces 30 plots, and for me it takes around 30 seconds to render the plots.
However, I noticed that it takes only 8 seconds to render the same data in this configuration (which produces only 6 plots):
X-Axis: Year
Y-Axis: Electricity Generation
Separate Series by: Technology
Explode By: Case
Group Exploded Charts By: Region
Chart Type: Dot
I’m planning to profile the code to find where the bottlenecks are, but up front I’m curious if there are general performance suggestions/resources you may have for this type of application.
I'm not sure offhand what might expand the difference. If the data sizes are more medium-ish or larger, the base64 array protocol might explain the difference, if your old version predates that. We are always interested in improving the performance. Right now it's clear that some of our eventing is muddled and some work especially around layout is being needlessly duplicated. One of our devs is working hard to clean up a lot of the very lowest level BokehJS code and he is hopeful that there are still significant improvements to be had (if not in 0.12.6 then in a release soon after). Apart from layout and event work, there is also a plan to move to a full binary array protocol. There is a high level plan for this, and I'd certainly appreciate help with this, however it is still a fairly involved task. But if you are interested in looking at it I am happy to discuss details.
Updating to the latest bokeh 0.12.5, it looks like the update time has improved from ~30 seconds to ~15 seconds for the first example above that produces 30 plots. But I also added a timer to the pivot app update function update_plots() and noticed that it takes only ~1.4 seconds to run that entire function, which includes the update to children of the plots area (bokeh.layouts.column). So the bulk of the time seems to be spent outside of the pivot app code, rendering the plots. (I'm using Python 2.7, by the way)
Was there some recent change that improved speed of rendering charts? Are there any efforts in the works to increase speed even more? I'd be interested in helping out with this if I can (not sure if I have the time/required knowledge).
Thanks.
On Wednesday, May 10, 2017 at 3:30:58 AM UTC-4, Matt Mowers wrote:
Hi,
I'm curious what methods there are to speed up the rendering of many plots using Bokeh server, e.g. 30+ plots
I'm working with the pivot tool I contributed, bokeh/examples/app/pivot, and have noticed that many plots takes a while to render. If you'd like to reproduce the specific performance issues I'm talking about, follow these steps:
• Pull latest Bokeh git repo: https://github.com/bokeh/bokeh
• Launch "pivot" example app, e.g: bokeh serve --show bokeh/examples/app/pivot
• Configure widgets as shown in attached screenshot and listed here:
• X-Axis: Region
• Y-Axis: Electricity Generation
• Separate Series by: Case
• Explode By: Year
• Group Exploded Charts By: Technology
• Chart Type: Dot
This configuration produces 30 plots, and for me it takes around 30 seconds to render the plots.
However, I noticed that it takes only 8 seconds to render the same data in this configuration (which produces only 6 plots):
• X-Axis: Year
• Y-Axis: Electricity Generation
• Separate Series by: Technology
• Explode By: Case
• Group Exploded Charts By: Region
• Chart Type: Dot
I'm planning to profile the code to find where the bottlenecks are, but up front I'm curious if there are general performance suggestions/resources you may have for this type of application.