سلسلة تحسين أداء iOS 04|مشكلات الأداء عالي التردد في تحميل الصور والتخزين المؤقت
المشكلة الحقيقية في مشكلات الصورة هي أن التنزيل وفك التشفير والقياس واستخدام الذاكرة وتوقيت العرض كلها متشابكة.
تعد الصور هي المكان الأكثر احتمالاً لمشاكل الأداء المتكررة في مشاريع iOS.
غالبًا ما تواجهها في سيناريوهات مختلفة:
- تجميد الصفحة الرئيسية
- قائمة التمرير قطرات الإطارات
- زيادة الذاكرة
- يتم تحميل الشاشة الأولى ببطء
- فلاش الصور أثناء التمرير
- بالنسبة لنفس صفحة المحتوى، إذا كان هناك المزيد من الصور، فمن الواضح أن السرعة ستكون أبطأ.
عند التعامل في البداية مع هذا النوع من المشاكل، سيتم تبسيط مشكلة الصورة في جملة واحدة:
ثم أضف ذاكرة التخزين المؤقت.
يعد التخزين المؤقت أمرًا مهمًا بالطبع، ولكن إذا كنت تفهم تحسين الصورة فقط على أنه “ما إذا كانت هناك ذاكرة تخزين مؤقت”، فعادةً ما يكون ذلك بعيدًا عن المشكلة الحقيقية. لأن التعقيد الحقيقي لرابط الصورة هو أنه يجمع العديد من التكاليف معًا:
- تحميل
- فك التشفير
- التكبير
- التقديم
- عقد الذاكرة
- إدارة دورة الحياة
لذا فإن مشكلة الصورة تكون دائمًا مشكلة في النظام.
1. من المرجح أن تؤدي الصور إلى تضخيم المشكلات أكثر من البيانات العادية.
لأن الصور بطبيعتها لها عدة خصائص تجعل الأداء هشًا:
- حجم الموارد عادة ما يكون أكبر
- غالبًا ما يكون فك التشفير مطلوبًا قبل العرض
- ستؤدي الأجهزة والمشاهد ذات الأحجام المختلفة إلى بدء القياس
- سوف تظهر بشكل متكرر في القائمة
- تخزين الذاكرة مؤقتًا واحتلالها بسهولة لفترة طويلة
بمعنى آخر، الصور هي نوع من الموارد التي تضغط على وحدة المعالجة المركزية والذاكرة وعرض النطاق الترددي والعرض في نفس الوقت.
وهذا يوضح أيضًا أنه بمجرد عدم معالجة الصورة بشكل جيد، فإنها غالبًا لا تظهر كمشكلة واحدة فقط، بل تظهر مشكلات متعددة معًا:
- بطاقات المتداول
- ذاكرة عالية
- بطء الشاشة الأولى
2. التنزيل ليس التكلفة الوحيدة. ما تقلل من تقديره العديد من الفرق حقًا هو توقيت فك التشفير.
عندما يأتي هذا الموضوع، يتم التركيز على تحميل الصور: التنزيل:
-هل الصورة كبيرة أم لا؟
- هل الشبكة بطيئة؟
- ضرب ذاكرة التخزين المؤقت لا
لكن في المشاريع الحقيقية، غالبًا ما لا يكون التنزيل هو التكلفة الوحيدة، وغالبًا ما لا يكون حتى التكلفة الأساسية للتمرير. ما يؤدي حقًا إلى إبطاء التجربة في اللحظات الحرجة هو غالبًا:
- فك تشفير الصورة
- معالجة حجم العرض المسبق
- تحضير الصورة الذي يحدث على الموضوع الرئيسي أثناء التمرير
بمعنى آخر، لا يعني “الانتهاء من تنزيل” الصورة أنها “جاهزة للعرض”. إذا تم دفع الكثير من أعمال معالجة الصور إلى لحظة العرض، فسوف تقوم الصفحة بإسقاط الإطارات بسهولة في الوقت الأكثر حساسية.
3. كلما زاد عدد ذاكرات التخزين المؤقت، كلما كان ذلك أفضل. قد تؤدي استراتيجية التخزين المؤقت نفسها إلى خلق مشاكل جديدة.
يعد التخزين المؤقت أمرًا ضروريًا، لكن التخزين المؤقت ليس مجانيًا على الإطلاق.
إذا كانت استراتيجية التخزين المؤقت غير واضحة، فإن العواقب الشائعة تشمل ما يلي:
- من الواضح أن ذاكرة التخزين المؤقت قد تم الضغط عليها، ولكن الذاكرة تزداد ارتفاعًا وأعلى.
- التخزين المؤقت على القرص عدواني للغاية واستراتيجية التنظيف غير معقولة
- يتم تخزين نفس الصورة مؤقتًا بشكل متكرر بأحجام متعددة
- تبدو نتائج ذاكرة التخزين المؤقت جيدة عند التبديل بين القوائم بسرعة، ولكن الصفحة لا تزال عالقة
يوضح هذا أن ما يريد التخزين المؤقت حله حقًا ليس فقط “الأقل في المرة القادمة”، ولكنه يتضمن أيضًا:
- ما حجم ذاكرة التخزين المؤقت
- كم من الوقت يجب الاحتفاظ به
- متى يجب القضاء
- ما هي الموارد المناسبة للتخزين المؤقت للذاكرة وما هي المناسبة فقط للتخزين المؤقت على القرص
لذلك، لا يمكن أبدًا شرح التخزين المؤقت للصور بشكل واضح بمجرد “إضافة ذاكرة تخزين مؤقت”. إنها في الأساس مجموعة من إستراتيجيات دورة حياة الموارد.
4. من المرجح بشكل خاص أن تصبح الصور الموجودة في القائمة مصدرًا للتأخير.
لأن سيناريو القائمة يلبي بشكل طبيعي العديد من الشروط عالية المخاطر:
- عدد كبير من الصور على نفس الشاشة
- تردد التمرير العالي
- تحدث عمليات إعادة الاستخدام وإعادة التدوير بشكل متكرر
- المستخدمون حساسون جدًا للإطارات المسقطة
إذا قمت أيضًا بهذه الأشياء في نفس الوقت في هذا السيناريو:
- فك تشفير الصورة
- حساب الحجم
- قص الزوايا الدائرية
- تراكب النص الغني
ثم يمكن بسهولة طغت الخيط الرئيسي أثناء التمرير.
ولذلك، فإن الجانب الأكثر أهمية في تحسين صورة القائمة هو:
هل يحدث هذا العمل على المسار الحرج المتداول؟
إذا حدث ذلك على المسار الحرج، بغض النظر عن مدى صغر التكلفة الإضافية، فسيتم تضخيمها من خلال التدحرج عالي التردد.
5. سوء فهم شائع جدًا: تُعزى جميع مشكلات الصورة إلى مشكلات في الشبكة
في المشاريع الحقيقية، كثيرًا ما يقول الناس:
- هناك العديد من الصور، لذلك فهي بطيئة
- الصورة بطيئة لذلك هناك مشكلة في الشبكة
غالبًا ما يكون هذا الخط من التفكير غير مكتمل.
لأن العديد من مشكلات الصور لا تزال موجودة حتى في ظل ظروف الشبكة القوية وضربات ذاكرة التخزين المؤقت. الأسباب هي:
- تم الحصول على الصورة ولكن لم يتم فك شفرتها مسبقا
- حجم الصورة غير مناسب وتم إجراء معالجة إضافية قبل عرضها.
- تتغير الحالة كثيرًا عند تمرير القائمة، مما يتسبب في عدد كبير من عمليات إعادة الرسم
لذا، في سؤال الصورة، “الاستحواذ على الموارد” ليس سوى جزء من الرابط. تكمن الصعوبة الحقيقية في ما إذا كانت كل خطوة من خطوات الارتباط تحدث في الوقت المناسب.
6. عند تحسين روابط الصور، أطرح بعض الأسئلة في أغلب الأحيان
إذا كنت سأقوم باستكشاف أخطاء أحد أسئلة الأداء المتعلقة بالصور وإصلاحها اليوم، فعادةً ما سأبدأ بطرح السؤال:
- المشكلة هي أن الشاشة الأولى بطيئة أو القائمة عالقة أو الذاكرة عالية.
- هل تبدأ الصورة في تحمل تكلفة معالجة عالية لحظة عرضها؟
- هل الصورة المحملة حاليًا بالحجم المناسب وليست تصغيرًا كبيرًا للصورة الأصلية؟
- ما الذي يضرب ذاكرة التخزين المؤقت؟ هل لم يتم الوصول إلى الصورة الأصلية أو الصورة المعالجة أو حجم المفتاح على الإطلاق؟
- هل يضع رابط الصورة الكثير من العمل على الموضوع الرئيسي؟
تعتبر هذه الأسئلة أكثر قيمة من “تجربة مكتبة أخرى” لأنها تقارب التكلفة الحقيقية بشكل مباشر.
7. الخلاصة: تحدث مشكلات الصورة بشكل متكرر. ظاهريًا، تبدو الصورة مميزة، لكنها في الواقع أقرب إليها وتمتد بشكل طبيعي إلى أبعاد متعددة للموارد.
ولكي أختصر الأمر أقول:
السبب وراء كون تحميل الصور وتخزينها مؤقتًا دائمًا منطقة ذات نسبة عالية من مشاكل الأداء هو أنه يبدو ظاهريًا أن “الصور صعبة”، ولكنها في الواقع أقرب إلى حقيقة أنها تتضمن أيضًا عرض النطاق الترددي ووحدة المعالجة المركزية والذاكرة وتوقيت العرض وإدارة دورة الحياة. بمجرد تصميم أي رابط بشكل غير معقول، سيتم تضخيم المشكلة بسرعة.
لذا فإن ما يجب أن يقوم به تحسين الصورة ليس فقط ذاكرة التخزين المؤقت، ولكن أيضًا:
- تحميل
- فك التشفير
- التكبير
- ذاكرة التخزين المؤقت
- عرض التوقيت
خذ هذا الرابط بأكمله معًا.
What to read next
Want more posts about iOS Performance Optimization?
Posts in the same category are usually the best next step for reading more on this topic.
View same categoryWant to keep following #iOS?
Tags are useful for related tools, specific problems, and similar troubleshooting notes.
View same tagWant to explore another direction?
If you are not sure what to read next, return to the homepage and start from categories, topics, or latest updates.
Back home