# gen.py
import sys
import pandas as pd
import numpy as np
import random, string
n = 2 ** 5
m = 18
df = pd.DataFrame(np.random.rand(n, m))
df.iloc[:, 0] = [
"".join(random.sample(string.ascii_lowercase, 6)) for _ in range(n)
]
df.to_markdown(sys.argv[1])
Findings
Table size
Delay until sorted
2^10 x 2
instant
2^10 x 5
~ 250ms
2^10 x 9
~ 500ms
2^12 x 2
~ 1s
2^12 x 5
~ 2s
2^12 x 9
~ 2.5s
2^14 x 2
~ 8.5s
2^14 x 5
~ 13s
2^14 x 9
~ 18s
16 x 2^14
~ 6s
Memory usage increases a few MB (< 20 for large tables), but it's quickly released when sorting is done.
16k rows should be a decent upper bound.
For large tables, Obsidian also struggles with rendering and becomes sluggish (with Sortable disabled).
For tables with less than 1k rows, the sorting feels instant enough -- there's no disruption.
Conclusions
Going forward, it may be a good idea to pop-up a notification saying Sortable is working..." to let the user know it did not freeze -- when sorting takes > threshold seconds.
For "daily usage" tables, Sortable is fast enough.
Findings
2^10 x 2
2^10 x 5
2^10 x 9
2^12 x 2
2^12 x 5
2^12 x 9
2^14 x 2
2^14 x 5
2^14 x 9
16 x 2^14
Sortable
disabled).Conclusions
Sortable
is working..." to let the user know it did not freeze -- when sorting takes >threshold
seconds.Sortable
is fast enough.