0Pricing
Swift Academy · درس

تقليل إعادة تقييم Body

قلّل إعادة حساب العرض غير الضرورية.

تقليل إعادة تقييم Body درس مجاني في Swift Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Swift Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Swift Academy 4 دروس في المجموع.

تُعاد حسابات body كثيرًا

تستدعي SwiftUI الخاصية body للعرض كلما تغيّرت مدخلاته. ويؤدي وجود body ثقيل أو كثير الارتباطات إلى إعادة حسابه بوتيرة مفرطة، مما يضر بالأداء.

ما الذي يؤدي إلى إعادة التقييم؟

يُعاد تشغيل body عندما تتغير أي قيمة من @State أو @Binding أو كائن تتم مراقبته أو قيمة من البيئة يقرأها، أو عندما يمرر العنصر الأب قيمًا جديدة.

struct Row: View {
    let title: String // changes -> body re-runs
    var body: some View { Text(title) }
}

ضيّقوا نطاق ما تراقبونه

إذا قرأ عرض نموذجًا كبيرًا كاملًا، فإن أي تغيير في ذلك النموذج يعيد تشغيل body. مرروا فقط القيم المحددة التي يحتاج إليها العرض.

// Instead of passing the whole model:
struct Price: View {
    let amount: Decimal // narrow input
    var body: some View { Text(amount, format: .currency(code: "USD")) }
}

قسّموا العروض الكبيرة

قسّموا body ضخمًا إلى عروض فرعية صغيرة. تعيد SwiftUI تقييم العروض الفرعية التي تغيرت مدخلاتها فعلًا فقط، لا الشاشة بأكملها.

struct Screen: View {
    var body: some View {
        VStack {
            Header()   // re-runs only if its inputs change
            ItemList()
            Footer()
        }
    }
}

Observable والتتبع على مستوى الحقول

باستخدام الماكرو @Observable، تتتبع SwiftUI الخصائص المحددة التي يقرأها العرض. فالعرض الذي يقرأ model.name يتجاهل التغييرات التي تطرأ على model.count.

@Observable final class Model {
    var name = ""
    var count = 0
}
// A view reading only name won’t re-run when count changes

تجنب تنفيذ العمل في body

ينبغي أن يصف body واجهة المستخدم بتكلفة منخفضة. أما العمليات الحسابية المكلفة، مثل الفرز والتصفية، فمكانها النموذج أو خاصية مخزنة مؤقتًا، لا أن تُعاد في كل استدعاء لـ body.

// Bad: sort inside body (runs every recompute)
// Good: sort once in the model, expose sorted array

الإغلاقات والمدخلات المستقرة

قد يؤدي تمرير مصفوفة أو إغلاق يُنشأ حديثًا في كل عملية تصيير إلى إبطال فحوصات المساواة في SwiftUI. ارفعوا القيم المستقرة إلى خارج العملية حتى تتساوى المدخلات بين عمليات إعادة الحساب.

// Hoist constants out of body
private let columns = [GridItem(.flexible())]

احذروا المُهيئات المكلفة

قد تُشغَّل دالة init للعرض مرات عديدة. تجنبوا تنفيذ العمل المكلف فيها؛ إذ تنشئ SwiftUI قيم العروض بكثرة حتى عندما لا تصيّرها.

struct Card: View {
    init(_ item: Item) { /* keep this trivial */ }
    var body: some View { Text("Card") }
}

قراءة البيئة تكلّف تحديثات

تؤدي قراءة قيمة من البيئة إلى اشتراك العرض فيها. اقرأوا قيم البيئة فقط في الموضع الذي يحتاج إليها، وداخل أصغر عرض فرعي، للحد من نطاق إعادة التقييم.

@Environment(\.colorScheme) private var scheme

الحاويات الكسولة

استخدموا LazyVStack/LazyHStack وList حتى لا تُنشأ الصفوف خارج الشاشة إلا عند الحاجة، مما يقلل استدعاءات body للمجموعات الكبيرة.

ScrollView {
    LazyVStack {
        ForEach(items) { RowView(item: $0) }
    }
}

قيسوا أولًا ثم حسّنوا

لا تخمّنوا أي body هو الأكثر استهلاكًا للوقت. استخدموا SwiftUI Instrument للعثور على العروض ذات العدد المرتفع من عمليات تقييم body، ثم طبّقوا هذه الأساليب عليها.

اختبار سريع: إعادة التقييم

اختبروا مدى فهمكم لإعادة تقييم body.

خلاصة: تقليل إعادة تقييم body

يُعاد تشغيل body عند تغيّر مدخلاته، لذلك مرروا قيمًا محددة، وقسّموا العروض الكبيرة إلى عروض فرعية صغيرة، واستفيدوا من التتبع على مستوى الحقول الذي يوفره @Observable. اجعلوا body والمهيئات قليلة التكلفة، وارفعوا المدخلات المستقرة، واقرؤوا قيم البيئة بأقل قدر ممكن، واستخدموا الحاويات الكسولة للمجموعات الكبيرة.

تحققوا دائمًا من النقاط الأكثر استهلاكًا باستخدام SwiftUI Instrument قبل إجراء التحسينات.

الأسئلة الشائعة

هل درس «تقليل إعادة تقييم Body» مجاني؟

نعم — نص درس «تقليل إعادة تقييم Body» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Swift Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Swift Academy 4 دروس في المجموع.

ماذا ستتعلم في «تقليل إعادة تقييم Body»؟

قلّل إعادة حساب العرض غير الضرورية. تتمرن على Swift Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Swift Academy؟

لا تُشترط خبرة سابقة. Swift Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.

كم من الوقت يستغرق درس «تقليل إعادة تقييم Body»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Swift Academy هذا؟

نعم. كل درس في Swift Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. فهم هوية العرض
  2. تقليل إعادة تقييم Body
  3. العروض القابلة للمقارنة ونطاق @State
  4. تحليل الأداء باستخدام أداة SwiftUI
← العودة إلى Swift Academy