Loading video...

Video Failed to Load

Go Home

today's experiment: silky smooth fixed-height virtual table, rendered with canvas tested with 10^50+ rows of dynamic data

93,573 views • 1 year ago •via X (Twitter)

50 Comments

f1shy-dev's profile picture
f1shy-dev1 year ago

try it → this was inspired by @Antfroze's sql studio (beautiful), @itseieio's everyuuid (fun!), and ideas from @4rcherhume! the bit i like the most is that the scrollbars are real DOM scrollbars, not fake ones :d

Cheikh Fiteni's profile picture
Cheikh Fiteni1 year ago

very cool. if you mapped each uuid to a oklch and then did a gradual gradient with looping for set (perception is like ~10^6 even ignoring screen gamuts) I think the effect feels even more insane also would your virtualization break if we toggle scroll speed with hotkeys. hmm

f1shy-dev's profile picture
f1shy-dev1 year ago

> would your virtualization break i don't think so, that's a good idea let me try this oklch idea

Cheikh Fiteni's profile picture
Cheikh Fiteni1 year ago

Yeah if you don’t get it done by tomorrow would be down to PR this weekend just busy tn

zeno's profile picture
zeno1 year ago

made something with virtual tables too - infinitely scrollable bar chart

f1shy-dev's profile picture
f1shy-dev1 year ago

very nice! bonus brownie points for oppenheimer soundtrack

Archer's profile picture
Archer1 year ago

when resizable columns though 👀

Maze's profile picture
Maze1 year ago

this is honestly amazing, better than v0 could've ever done

rank's profile picture
rank1 year ago

table rendering with canvas ?

f1shy-dev's profile picture
f1shy-dev1 year ago

yes

rank's profile picture
rank1 year ago

interested in implementation, cool

Stephen Haney's profile picture
Stephen Haney1 year ago

aww yeah

Alexis Paques's profile picture
Alexis Paques1 year ago

So JS libraries are so bloated nowadays we are now going back to just drawing our interfaces in a canvas. Amazing demo!

Rahul Narsingipyta's profile picture
Rahul Narsingipyta1 year ago

well, I found a beautiful csv reader

Rajat Kulkarni's profile picture
Rajat Kulkarni1 year ago

Maybe I'm dumb, but why does a single scroll tick make it go to some random number that is 100s of millions rows ahead? Or is it not supposed to show me 40-70 on scroll?

jian's profile picture
jian1 year ago

been there, done that

f1shy-dev's profile picture
f1shy-dev1 year ago

damn

jian's profile picture
jian1 year ago

hahaha did not mean anything else! seriously every front end engineers could build this as a test of skills

f1shy-dev's profile picture
f1shy-dev1 year ago

new interview question just dropped...

Iza's profile picture
Iza1 year ago

give it to me

Iza's profile picture
Iza1 year ago

i want dah saource kode

f1shy-dev's profile picture
f1shy-dev1 year ago

github button at the bottom right

Iza's profile picture
Iza1 year ago

ur so mean to me

f1shy-dev's profile picture
f1shy-dev1 year ago

i’m sorry🙁

Iza's profile picture
Iza1 year ago

i dont want it anymore </3

Sam Texas's profile picture
Sam Texas1 year ago

very cool. kudos! how does this work for accessibility? Or do screen-readers just default back to OCR?

f1shy-dev's profile picture
f1shy-dev1 year ago

yeah hm right now there isn't much consideration for accessibility if one were to make it like a proper spreadsheet (e.g editing rows), you might have to put a dom element of some sort behind every visible cell in the virtualisation frame, at which point you could have the text for screenreaders copied into the dom in parallel, maybe throttled updates etc to avoid slowing the scroll/jumping down

scoliosis queen's profile picture
scoliosis queen1 year ago

now go down row by row

Maga - turbotable.ai ▴'s profile picture
Maga - turbotable.ai ▴1 year ago

Cool! I have heard that canvas rendered tables are really performant. But the features you need to implement to be useful for real-world scenarios are enormous. I have tried to optimize @tan_stack Table with complex cells using memo tricks and @tan_stack Virtual. It was nice.

Lexis N's profile picture
Lexis N1 year ago

The next thing everyone wants is for it to be interactive

Alex's profile picture
Alex1 year ago

Ohhh you tried Jupiter notebooks way of rendering

Zibx's profile picture
Zibx1 year ago

Next step would be rows with dynamic height. Solved similar task in 2012 with pure dom. It also supported filter, sorting, and grouping. I could write some details related to implementation of any of that features. But it was not canvas and we tested it on 500k rows in ie6

Chau Giang's profile picture
Chau Giang1 year ago

Amazing! Just curious, do other spreadsheet apps like Google Sheets or Microsoft Excel use something like this?

Himanshu Kumar's profile picture
Himanshu Kumar1 year ago

Impressive scale. I wonder about the practical limits of canvas rendering for such large datasets though. Performance must be a challenge.

Noah's profile picture
Noah1 year ago

Dayum

Hackerdude's profile picture
Hackerdude1 year ago

I was wondering when someone would make a smooth version, this is sick

ian.tsx's profile picture
ian.tsx1 year ago

Check out @glideapps's grid!

Matthew Ary 🇺🇦's profile picture
Matthew Ary 🇺🇦1 year ago

It gets very intense when you don't get fixed width.

Alex's profile picture
Alex1 year ago

We use Glide Data Grid for this it’s great

Saïd Aitmbarek's profile picture
Saïd Aitmbarek1 year ago

based performance mate

Alex's profile picture
Alex1 year ago

You need to stop Sir! if everything renders in Canvas,my ancient html skills will become absolete😢

Pao Ramen's profile picture
Pao Ramen1 year ago

is this open source?

f1shy-dev's profile picture
f1shy-dev1 year ago

of course! →

softyoda's profile picture
softyoda1 year ago

Wow, what O(1) lookup in 1 yottabyte feels like.

Shafil Alam's profile picture
Shafil Alam1 year ago

can we replace the whole ui with a canvas render

Jason Kwok's profile picture
Jason Kwok1 year ago

is variable height solved? been trying to find a good library but i've always ended up just needing to implement it myself

Péter Szarvas's profile picture
Péter Szarvas1 year ago

bro dont leak my uuid

f1shy-dev's profile picture
f1shy-dev1 year ago

it’s our uuid now.

giovanni's profile picture
giovanni1 year ago

cool

NiceDay's profile picture
NiceDay1 year ago

variable row height?

Related Videos