I haven't tried any of those example libraries you mentioned, but perhaps I could explain why fin-hypergrid
stands out the most. My opinion is primarily based on my JavaScript knowledge and how this kind of stuff works in the back.
I should probably start with react-virtualized
and ag-grid
:
- Both use the way of populating the DOM and only displaying a portion of data to the view, dynamically removing things from the DOM that aren't visible anymore and adding the upcoming things in advance. Now the problem here lies in adding and removing things in the DOM since this tends to be executed really fast / multiple times a second. Because of this we experience some lag or jitter. You can actually check Web Console > Profiles > Record JavaScript CPU Profiles and see that this method takes time to complete. So the only thing that differs from
react-virtualized
and ag-grid
are their algorithms of applying these changes in the smoothest possible manner.
ag-grid
, from what I can see, is the one that suffers the most from this issue as you could actually see some elements that haven't finished rendering yet and experience severe lag when you scroll too fast.
react-virtualized
on the other hand does a splendid job implementing its algorithm in the smoothest possible manner. This might be the best library available in the DOM manipulation category though it still suffers from the problem of manipulating the DOM too fast which creates lag, though this is only seen when large chunks of data are involved.
Here are the reasons why fin-hypergrid
excels:
- The best asset of
fin-hypergrid
is it doesn't perform DOM manipulation at all so you are already saved from the problem caused by adding and removing things too fast since it uses <canvas>
fin-hypergrid
also displays only data that the user sees and dynamically removes things that aren't visible. It also adds in advance to achieve a smooth scroll feeling, so no still-rendering items are shown.
fin-hypergrid
also does a really great job on their scrolling algorithm to attain the smoothest possible manner, so there is no jitter or lag.
Now that doesn't mean that hypergrid
is all good, it has some disadvantages too:
- Since
fin-hypergrid
is made with HTML5 Canvas, styling it will become a real pain as it doesn't accept CSS. You would need to style it manually.
- A few things to keep in mind are form controls such as
<select>
, radio buttons, checkboxes, etc. would be a real pain to implement. If you are trying to implement something like this then proceed with caution.
- It's primarily used for displaying data with simple column edits, not involving anything other than a textbox, and achieving the most smooth scroll feeling.
Now in conclusion, I would probably suggest using react-virtualized
instead since it offers the smoothest scroll, above fin-hypergrid
. If you are willing to disregard the downsides of fin-hypergrid
, then fin-hypergrid
is the best option.
UPDATED:
Since we discussed JS / CSS, canvas implementations of these tables. I should have mentioned the last possible contender though this one is not primarily a js table library but a framework in which Google Sheets
might have been used it is called d3.js.
d3.js
has the speed and power of canvas and at the same time retains HTML structure, this means that it is possible to style it with CSS!
- It maximizes the usage of HTML 5 SVG
- I can't say anything more better in
d3.js
The only downsides of d3.js
in this discussion is that:
- There is no available good table libraries out there that uses
d3.js
. Google Sheets
that is. But they do not share code.
d3.js
is just very hard to learn, though there are lots of stuff out there that helps us learn this faster but not that fast.
If you wanted speed of Canvas with CSS styling capabalities then d3.js
is the key the problem is learning it.