ذاكرة التخزين المؤقت للتخطيط والأداء
استخدم ذاكرة التخزين المؤقت للتخطيط لتحسين الكفاءة.
ذاكرة التخزين المؤقت للتخطيط والأداء درس مجاني في Swift Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Swift Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Swift Academy 4 دروس في المجموع.
لماذا نستخدم ذاكرة مؤقتة للتخطيط؟
قد تستدعي SwiftUI كلًا من sizeThatFits وplaceSubviews مرات عديدة أثناء تمريرة تخطيط واحدة.
إذا كانت حساباتكم مكلفة، تتيح لكم ذاكرة التخزين المؤقت الحساب مرة واحدة وإعادة استخدام النتيجة، مما يتجنب العمل المتكرر.
النوع المرتبط Cache
يحتوي بروتوكول Layout على نوع مرتبط يسمى Cache، وقيمته الافتراضية هي Void. عرّفوا هيكلًا خاصًا بكم لتخزين النتائج المحسوبة مسبقًا.
struct FlowLayout: Layout {
struct CacheData {
var sizes: [CGSize] = []
}
typealias Cache = CacheData
}makeCache
نفّذوا makeCache(subviews:) لإنشاء الذاكرة المؤقتة الأولية. تستدعيها SwiftUI مرة واحدة قبل دوال التخطيط، مما يوفر مكانًا لإجراء القياس المسبق.
func makeCache(subviews: Subviews) -> CacheData {
let sizes = subviews.map { $0.sizeThatFits(.unspecified) }
return CacheData(sizes: sizes)
}قراءة الذاكرة المؤقتة
تتلقى دوال التخطيط الآن cache كمعامل inout. اقرأوا القيم المحسوبة مسبقًا بدلًا من إعادة قياس كل عنصر فرعي.
func sizeThatFits(proposal: ProposedViewSize, subviews: Subviews, cache: inout CacheData) -> CGSize {
let height = cache.sizes.map(\.height).max() ?? 0
let width = cache.sizes.reduce(0) { $0 + $1.width }
return CGSize(width: width, height: height)
}updateCache
عند تغيّر مجموعة العروض الفرعية، تستدعي SwiftUI الدالة updateCache(_:subviews:). يعيد التنفيذ الافتراضي البناء عبر makeCache، لكن يمكنكم تجاوزه لإجراء تحديث تدريجي.
func updateCache(_ cache: inout CacheData, subviews: Subviews) {
cache.sizes = subviews.map { $0.sizeThatFits(.unspecified) }
}متى تُستدعى updateCache
تُشغَّل updateCache عند تغيّر عدد العروض الفرعية أو هويتها، وليس عند كل تغيير هندسي. خزّنوا مؤقتًا البيانات المعتمدة على العروض الفرعية، لا على الحجم المقترح.
خزّنوا البيانات المستقلة عن الاقتراح فقط
من الأخطاء الشائعة تخزين نتائج تعتمد على الحجم المقترح. قد يتغير الاقتراح بين الاستدعاءات، لذلك يجب إعادة حساب النتائج المعتمدة على الحجم، لا تخزينها بلا تمييز.
// OK to cache: intrinsic child sizes
// NOT OK to cache: row breaks (depend on proposed width)تخزين الأحجام الجوهرية مؤقتًا
النمط الآمن هو تخزين نتائج sizeThatFits(.unspecified) المكلفة مؤقتًا، ثم إجراء حسابات الالتفاف الرخيصة في كل استدعاء باستخدام الاقتراح الحالي.
struct CacheData { var intrinsic: [CGSize] = [] }
// wrapping uses cache.intrinsic + current maxWidthتجنب التحسين المبكر
بالنسبة إلى عدد قليل من العناصر الفرعية البسيطة، يكون القياس رخيصًا وتضيف الذاكرة المؤقتة تعقيدًا. حلّلوا الأداء أولًا؛ ولا تلجؤوا إلى الذاكرة المؤقتة إلا عندما يكون القياس مكلفًا فعلًا، مثل قياس النصوص والصور والتخطيطات المتداخلة.
الذاكرة المؤقتة ودلالات القيمة
تملك SwiftUI الذاكرة المؤقتة وتمررها باستخدام inout. حافظوا عليها كنوع قيمة عادي بلا مراجع إلى العروض، حتى تتمكن SwiftUI من إدارة دورة حياتها بأمان.
struct CacheData {
var sizes: [CGSize] // value types only
}قياس الفائدة
استخدموا أداة SwiftUI Instrument أو عدّادات بسيطة للتأكد من أن الذاكرة المؤقتة تقلل استدعاءات القياس فعلًا. فالتحسين من دون قياس مجرد تخمين.
اختبار سريع: ذاكرة التخطيط المؤقتة
اختبروا مدى فهمكم للتخزين المؤقت للتخطيط.
خلاصة: ذاكرة التخطيط المؤقتة والأداء
يخزّن النوع المرتبط Cache في بروتوكول Layout، والذي تنشئه makeCache وتحدّثه updateCache، العمل المكلف المستقل عن الاقتراح، مثل الأحجام الجوهرية للعناصر الفرعية.
أجروا الحسابات الرخيصة المعتمدة على الاقتراح في كل استدعاء. حافظوا على الذاكرة المؤقتة كنوع قيمة بلا مراجع، وتجنبوا التخزين المؤقت المبكر، وتحققوا من فائدته باستخدام تحليل الأداء قبل إضافة التعقيد.
الأسئلة الشائعة
هل درس «ذاكرة التخزين المؤقت للتخطيط والأداء» مجاني؟
نعم — نص درس «ذاكرة التخزين المؤقت للتخطيط والأداء» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Swift Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Swift Academy 4 دروس في المجموع.
ماذا ستتعلم في «ذاكرة التخزين المؤقت للتخطيط والأداء»؟
استخدم ذاكرة التخزين المؤقت للتخطيط لتحسين الكفاءة. تتمرن على Swift Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Swift Academy؟
لا تُشترط خبرة سابقة. Swift Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.
كم من الوقت يستغرق درس «ذاكرة التخزين المؤقت للتخطيط والأداء»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Swift Academy هذا؟
نعم. كل درس في Swift Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- أساسيات بروتوكول Layout
- قياس العروض الفرعية
- إنشاء تخطيط التدفق
- ذاكرة التخزين المؤقت للتخطيط والأداء