"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > أنماط الأداء EACT يجب على كل مطور سرقة (وكيفية تنفيذها)

أنماط الأداء EACT يجب على كل مطور سرقة (وكيفية تنفيذها)

نشر في 2025-03-04
تصفح:536

eact Performance Patterns Every Developer Should Steal (and How to Implement Them)

تعزز أداء تطبيق React أمر بالغ الأهمية لتجربة المستخدم الإيجابية. تحدد هذه المقالة سبعة أنماط أداء مثبتة تم الحصول عليها من تحسين العديد من تطبيقات رد فعل الإنتاج.


  1. مذكرات مع usememo و Usecallback :

المشكلة: غير ضرورية من أعمدة غير ضرورية بسبب الدعائم غير المتغيرة أو الحالة.

الحل: ذاكرة التخزين المؤقت العمليات باهظة الثمن ومراجع الوظائف.

const ExpensiveComponent = ({ items }) => {
  const sortedList = useMemo(() => items.sort((a, b) => a.price - b.price), [items]);
  const handleClick = useCallback(() => {
    console.log('Item clicked:', sortedList[0]);
  }, [sortedList]);
  return ;
};

أفضل الممارسات: استخدم مع React.memo للحصول على مكونات الطفل لمنع تحديثات الشجرة الفرعية غير الضرورية. مثالية للحسابات المعقدة (الفرز ، التصفية) ، تم تمرير عمليات الاسترجاعات إلى الأطفال المحسنين ، وقيم موفر سياق مستقر.


  1. تحميل كسول وتقسيم الكود:

المشكلة: حجم حزمة أولي كبير يؤثر على الطلاء الأول للمحتوى (FCP).

الحل: استيرادات ديناميكية و التشويق للتحميل عند الرسم.

const HeavyChartLibrary = React.lazy(() => import('./ChartComponent'));

const Dashboard = () => (
  }>
    {showCharts && }
  
);

متقدم: الاندماج مع جهاز توجيه React لتقسيم الكود المستند إلى الطريق.


  1. قوائم افتراضية لمجموعات البيانات الكبيرة:

المشكلة: جعل آلاف العناصر يطغى على DOM.

الحل: React-window

import { FixedSizeList } from 'react-window';

const BigList = ({ items }) => (
  
    {({ index, style }) => (
      
...
)}
);

المكافأة: استخدم المتغيرات للحصول على ارتفاعات الصف الديناميكي و


إدارة الحالة الفعالة:
  1. المشكلة:
تحديثات الحالة المتعددة التي تسبب متتالية إعادة الترتيب.

الحل:

الاستفادة من ردود الفعل التلقائي 18.

رد فعل 18:

setCount (1) ؛ setText ('تحديث') ؛ // re-Render Single

setCount(1);
setText('Updated'); // Single re-render
استخدم

usereducer لتحديثات الحالة الذرية.


مكالمات Debouncing API:
  1. المشكلة:
طلبات API المفرطة من إدخال المستخدم السريع (على سبيل المثال ، أشرطة البحث).

الحل:

A Custom

المستخدمة hook. استيراد {UseEffect ، Usestate} من 'React' ؛ const usebouncedValue = (القيمة ، التأخير) => { const [debouncedValue ، setDebouncedValue] = Usestate (value) ؛ useEffect (() => { const handler = setTimeOut (() => setDebouncedValue (القيمة) ، التأخير) ؛ return () => clearTimeOut (معالج) ؛ } ، [القيمة ، التأخير]) ؛ إرجاع debouncedvalue ؛ } ؛

import { useEffect, useState } from 'react';

const useDebouncedValue = (value, delay) => {
  const [debouncedValue, setDebouncedValue] = useState(value);
  useEffect(() => {
    const handler = setTimeout(() => setDebouncedValue(value), delay);
    return () => clearTimeout(handler);
  }, [value, delay]);
  return debouncedValue;
};
الجمع مع

AbortController لإلغاء الطلبات المعلقة.


API Optized Context API:
  1. المشكلة:
غير ضرورية من مستهلكي السياق بسبب التغييرات غير المرتبطة.

الحل:

تقسيم السياقات وقيم مزود المذكرات.


تحديثات واجهة المستخدم المتفائلة:
  1. المشكلة:
بطيئة واجهة المستخدم بسبب انتظار ردود API.

الحل:

توفير ملاحظات مرئية فورية وتراجع عن الخطأ.

قائمة مراجعة الأداء:

ملف التعريف إعادة تدوير مع REACT DEVTOOLS PROFILER.

    تحليل حجم الحزمة باستخدام Source-Map-Explorer.
  1. اختبار مع علامة التبويب أداء Chrome (خنق وحدة المعالجة المركزية).
  2. استخدم
  3. React.memo
  4. ،
  5. usememo ، usecallback استراتيجية. تنفيذ التحميل الإضافي. تحسين الصور/الوسائط مع التحميل كسول.
  6. النظر في عرض جانب الخادم للمحتوى الحرج.
  7. تذكر:
  8. ملف تعريف أولاً ، قم بتحسين ثانية! تنطبق هذه التقنيات عبر أطراف React المختلفة (next.js ، gatsby ، إلخ.).
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3