ಆಂಡ್ರಾಯ್ಡ್ ಆ್ಯಪ್ ಸ್ಟಾರ್ಟ್ಅಪ್ಗಾಗಿ ಪ್ರೊಫೈಲ್-ಮಾರ್ಗದರ್ಶಿತ ಆಪ್ಟಿಮೈಸೇಶನ್ (Profile-Guided Optimization for Android App Startup)
ನಾವು ನಮ್ಮ ಆಂಡ್ರಾಯ್ಡ್ ಕೋಲ್ಡ್ ಸ್ಟಾರ್ಟ್ (cold start) ಸಮಯವನ್ನು 1.2s ನಿಂದ 380ms ಗೆ ಇಳಿಸಿದ್ದೇವೆ.
ಹೆಚ್ಚಿನ ಆ್ಯಪ್ಗಳು ಮೊದಲ ಬಾರಿ ಚಾಲನೆಯಾದಾಗ ಅತ್ಯಂತ ನಿಧಾನವಾದ ಕಂಪಿಲೇಶನ್ ಮೋಡ್ನಲ್ಲಿ (compilation mode) ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತವೆ. ಬಳಕೆದಾರರು ನಿಮ್ಮ ಆ್ಯಪ್ ಅನ್ನು ಮೊದಲ ಬಾರಿಗೆ ಇನ್ಸ್ಟಾಲ್ ಮಾಡಿದಾಗ ಆಂಡ್ರಾಯ್ಡ್ "interpret-only" ಮೋಡ್ ಅನ್ನು ಬಳಸುತ್ತದೆ. ಇದು ನಿಮ್ಮ ಸ್ಟಾರ್ಟ್ಅಪ್ ಅನ್ನು ನಿಧಾನಗೊಳಿಸುತ್ತದೆ. ಸಿಸ್ಟಮ್ ನಂತರದ ಸಮಯದಲ್ಲಿ ಐಡಲ್ (idle) ಸಮಯದಲ್ಲಿ ಮಾತ್ರ ಕೋಡ್ ಅನ್ನು ಆಪ್ಟಿಮೈಸ್ ಮಾಡುತ್ತದೆ.
ನೀವು ಮೂರು ಹಂತಗಳ ಪೈಪ್ಲೈನ್ ಬಳಸಿ ಇದನ್ನು ಸರಿಪಡಿಸಬಹುದು.
Baseline Profiles ರಚಿಸಿ ಬೇಸ್ಲೈನ್ ಪ್ರೊಫೈಲ್ಗಳು ಇನ್ಸ್ಟಾಲ್ ಮಾಡುವ ಸಮಯದಲ್ಲಿ ಯಾವ ಕ್ಲಾಸ್ಗಳನ್ನು ಕಂಪಿಲೈ ಮಾಡಬೇಕೆಂದು ಸಿಸ್ಟಮ್ಗೆ ತಿಳಿಸುತ್ತವೆ. ನಿಮ್ಮ CI ಪೈಪ್ಲೈನ್ನಲ್ಲಿ ಇವುಗಳನ್ನು ರಚಿಸಲು Macrobenchmark ಬಳಸಿ. ನಮ್ಮ ಪ್ರೊಫೈಲ್ಗಳು ಕೇವಲ 12% ಮೆಥಡ್ಗಳನ್ನು ಒಳಗೊಂಡಿದ್ದವು, ಆದರೆ 94% ಸ್ಟಾರ್ಟ್ಅಪ್ ಸಮಯವನ್ನು ನಿರ್ವಹಿಸಿದವು.
DEX ಲೇಔಟ್ ರಿಯೋಡರ್ (DEX Layout Reordering) ಸಕ್ರಿಯಗೊಳಿಸಿ ಇದು ನಿಮ್ಮ Gradle properties ನಲ್ಲಿರುವ ಒಂದು ಸಾಲಿನ ಬದಲಾವಣೆ. ಇದು ನಿಮ್ಮ DEX ಫೈಲ್ನಲ್ಲಿ ಸ್ಟಾರ್ಟ್ಅಪ್ ಕ್ಲಾಸ್ಗಳನ್ನು ಒಟ್ಟಿಗೆ ಗುಂಪು ಮಾಡಲು R8 ಗೆ ಸೂಚಿಸುತ್ತದೆ. ಇದು ಪೇಜ್ ಫಾಲ್ಟ್ಗಳನ್ನು (page faults) 30% ರಿಂದ 50% ರಷ್ಟು ಕಡಿಮೆ ಮಾಡುತ್ತದೆ. ಕ್ಲಾಸ್ಗಳು ಒಟ್ಟಿಗೆ ಇದ್ದಾಗ, ಸಿಸ್ಟಮ್ ಡಿಸ್ಕ್ನಿಂದ ಕಡಿಮೆ ಅನಗತ್ಯ ಡೇಟಾವನ್ನು ಲೋಡ್ ಮಾಡುತ್ತದೆ.
ಕ್ಲೌಡ್ ಪ್ರೊಫೈಲ್ಗಳನ್ನು (Cloud Profiles) ಬಳಸಿ Google Play ಬಳಕೆದಾರರಿಂದ ಪ್ರೊಫೈಲ್ಗಳನ್ನು ಸಂಗ್ರಹಿಸುತ್ತದೆ ಮತ್ತು ಅವುಗಳನ್ನು ಹೊಸ ಇನ್ಸ್ಟಾಲ್ಗಳಿಗೆ ಕಳುಹಿಸುತ್ತದೆ. ಇದು ನಿಮ್ಮ ವೇಗದ ಹೆಚ್ಚಳವನ್ನು ಮತ್ತಷ್ಟು ವೃದ್ಧಿಸುತ್ತದೆ.
ನಮ್ಮ ಪರೀಕ್ಷೆಯ ಫಲಿತಾಂಶಗಳು:
- ಪ್ರೊಫೈಲ್ ಇಲ್ಲದೆ: 1,204ms ಕೋಲ್ಡ್ ಸ್ಟಾರ್ಟ್
- ಕೇವಲ Baseline Profile: 620ms ಕೋಲ್ಡ್ ಸ್ಟಾರ್ಟ್
- Baseline + DEX reorder: 445ms ಕೋಲ್ಡ್ ಸ್ಟಾರ್ಟ್
- Baseline + DEX reorder + Cloud: 380ms ಕೋಲ್ಡ್ ಸ್ಟಾರ್ಟ್
ನಿಮ್ಮ ವರ್ಕ್ಫ್ಲೋಗಾಗಿ ಪ್ರಮುಖ ಸಲಹೆಗಳು:
- ಪ್ರತಿ ರಿಲೀಸ್ಗಾಗಿ CI ನಲ್ಲಿ ಪ್ರೊಫೈಲ್ಗಳನ್ನು ರಚಿಸಿ. ಹಳೆಯ (stale) ಪ್ರೊಫೈಲ್ಗಳು ಕಾರ್ಯಕ್ಷಮತೆಯ ನಷ್ಟಕ್ಕೆ ಕಾರಣವಾಗುತ್ತವೆ.
- R8 ರನ್ ಆದ ನಂತರ ಪ್ರೊಫೈಲ್ಗಳನ್ನು ಮರು-ರಚಿಸಿ. R8 ನಿಮ್ಮ ಕೋಡ್ ರಚನೆಯನ್ನು ಬದಲಾಯಿಸುತ್ತದೆ.
- Macrobenchmark ನಲ್ಲಿ "Partial" ಕಂಪಿಲೇಶನ್ ಮೋಡ್ ಬಳಸಿ. "Full" ಮೋಡ್ ನೈಜ ಬಳಕೆದಾರರ ಅನುಭವವನ್ನು ಪ್ರತಿಬಿಂಬಿಸದ ತಪ್ಪು ಫಲಿತಾಂಶಗಳನ್ನು ನೀಡುತ್ತದೆ.
- ವಿವಿಧ ಆಂಡ್ರಾಯ್ಡ್ ಆವೃತ್ತಿಗಳಲ್ಲಿ ಪರೀಕ್ಷಿಸಿ. ಹಳೆಯ ಮತ್ತು ಹೊಸ API ಮಟ್ಟಗಳ ನಡುವೆ ಕಾರ್ಯಕ್ಷಮತೆಯ ಲಾಭಗಳು ವ್ಯತ್ಯಾಸವಾಗುತ್ತವೆ.
ವೇಗವಾದ ಆ್ಯಪ್ಗಳನ್ನು ನಿರ್ಮಿಸಲು ಈ ಪದರಗಳನ್ನು ಒಂದರ ಮೇಲೊಂದು ಜೋಡಿಸಿ.
ಮೂಲ: https://dev.to/software_mvp-factory/profile-guided-optimization-for-android-app-startup-2i7a