React アプリケーションを最適化するには、パフォーマンス、バンドル サイズの削減、効率的なレンダリング、全体的なユーザー エクスペリエンスに焦点を当てたいくつかの重要な戦略を使用できます。 React に特有の最適化テクニックの内訳は次のとおりです:
コード分割を使用すると、アプリケーション全体を一度にロードするのではなく、必要に応じてロードできる小さなチャンクにアプリケーションを分割できます。これにより、初期ロード時間が短縮されます。
const LazyComponent = React.lazy(() => import('./Component')); function App() { return ( <react.suspense fallback="{<div">Loading...}> <lazycomponent></lazycomponent> </react.suspense> ); }
React アプリケーションのパフォーマンスを向上させるには、不必要な再レンダリングを回避することが重要です。
const MyComponent = React.memo(({ value }) => { return <div>{value}</div>; });
const computedValue = useMemo(() => expensiveComputation(value), [value]);
const handleClick = useCallback(() => { console.log('Clicked'); }, []);
不必要なレンダリングを回避する方法で状態を処理すると、パフォーマンスが大幅に向上します。
const [state, dispatch] = useReducer(reducer, initialState);
長いリストやテーブルをレンダリングすると、パフォーマンスが低下する可能性があります。リスト仮想化技術を使用して、画面に表示されているもののみをレンダリングします。
import { FixedSizeList as List } from 'react-window'; const MyList = ({ items }) => ( <list height="{500}" itemcount="{items.length}" itemsize="{35}" width="{300}"> {({ index, style }) => <div style="{style}">{items[index]}</div>} </list> );
アプリケーションがバンドル サイズを削減するために使用されているライブラリの部分のみをインポートするようにしてください。
// Instead of this: import _ from 'lodash'; // Do this: import debounce from 'lodash/debounce';
多くの場合、画像はページ上の最大の資産です。遅延読み込みを使用して、画像がビューポートに表示されるまで読み込みを遅らせます。
import LazyLoad from 'react-lazyload'; const ImageComponent = () => ( <lazyload height="{200}" once> <img src="image-url.jpg" alt="React アプリケーションの最適化"> </lazyload> );
const LazyImage = ({ src, alt }) => { const [inView, setInView] = useState(false); const imgRef = useRef(null); useEffect(() => { const observer = new IntersectionObserver(([entry]) => { if (entry.isIntersecting) { setInView(true); observer.disconnect(); } }); observer.observe(imgRef.current); }, []); return <img ref="{imgRef}" src="%7BinView" : alt="{alt}">; };
Terser または Webpack の組み込み縮小化を使用して、ビルド プロセス中に JavaScript バンドルのサイズを削減します。
Create React App は、実稼働ビルド用のコードを自動的に縮小します:
npm run build
JavaScript バンドルのサイズを分析して、改善できる領域を特定します。
npm install --save-dev webpack-bundle-analyzer
Webpack 構成内:
const { BundleAnalyzerPlugin } = require('webpack-bundle-analyzer'); module.exports = { plugins: [ new BundleAnalyzerPlugin() ] };
npm install @fullhuman/postcss-purgecss
PostCSS 構成の例:
const purgecss = require('@fullhuman/postcss-purgecss')({ content: ['./src/**/*.js', './public/index.html'], defaultExtractor: content => content.match(/[\w-/:]+(? <h3> 10. <strong>ネットワークリクエストを最適化する</strong> </h3> <p>ネットワーク リクエストの数を減らし、API 呼び出しを最適化すると、パフォーマンスが大幅に向上する可能性があります。</p>
const fetchResults = debounce((query) => { // API call logic }, 300);
import useSWR from 'swr'; const fetcher = url => fetch(url).then(res => res.json()); const MyComponent = () => { const { data, error } = useSWR('/api/data', fetcher); if (error) return <div>Error loading data</div>; if (!data) return <div>Loading...</div>; return <div>{data.message}</div>; };
Avoid adding unnecessary elements to the DOM by using React Fragments ( and >) when wrapping multiple elements.
const MyComponent = () => ( <h1>Title</h1> <p>Content</p> > );
Use the React Developer Tools profiler to identify performance bottlenecks in your app.
Optimizing a React application requires careful attention to performance, bundle size, and rendering efficiency. By employing techniques like code splitting, memoization, lazy loading, tree shaking, and minimizing network requests, you can significantly improve the performance of your app. Make sure to regularly analyze and test your app’s performance to catch any potential inefficiencies.
以上がReact アプリケーションの最適化の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。