1. Холодный старт (начать с нуля)
Три этапа холодного запуска
1.1 Перед выполнением основной функции
- Загрузить исполняемый файл (файл mach-o)
- Загрузите библиотеку динамической компоновки, выполните настройку указателя перебазирования и привязку символа.
- Обработка инициализации среды выполнения Objc, включая регистрацию классов, связанных с Objc, регистрацию категорий и проверку уникальности селектора.
- Инициализация, включая выполнение метода +load(), вызовы функций, измененные атрибутом((конструктором)), и создание статических глобальных переменных C++.
Оптимизация
- Уменьшите динамическую загрузку библиотеки . Каждая библиотека сама по себе имеет зависимости. Apple рекомендует использовать меньше динамических библиотек и пытаться объединить несколько динамических библиотек при использовании большого количества динамических библиотек. Что касается количества, Apple рекомендует использовать до 6 несистемных динамических библиотек.
Используемые динамические библиотеки включают карту AMap Gaode, диаграмму Charts, UMSocial Alliance.
Удалить неиспользуемый iflyMSC iFlytek Voice
- Уменьшите загрузку классов или методов, которые не будут использоваться после запуска.
1. Организуйте логику в AppDelegate.m , удалите неиспользуемые классы и методы и сократите время компиляции при запуске.
2. Отменить печать журнала отходов NSSLog.
- Содержимое метода +load() может быть выполнено после завершения рендеринга первого экрана или заменено методом +initialize() . Потому что в методе +load() операция замены метода во время выполнения приведет к потреблению 4 миллисекунд. Не стоит недооценивать эти 4 миллисекунды. Немногое складывается. Выполнение метода +load() будет оказывать все большее влияние на скорость запуска.
- Контролируйте количество глобальных переменных C++
Удалите неиспользуемые определения макросов и другие глобальные переменные.
1.2 После выполнения основной функции
В основном относится к началу выполнения функции main() и выполнению методов, связанных с рендерингом первого экрана, в методе DidFinishLaunchingWithOptions Appdelegate .
- Операции чтения и записи файлов конфигурации, необходимые для инициализации первого экрана.
- Чтение больших данных из списка первого экрана
- Множество вычислений для рендеринга выше сгиба.
Оптимизация
Функционально разобраться, какие функции инициализации необходимы для отрисовки первого экрана, какие необходимы для запуска приложения, а какие необходимо инициализировать только тогда, когда соответствующая функция начнет использоваться. Разобравшись, разложите эти функции инициализации по соответствующим этапам.
Приложение запускает необходимые функции инициализации:
Настройки платформы Umeng, настройки Amap, push-уведомление системы регистрации, пользовательская анимация запуска LaunchAnimation , обнаружение обновлений версий, запрос разрешений функций с сервера
Функция инициализации требуется только тогда, когда соответствующая функция начинает использоваться:
Внутренняя страница инструкций Руководство , статус входа в систему CheckLogin , запланированная задача всплывающего окна собрания в реальном времени, запланированная задача загрузки местоположения в реальном времени, длинное соединение через сокет-сообщение, отправка регистрации на сервер, локальное уведомление
1.3 Рендеринг первого экрана завершен
Начинается, когда рендеринг завершен, и заканчивается, когда заканчивается область действия метода DidFinishLaunchingWithOptions .
Оптимизация
- Оптимизация функционального уровня:
после начала выполнения функции main() и до завершения рендеринга первого экрана обрабатываются только операции, связанные с первым экраном. Инициализация других служб, не относящихся к первому экрану, мониторинг регистрации, чтение файла конфигурации и т. д. все это делается после завершения рендеринга первого экрана. - Оптимизация на уровне метода
проверяет, какие трудоемкие методы находятся в основном потоке, до завершения рендеринга первого экрана, а также задерживает или асинхронно выполняет ненужные трудоемкие методы. Обычно трудоемкий метод в основном возникает при расчете большого объема данных.Специфической производительностью является загрузка, редактирование и хранение ресурсов, таких как изображения и файлы.
Когда выполняется анимация входа в систему, асинхронное выполнение запрашивает результат содержимого версии с сервера Apple и автоматически выполняет вход.
2. Горячий старт
- Приложение находится в памяти и работает в фоновом режиме. Нажмите значок еще раз, чтобы войти в приложение.
3. Методы мониторинга запуска приложения.
- Регулярно записывайте стек вызовов методов в основном потоке и рассчитывайте затраты времени каждого метода за определенный период времени.
- Подключите метод objc_msgSend , чтобы понять время выполнения всех методов .