React devtool & profiler

redux-form

emotion

react-redux

HTML DOM

redux-form / react-redux / react-router ...etc

Context Provider / Consumer

Almost emotion core

Change props dynamic & real-time update

Check each hooks / nested hooks state

Render tree with HOC

Suspend manually

Inspect in DOM

Log in console

Show source

React Profiler

fiber commits

Hooks issue

fiber is linked list based

Although auto GC implemented by React team...

function MassFrequencyRenderedComponent({
  unexpendedProps,
}) {
  const largeSource = useMemo(() => {
    // map, extend structure....
  }, [unexpendedProps]);

  const summaryData = useMemo(() => {
    // aggregate....
  }, [largeSource]);
  
  return (
    <p>
      {summaryData}
    </p>
  );
}

If your component render in map (multiple instance), and it will be rendered many times, each.

Fiber need to compare memoizedProps and pendingProps many times

But, linked list structure keep reference (memorized) to determine render or not.

So, fiber will release memory after whole array rendered in recent production version. (based on JS GC policy)

Inclusion, DON'T useMemo with large scale structure in memory.

Aggregate data before component array map (reduce the Big O)

one more thing

class _HomePageWithState extends State<MyHomePage> {
  int _counter = 0;

  void _incrementCounter() {
    setState(() {
      _counter++;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              'You have pushed the button this many times:',
            ),
            Text(
              '-$_counter',
              style: Theme.of(context).textTheme.display1,
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter,
        tooltip: 'Increment',
        child: Icon(Icons.remove),
      ),
    );
  }
}

React Native

Dart (like Java)

JavaScript

Build for each platform bytecode

Language

UI Render

Build for each platform bytecode

Business Logic

Dart

Compiled Language

JavaScript

Script Language

redux / apollo client

React devtool & profiler

By Chia Yu Pai

React devtool & profiler

  • 357