Android App Startup માટે Profile-Guided Optimization
અમે અમારો Android cold start 1.2s થી ઘટાડીને 380ms કર્યો.
મોટાભાગની એપ્સ પ્રથમ લોન્ચ દરમિયાન સૌથી ધીમા compilation mode પર ચાલે છે. જ્યારે વપરાશકર્તા તમારી એપ પહેલીવાર ઇન્સ્ટોલ કરે છે, ત્યારે Android "interpret-only" mode નો ઉપયોગ કરે છે. આના કારણે તમારું startup ધીમું બને છે. સિસ્ટમ પછીથી માત્ર idle time દરમિયાન જ કોડને optimize કરે છે.
તમે આ ત્રણ-પગલાંની pipeline દ્વારા આ સમસ્યા સુધારી શકો છો.
Baseline Profiles જનરેટ કરો Baseline Profiles સિસ્ટમને જણાવે છે કે ઇન્સ્ટોલ કરતી વખતે કઈ classes ને compile કરવી. તમારા CI pipeline માં આ બનાવવા માટે Macrobenchmark નો ઉપયોગ કરો. અમારા profiles એ 12% methods ને આવરી લીધા હતા પરંતુ 94% startup time ને હેન્ડલ કર્યા હતા.
DEX Layout Reordering સક્ષમ કરો આ તમારી Gradle properties માં માત્ર એક લાઇન છે. તે R8 ને તમારી DEX file માં startup classes ને એકસાથે ગ્રુપ કરવા માટે કહે છે. આનાથી page faults માં 30% થી 50% નો ઘટાડો થાય છે. જ્યારે classes એકસાથે રહે છે, ત્યારે સિસ્ટમ disk માંથી ઓછો બિનજરૂરી ડેટા લોડ કરે છે.
Cloud Profiles નો ઉપયોગ કરો Google Play વપરાશકર્તાઓ પાસેથી profiles એકત્રિત કરે છે અને તેને નવા ઇન્સ્ટોલ્સમાં મોકલે છે. આનાથી તમારી ઝડપમાં વધુ વધારો થાય છે.
અમારા ટેસ્ટિંગના પરિણામો:
- No profile: 1,204ms cold start
- Baseline Profile ફક્ત: 620ms cold start
- Baseline + DEX reorder: 445ms cold start
- Baseline + DEX reorder + Cloud: 380ms cold start
તમારા workflow માટે મહત્વની ટિપ્સ:
- દરેક release માટે CI માં profiles જનરેટ કરો. Stale profiles ને કારણે performance માં ઘટાડો થઈ શકે છે.
- R8 ચલાવ્યા પછી profiles ફરીથી જનરેટ કરો. R8 તમારા કોડનું સ્ટ્રક્ચર બદલી નાખે છે.
- Macrobenchmark માં "Partial" compilation mode નો ઉપયોગ કરો. "Full" mode ખોટા પરિણામો આપે છે જે વાસ્તવિક વપરાશકર્તાના અનુભવને પ્રતિબિંબિત કરતા નથી.
- વિવિધ Android versions પર ટેસ્ટ કરો. જૂના અને નવા API levels વચ્ચે performance માં તફાવત હોઈ શકે છે.
ઝડપી એપ્સ બનાવવા માટે આ લેયર્સનો ઉપયોગ કરો.
Source: https://dev.to/software_mvp-factory/profile-guided-optimization-for-android-app-startup-2i7a