Performance Tips نصائح الاداء

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

هناك نوعين من القواعد الاساسية لكتابة كود فعال  :
  • لا تقم بعمل لا تحتاج الى القيام به 
  • لا تقم بتخصيص الذاكرة اذا كنت تستطيع تجنب ذلك 
 تعد واحدة من اصعب المشاكل التي ستواجهها هو ان من المؤكد ان تطبيقك يعمل على انواع متعددة من الاجهزة واصدارات مختلفة حيث يمكن ان يكون هناك فارق في السرعة من جهاز الاخر وان التطبيق الذي يعمل عندك بسرعة ليس دائما هو الافضل

لضمان اداء التطبيق بشكل جيد عبر مجموعة من الاجهزة تأكد من ان الشفرة فعالة علي جميع المستويات وقم بتحسين الاداء بشكل فعال

  1. تجنب انشاء كائنات غير ضرورية 


انشاء الكائن غير مجاني لان تخصيص الذاكرة يكون اكثر تكلفة من عدم تخصيص الذاكرة
ولذلك تجنب انشاء كائنات لا تحتاج اليها وهذه بعض الامثلة :

- اذا كانت هناك fun تعيد string و يضاف الي StringBuffer دائما وانت متاكد من ذلك غير الدالة والحق string مباشرتا الى StringBuffer  بدلا من انشاء كائن موقت يرجع القيمه من الدالة

- اذا كان هناك بيانات مدخلة وتريد التعامل معها  احتفظ بالجزء الذي تريدة بدلا من انشاء نسخة كاملة عنها

- في الحقيقة انشاء 2 من المصفوفات من int اكشر كفاءة من انشاء مصفوفة من الكائنات (int,int)

-  تجنب انشاء كائنات مؤقتة يقلل من القمامة داخل التطبيق ويحسن من تجربة المستخدم

  2. استخدام static 


اذا لا تجتاج الوصول الى الكائن يمكن ان تعرفة على انه static وهذا يزيد من السرعه 20% تقريبا
 
 static final int x = 10

 3.  استخدام محسن لجمل loop


مثال :
static class Foo {
    int mSplat;
}
Foo[] mArray = ...
public void zero() {
    int sum = 0;
    for (int i = 0; i < mArray.length; ++i) {
        sum += mArray[i].mSplat;
    }
}
public void one() {
    int sum = 0;
    Foo[] localArray = mArray;
    int len = localArray.length;

    for (int i = 0; i < len; ++i) {
        sum += localArray[i].mSplat;
    }
}
public void two() {
    int sum = 0;
    for (Foo a : mArray) {
        sum += a.mSplat;
    }
} 
zero : ابطأ لان حصول على طول مره كل دورة
one : اسرع من الاول لان الحساب يكون في متغيرات محلية
two : اسرع للاجهزه بدون jit ولا يمكن تمييزه عن one للاجهزه التي تحتوي jit

 4. تجنب استخدام floating-point 


كقاعدة عامة هي ابطىء 2* من الاعداد الصحيحه int في نظام اندرويد

  5. معرفه واستخدام المكاتب


 قد تكون المكتبات اسرع بكثير من الكود الخاص بنا

 6. القياس دائما 

قبل البدء في التحسين تاكد من وجود مشكلة تحتاج الى حلها وتاكد من انك تستطيع قياس ادائك الحالي بدقة لانك لن تستطيع قياس الفائدة بعد التحسين

تعليقات

المشاركات الشائعة من هذه المدونة

مقدمة عن Dagger 2

local function

Architecture patterns in Android part 1 - معماريه كتابه الكود في الاندرويد جزء 1