200 rows in Tabulator slows things to a crawl

Hi @Ziink

Try putting your app in a template. It speeds up things

.

import panel as pn

import panel.widgets as pnw

import pandas as pd

import numpy as np

from random import *

pn.config.sizing_mode="stretch_width"

df = pd.DataFrame(np.random.randn(200, 15))

tbl = pn.widgets.Tabulator(df, theme="site")

sym_info1 = pnw.StaticText(value='sometext')

sym_info2 = pnw.StaticText(value='sometext')

sym_info3 = pnw.StaticText(value='sometext')

sym_info4 = pnw.StaticText(value='sometext')

sym_info5 = pnw.StaticText(value='sometext')

def b(e):

    sym_info1.value = sym_info2.value = sym_info3.value = sym_info4.value = sym_info5.value = str(random())

btn = pnw.Button(name="Click me")

btn.on_click(b)

x = pn.Column(sym_info1, sym_info2, sym_info3, sym_info4, sym_info5)
pn.template.FastListTemplate(
    title="Tabulator slows down",
    sidebar = [btn],
    main = [x,tbl],
).servable()

Panel is built on Bokeh. Bokeh uses its own layout engine over the browsers layout engine because 1. Legacy reasons 2. Greater control over plots. But the layout engine can be a performance bottleneck.

If you use a template the bokeh engine can focus on smaller, individual components instead of one big complicated component (the Column here). This will speed up things.

The plan is that Bokeh 3.0 should get rid of the layout engine and just use css. That should solve some performance issues.