React 性能优化完全指南

··

React 渲染机制

理解 React 的渲染机制是性能优化的基础。

Virtual DOM 的工作原理

function App() {
  const [count, setCount] = useState(0);
  
  return (
    <div>
      <h1>{count}</h1>
      <button onClick={() => setCount(c => c + 1)}>
        +1
      </button>
      <ExpensiveComponent />
    </div>
  );
}

优化技巧

1. React.memo

const ExpensiveComponent = React.memo(
  function ExpensiveComponent({ data }: { data: Item[] }) {
    return (
      <ul>
        {data.map(item => (
          <li key={item.id}>{item.name}</li>
        ))}
      </ul>
    );
  }
);

2. useMemo 和 useCallback

function SearchPage() {
  const [query, setQuery] = useState('');
  const [items, setItems] = useState<Item[]>([]);
  
  // 缓存计算结果
  const filteredItems = useMemo(
    () => items.filter(item => 
      item.name.toLowerCase().includes(query.toLowerCase())
    ),
    [items, query]
  );
  
  // 缓存回调函数
  const handleSearch = useCallback(
    (value: string) => setQuery(value),
    []
  );
  
  return <SearchResults items={filteredItems} />;
}

3. 虚拟列表

import { FixedSizeList } from 'react-window';

function VirtualList({ items }: { items: Item[] }) {
  return (
    <FixedSizeList
      height={400}
      itemCount={items.length}
      itemSize={50}
      width="100%"
    >
      {({ index, style }) => (
        <div style={style}>{items[index].name}</div>
      )}
    </FixedSizeList>
  );
}

性能检测工具

  • React DevTools:Profiler 选项卡
  • Chrome Lighthouse:性能审计
  • Web Vitals:核心 Web 指标

总结

性能优化是一个持续的过程,关键是要用数据说话,避免过早优化。