محتويات الدورة

React Native / أنظمة أصلية شاملة وأدلة الإصدار / الدرس 14

الحركة والقياس وكلفة القوائم

قِس المرحلة المكلفة واحفظ عمر الحركة، بدلا من تطبيق حفظ نتائج أو إعدادات قوائم عامة.

وقت القراءة التقريبي: 4 دقيقةتاريخ مراجعة المحتوى
في هذه الصفحة

أهداف الدرس

  • حدّد التفاعل والبيئة المقاسة
  • امتلك الحركة وأوقف العمل الذي استُبدل
  • إزاحات الصف الثابت عقد لا تخمين

حدّد التفاعل والبيئة المقاسة

يحتاج تشخيص الأداء حملا محددا ونمط بناء وتشغيلا وعتادا وبيانات ومقياسا مرصودا. ليس عبء debug أو نموذج سطح مكتب خط أساس لأداء إصدار هاتف. ميّز تأخر JavaScript والتخطيط أو الرسم الأصلي وفك الصور واحتفاظ الذاكرة قبل التدخل. لا تثبت حركة عتامة سلسة يقودها الأصلي سلامة حساب JavaScript متزامن طويل. ولا تصلح قلة العروض مؤثرا أصليا مكلفا تلقائيا. احفظ الصحة والترجمة والإتاحة عند مقارنة التفاعل الممثل نفسه قبل تغيير مركز وبعده.

امتلك الحركة وأوقف العمل الذي استُبدل

تحفظ الوحدة الأولى Animated.Value واحدة بمرجع مستقر وتبدأ هدف عتامة جديدا عند تغير visible. يوقف التنظيف الحركة التي أنشأها التأثير. يُختار المحرك الأصلي لحركة عتامة مدعومة، لا لكل خاصية تخطيط اعتباطية. والمدة180 اختيار توضيحي. لا تحدد العتامة الصفرية اللمس والتركيز وإخفاء الإتاحة وحدها، فتحتاج شجرة مخفية تفاعلية إلى سياسة إضافية. يحوي المثال نصا فقط ولا يدّعي حل تلك التفاعلات. ولا ينفذ تشغيل حركة أو توقيت إطارات هنا.

jsx وحدة توضيحية من React Native؛ تتطلب بيئة التطبيق المتوافقة المبيّنة.
import {useEffect, useRef} from 'react';
import {Animated, Text} from 'react-native';
export default function FadeLabel({visible}) {
  const opacity = useRef(new Animated.Value(visible ? 1 : 0)).current;
  useEffect(() => {
    const animation = Animated.timing(opacity, {
      toValue: visible ? 1 : 0, duration: 180, useNativeDriver: true,
    });
    animation.start();
    return () => animation.stop();
  }, [visible, opacity]);
  return <Animated.View style={{opacity}}><Text>Workshop status</Text></Animated.View>;
}
الناتج المتوقع
Changing visible requests opacity1 or0 and stops the previous Effect’s animation.

يستخدم المقتطف هدف عتامة مدعوما. ولا يؤكد انتظام الإطارات أو الترجمة الأصلية أو سلوك إدخال مخفي.

إزاحات الصف الثابت عقد لا تخمين

يحسب البرنامج الثاني إزاحة لصف ثابت الحجم فعلا مع فاصل. لا يفيد getItemLayout إلا إذا حفظ التخطيط الفعلي الأبعاد. وقد يبطل ارتفاع نص ديناميكي وفاصل مختلف وعنوان واتجاه صيغة مخمنة. أدرج كل امتداد لازم ولا تنسخ رقما من صورة إنجليزية قصيرة. تفحص النتيجة الحساب فقط ولا تقدم معيار تمرير. وقد تحتاج قائمة إنتاج بصفوف إتاحة متغيرة إلى القياس المعتاد، بدلا من فرض أبعاد تقص المعلومات لتسهيل الإزاحات.

javascript نموذج JavaScript مستقل بمدخلات محلية مصطنعة.
function fixedRowLayout(index, rowExtent, separatorExtent) {
  if (!Number.isSafeInteger(index) || index < 0 || rowExtent <= 0 || separatorExtent < 0) {
    throw new Error('INVALID_LAYOUT');
  }
  return {length: rowExtent, offset: index * (rowExtent + separatorExtent), index};
}
console.log(JSON.stringify(fixedRowLayout(2, 48, 2)));
console.log(JSON.stringify(fixedRowLayout(0, 48, 2)));
الناتج المتوقع
{"length":48,"offset":100,"index":2}
{"length":48,"offset":0,"index":0}

يحسب النموذج فاصلين قبل الصف2. ويفترض امتدادات عددية محدودة يوفرها عقد تخطيط ثابت متحقق منه.

حسّن العمل المقاس والموارد المحتفظ بها

لا يتجنب حفظ النتائج حسابا متكررا إلا عند صحة الاعتماديات واستحقاق القيمة المحتفظ بها كلفة ذاكرتها. قد يحفظ إغلاق رد متقادم حالة خاطئة رغم تقليل التخصيص. تتبادل إعدادات نافذة FlatList ودفعاتها الاستجابة والمناطق الفارغة والذاكرة؛ ولا يناسب إعداد واحد كل جهاز وصف. قد تهيمن الصور الكبيرة المفكوكة على الذاكرة مستقلة عن عدد كائنات JavaScript. وتحتاج المستمعات والمؤقتات والمهام والمراجع الأصلية إلى ملاك عمر واضحين. قِس دورات الفتح والإغلاق المتكررة لتمييز استقرار مخزن مقصود من احتفاظ مستمر، بدلا من تغيير كل ضوابط التحسين معا.

لا تبلغ تحسنا إلا بدليل قابل للمقارنة

التقط التفاعل البطيء، وغيّر سببا محتملا واحدا، وأعد حمل العمل نفسه، وقارن التتبع وملاحظات الذاكرة أو الإطارات ذات الصلة. احفظ اختبارات هوية الصف والإلغاء والعربية الطويلة وسلوك الحركة المخففة عند تغيير التنفيذ. ليست دالة Node صغيرة أسرع دليلا لتحسن قائمة أو حركة أصلية. لا تشغّل الدورة محللا أصليا للأداء أو معيار فك صور أو توقيت عارض أو تحميل جهاز. تثبت نماذجها الحسابية المستقلة القيم الدقيقة فقط؛ وتتطلب ادعاءات أداء الهدف قياسات فعلية ببيئة متوافقة وحدودا موثقة.

الأخطاء الشائعة وإصلاحها

تشغيل المحرك الأصلي لحركة تخطيط غير مدعومة

لماذا يحدث؟
عُمم مثال العتامة المدعوم على كل الخصائص.
كيف تصلحه؟
افحص الخصائص والبيئة التي تدعمها واجهة الحركة المختارة.
كيف تتجنب تكراره؟
أظهر افتراضات المحرك في الأمثلة.

انتقال getItemLayout إلى إزاحة خاطئة

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

حفظ النتائج لقيم متقادمة

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

اختبر فهمك

1. لماذا لا تثبت العتامة 0 أن لوحة مخفية بأمان؟

اعرض الحل المشروح

تختلف الشفافية المرئية عن اختبار اللمس والتركيز والدلالات وعمر المسودة. حدّد هذه السياسات لشجرة تفاعلية، وافحص الحالة الانتقالية والنهائية معا. ينبغي ألا يترك التلاشي تحكما غير مرئي نشطا، أو يسقط العمل دون توقع.

2. ما الدليل المطلوب قبل ادعاء أن نافذة FlatList الأكبر أفضل؟

اعرض الحل المشروح

قِس تفاعل التمرير الممثل نفسه على الأهداف المقصودة، بما فيه المناطق الفارغة والاستجابة والذاكرة. قد تحسن نافذة أكبر مقياسا وتسيء آخر. احفظ صحة الصف والإتاحة، وأبلغ عن المفاضلة الفعلية بدلا من إعداد عام.

أهم ما تعلمته

  • حدّد التفاعل والبيئة المقاسة
  • لا تبلغ تحسنا إلا بدليل قابل للمقارنة

المراجع الرسمية