GriddleGriddle / Griddle

Simple Grid Component written in React
http://griddlegriddle.github.io/Griddle/
MIT License
2.5k stars 378 forks source link

Undocumented performance advantages of rowMetadata.key #321

Open gbeaty opened 8 years ago

gbeaty commented 8 years ago

My app frequently updates its tables, so performance has been a real issue, especially on mobile. I created some crude benchmarks to evaluate the viability of grid systems:

https://github.com/gbeaty/gridbench.js

I noticed griddle kept updating data-reactid on every row every time setProps was called, and reasoned this might be slowing things down. I then found the rowMetadata.key setting, and starting using that. The result was that calls to setProps with only a few changed rows executed in about half the time that they used to.

As far as I can tell, rowMetadata.key is absent from the documentation. In my opinion it should be present, with a note on its performance advantages. Or perhaps there is a way to change data-reactid only on changed rows when rowMetadata.key is absent?

By the way, griddle is the second-fastest grid I've tested with a 2-row sorted update time of about 6.5 ms on a 9x100 grid running on my i7. Without rowMetadata.key, times were about 15.5 ms. Slickgrid is far and away the fastest at about 1 ms.

blkmutt commented 8 years ago

Just saying thanks -- we'll leave the issue open if anyone wants to take a stab at it before we get to it.

Also 1.0 is coming -- sounds awesome that you have these benchmarks. We'd love to get some metrics on the 1.0 stuff once we get some more of the performance stuff tuned.

ryanlanciaux commented 7 years ago

I wanted to follow-up -- thank you for adding these benchmarks. We recently released Griddle 1.0 and really need to do more benchmarking on performance as that's going to be a much bigger focus now that the API is more along the lines of what we'd like it to be. We generally take the approach of make it work with the "right" API and then tune the underlying code to get to the desired performance.

I realize this is from quite some time ago but we will take a look at your repo for performing this benchmarking. Thanks :+1: