Large performance regression when moving from Dash v38 to Dash v39


I’m experiencing a significant performance regression (more than 2x slower) when moving from v38 of Dash to the recently released v39. I have a fairly large dashboard (that’s admittedly grown a bit out of control, as it makes ~350 HTTP requests to fully load), that’s currently deployed using Python v3.7.2, Gunicorn v19.9.0 (with 8 workers), Flask v1.0.2, Nginx (using HTTP v2) for basic auth and TLS termination, and the following Dash dependencies:

dash                     0.38.0
dash-core-components     0.43.1
dash-html-components     0.13.5
dash-renderer            0.19.0
dash-table               3.5.0    

And the page reliably takes about 27 seconds to load in full, as measured using Chrome v72.0.3626.121.

When doing nothing other than move to the following Dash dependencies:

dash                     0.39.0
dash-core-components     0.44.0
dash-html-components     0.14.0
dash-renderer            0.20.0
dash-table               3.6.0

The page repeatably takes about 66 seconds to load in full, which is nearly 2.5x times worse.

Admittedly, I can refactor the application significantly to make use of the new multiple outputs feature in Dash v39, which will significantly reduce the number of requests the dashboard makes when loading, but I haven’t explored how this affects performance yet. Is anyone else seeing this kind of performance degradation?


Have you checked that the number of requests is constant across both versions? In case something is making more callbacks fire than before.

Perhaps could be worth looking closely at the network tab in the browser developer tools to see if there’s any obvious points of increase.

Same number of http requests, and same total volume of data transferred between the two setups.

Regarding what’s going on in the network tab, a (very) preliminary analysis show no obvious single request or set of requests that are the culprit. I need to spend some more time digging into it before I can say more than that.