Решение для оптимизации производительности iOS — оптимизация запуска

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  , чтобы понять время выполнения всех методов .

Guess you like

Origin blog.csdn.net/baidu_33298752/article/details/130947135
ios