Run details:
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36
Chrome 116
Mac OS X 10.15.7
Desktop
one year ago
Test name Executions per second
Inline Function 591621.6 Ops/sec
Hooks 669048.1 Ops/sec
Without useMemo 516036.4 Ops/sec
With useMemo 630078.1 Ops/sec
Child without memo 451535.5 Ops/sec
Child with memo 493341.6 Ops/sec
HTML Preparation code:
AخA
 
1
<script crossorigin src="https://unpkg.com/react@18/umd/react.production.min.js"></script>
2
<script crossorigin src="https://unpkg.com/react-dom@18/umd/react-dom.production.min.js"></script>
3
<div id="root"></div>
Script Preparation code:
x
 
function ComponentWithInlineFunction() {
    const clickMe = () => {};
    return React.createElement('button', {
        onClick: clickMe
    }, 'Click me!');
}
function ComponentWithUseCallback() {
    const clickMe = React.useCallback(() => {}, []);
    return React.createElement('button', {
        onClick: clickMe
    }, 'Click me!');
}
function ComponentWithoutUseMemo() {
    const obj = {
        x: 1,
        y: 1
    };
    return React.createElement('h1', {
        data: obj
    }, 'ComponentWithoutUseMemo');
}
function ComponentWithUseMemo() {
    const obj = React.useMemo(() => ({
        x: 1,
        y: 1
    }), []);
    return React.createElement('h1', {
        data: obj
    }, 'ComponentWithUseMemo');
}
const ChildWithoutMemo = () => {
    return React.createElement('div', null, null);
}
const ChildWithMemo = React.memo(ChildWithoutMemo);
function ComponentWithoutMemorizedChild() {
    const [count, setCount] = React.useState(0);
    React.useEffect(() => {
        if (count < 10000) {
            setCount(c => c + 1);
        }
    })
    return React.createElement(ChildWithoutMemo, null, null);
}
function ComponentWithMemorizedChild() {
    const [count, setCount] = React.useState(0);
    React.useEffect(() => {
        if (count < 10000) {
            setCount(c => c + 1);
        }
    })
    return React.createElement(ChildWithMemo, null, null);
}
Tests:
  • Inline Function

     
    ReactDOM.render(React.createElement(ComponentWithInlineFunction), document.getElementById('root'))
  • Hooks

     
    ReactDOM.render(React.createElement(ComponentWithUseCallback), document.getElementById('root'))
  • Without useMemo

     
    ReactDOM.render(React.createElement(ComponentWithoutUseMemo), document.getElementById('root'))
  • With useMemo

     
    ReactDOM.render(React.createElement(ComponentWithUseMemo), document.getElementById('root'))
  • Child without memo

     
    ReactDOM.render(React.createElement(ComponentWithoutMemorizedChild), document.getElementById('root'))
  • Child with memo

     
    ReactDOM.render(React.createElement(ComponentWithMemorizedChild), document.getElementById('root'))