ஆண்ட்ராய்டு ஆப் தொடக்கத்திற்கான (Startup) ப்ரொஃபைல் வழிகாட்டியிலான உகப்பாக்கம் (Profile-Guided Optimization)
எங்களது ஆண்ட்ராய்டு cold start நேரத்தை 1.2 வினாடிகளிலிருந்து 380ms ஆகக் குறைத்துள்ளோம்.
பெரும்பாலான செயலிகள் முதல் முறை இயங்கும்போது மிக மெதுவான கம்பைலேஷன் (compilation) முறையில் இயங்குகின்றன. ஒரு பயனர் உங்கள் செயலியை முதன்முதலில் நிறுவும் போது, ஆண்ட்ராய்டு "interpret-only" முறையைப் பயன்படுத்துகிறது. இது உங்கள் செயலியின் தொடக்க நேரத்தை மெதுவாக்குகிறது. சிஸ்டம் (System) பின்னர் காலியாக இருக்கும் நேரங்களில் (idle time) மட்டுமே குறியீட்டை (code) உகப்பாக்கம் (optimize) செய்யும்.
இதை மூன்று படிநிலைகளைக் கொண்ட ஒரு வழிமுறையைப் (pipeline) பயன்படுத்தி சரிசெய்யலாம்.
Baseline Profiles-ஐ உருவாக்குதல் Baseline Profiles என்பது செயலியை நிறுவும் நேரத்திலேயே எந்தெந்த கிளாஸ்களை (classes) கம்பைல் செய்ய வேண்டும் என்று சிஸ்டத்திற்குத் தெரிவிக்கும். உங்கள் CI pipeline-இல் இவற்றை உருவாக்க Macrobenchmark-ஐப் பயன்படுத்தவும். எங்களது ப்ரொஃபைல்கள் 12% மெத்தட்களை (methods) மட்டுமே உள்ளடக்கியிருந்தன, ஆனால் 94% தொடக்க நேரத்தைக் கையாண்டன.
DEX Layout Reordering-ஐச் செயல்படுத்துதல் இது உங்கள் Gradle properties-இல் ஒரு வரி மட்டுமே. இது உங்கள் DEX கோப்பில் தொடக்க கிளாஸ்களை (startup classes) ஒன்றாகக் குழுவாக்க R8-இடம் கூறுகிறது. இது page faults-ஐ 30% முதல் 50% வரை குறைக்கிறது. கிளாஸ்கள் ஒன்றாக இருக்கும்போது, சிஸ்டம் டிஸ்க்கிலிருந்து (disk) தேவையற்ற தரவுகளைக் குறைவாகவே ஏற்றும்.
Cloud Profiles-ஐப் பயன்படுத்துதல் Google Play பயனர்களிடமிருந்து ப்ரொஃபைல்களைச் சேகரித்து, புதிய இன்ஸ்டால் செயல்களுக்கு அனுப்புகிறது. இது உங்கள் வேக அதிகரிப்பை மேலும் பலமடங்கு உயர்த்துகிறது.
எங்களது சோதனையின் முடிவுகள்:
- ப்ரொஃபைல் இல்லை: 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-இல் ப்ரொஃபைல்களை உருவாக்கவும். பழைய (stale) ப்ரொஃபைல்கள் செயல்திறன் இழப்பை ஏற்படுத்தும்.
- R8 இயங்கிய பிறகு ப்ரொஃபைல்களை மீண்டும் உருவாக்கவும். R8 உங்கள் குறியீட்டு அமைப்பை (code structure) மாற்றும்.
- Macrobenchmark-இல் "Partial" கம்பைலேஷன் முறையைப் பயன்படுத்தவும். "Full" முறை உண்மையான பயனர் அனுபவத்தைப் பிரதிபலிக்காத போலியான முடிவுகளைத் தரும்.
- வெவ்வேறு ஆண்ட்ராய்டு பதிப்புகளில் சோதிக்கவும். பழைய மற்றும் புதிய API நிலைகளுக்கு இடையே செயல்திறன் அதிகரிப்பு மாறுபடும்.
வேகமான செயலிகளை உருவாக்க இந்த அடுக்குகளை (layers) ஒன்றிணைக்கவும்.
ஆதாரம்: https://dev.to/software_mvp-factory/profile-guided-optimization-for-android-app-startup-2i7a