Comments (4)
Seems like there was an issue with the flatten library that addChildNodes
is using. It was fixed in version 0.11.1
but infinite-tree is still using the previous version. I was having this issue and updating the dependency increased the performance noticeably. Updated in a PR @cheton
from infinite-tree.
The "flatten" and "rowRenderer" functions, especially the "rowRenderer", would use the most CPU time while trying to load a large tree:
https://github.com/cheton/infinite-tree/blob/master/src/infinite-tree.js#L686
https://github.com/cheton/infinite-tree/blob/master/src/infinite-tree.js#L712
// Flatten nodes
this.nodes = flatten(data, { openAllNodes: this.options.autoOpen });
// Update rows
this.rows = this.nodes.map(node => this.options.rowRenderer(node, this.options));
One solution is to render only visible rows, it should be able to significantly reduce the rendering time from 10s to <0.1s.
Another workaround is to use lazy loading, you can load first batch of top-level nodes (e.g. 1000 top-level nodes in one batch) at the first time, when you scroll to the bottom, then call tree.addChildNodes(nodes)
to load another batch of top-level nodes.
from infinite-tree.
I guess if already flattened list is provided to loadData()
then it would solve problem for 1st line.
from infinite-tree.
I guess if already flattened list is provided to
loadData()
then it would solve problem for 1st line.
+1 We are working a similar idea. At the moment we are adding InfiniteTree
to a Vue component. We had a component implemented with recursion, and some Vue components that would create their children components on the fly. Which would cause style reflows, event bubbling, and be hard to render when you had ~thousands of nodes.
With the InfiniteTree
, the performance is already better. But our GraphQL data is flatten already. We thought we would be able to use it, but in the end had to keep the hierarchical data, and pass if to the new component.
We now want to investigate if it would be possible to skip the step where the flatten data is created. I already know it is possible to create an empty InfiniteTree
by not giving it any data in the constructor. If there is a nice way to tell it to load the flatten data, I think this issue will be solved, and the component will be even faster.
from infinite-tree.
Related Issues (20)
- After opening many hierarchy of tree closing of tree is taking time
- Open or close alls Nodes HOT 3
- Any possibility to sort Nodes HOT 1
- Loading/opening node with around 60k children HOT 1
- drag & drop doesn't work on internet explorer
- Splice.Apply causes “Maximum call stack size exceeded” when there is 170k+ nodes under one node
- Lazy loading query
- Flickering when scrolling down HOT 5
- tree.openNode function is not working for a node while updating tree data via tree.loadData function HOT 1
- On click of node, how can I dynamically add children in existing node.
- 使用问题
- Semi selective state problem
- Drag and drop data onto nodes from outside the browser
- example code not working HOT 1
- 把节点拖动到树区域以外
- Feature request: Hide root node and start at children
- How do you write a row renderer? Example one in docs doesn't work.
- Feature request: openAll() and closeAll()
- How do you set the height of the tree?
- Computing row height using offsetHeight causes rounding errors HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from infinite-tree.