saifelse
Joined 14 years ago
Joined 14 years ago
#content-inner { width: 80%; }
#content-inner #alpha { width: 70%; }I'm quite happy that this is being utilized by so many people :-)
I wonder if this simplifies tooling around analytics, since now their logged-out domain matches their logged-in domain.
There are open-source projects worth looking at like Ritzy[1] which is quite fast and written in React from what I've read.
As per your specific issue, I've found that using PureRenderMixin with each line of text represented as a component works for hundreds of lines, but this still ends up with performance issues as you scale to thousands of lines. Using a list of one-character components will run into performance issues much sooner as there is per-component overhead.
[0] https://github.com/atom/atom/pull/5624 [1] http://ritzyed.github.io/ritzy/
But I agree, it's still not perfect. You avoid doing the more expensive virtual DOM comparison, but you still have to iterate over all the items to do the PureRenderMixin checks. And it is still O(n) time, just with a smaller constant.
Another solution is to not actually render all the children, just the ones that are visible on the screen, i.e. using some React implementation of infinite lists (see: https://facebook.github.io/fixed-data-table/ )
Another idea that I've been thinking about is to arbitrarily fragment your list into lists (possibly of fixed size, or a fixed number of fragments). Each fragment gets its own subcomponent, so we can avoid rendering fragments that haven't changed. For example, instead of a list of 100 items, we treat it as 10 lists of 10 items. If we change one item, we end up instantiating 10 components, and then recursing into the single fragment that has changed, instead of over all 100 items.
To re-iterate the possible solutions I've considered:
- Don't pass in a bound method; give the component the unbound method and its index and the child component can call it with the index passed in itself. - Generalize this to a re-usable intermediary component that does for you (it does feel a bit dirty) - Write your own bind function that annotates the bound function with original function + params allowing you to do a "deep" equality check, and then use a variant of PureRenderMixin that does this "deep" equality check.
Honestly, all of the solutions feel a bit hacky, but I've gravitated towards the first and second options.
Our front-end stack was primarily just webpack (no JSX because CoffeeScript's terseness sufficed). We recently started the migration to using Babel with ES6 and JSX because of the linting / tooling / community behind them.
I will be sharing a more in-depth look at my debugging workflow in the next post, so be on the lookout :-)
> Also any recommendations for performant charting/graphing library that plays well with React?
I haven't used many charting / graphing libraries, sorry!
> What do you use for state management?
We were fairly early adopters to React and Flux, so we have our own internal implementation of Flux. I haven't worked too much with the other state management solutions, but many of them seem like good, opinionated architectures.
> Thank you for sharing your experience and tips regarding developing React apps!
No problem :-)
if(userHasUpdatedPw) { checkPw(hash(pw)) }
else{ checkPw(hash(assertDoubledAndTakeHalf(pw)))}