Почему сторонняя клавиатура тормозит при первом открытии
Расширение — отдельный процесс, который iOS запускает по требованию и выгружает, когда клавиатура скрывается: первое появление за сеанс оплачивает запуск, за который следующие уже не платят.
Вы касаетесь текстового поля, клавиатура берёт паузу, а дальше весь день появляется мгновенно. Это не сбой и не только вопрос качества кода: это форма самой вещи.
Клавиатура — отдельный процесс
В iOS сторонняя клавиатура — не часть приложения, в котором вы печатаете. Это расширение: отдельный процесс со своей песочницей, который система запускает при получении фокуса полем и завершает, когда клавиатура остаётся скрытой какое-то время.
При первом появлении вы оплачиваете полный запуск: загрузку, инициализацию, сборку интерфейса. При втором процесс ещё жив, и остаётся только показать его.
Почему после перезагрузки хуже
После перезагрузки телефона ничего не прогрето: ни кэшей, ни уже загруженных библиотек. Тот же эффект после обновления приложения клавиатуры, потому что системе нужно заново прочитать расширение.
Заметно и при нехватке памяти. iOS завершает расширения раньше приложений, когда нужно место, и клавиатура — одно из первых, что уходит. Следующий вызов снова холодный.
Что может сделать клавиатура
- Оставаться маленькой. Чем меньше грузится при запуске, тем короче холодный старт. Крупные библиотеки шрифтов, сетевые вызовы при запуске и тяжёлые фреймворки оплачиваются именно здесь.
- Не ждать сеть. Клавиатура, которая хочет что-то подгрузить при старте, зависит от соединения. Без сети задержка превращается в ожидание.
- Восстанавливать состояние дёшево. Оформление, звук и настройки нужно читать как небольшие значения, а не вычислять.
Чего клавиатура **не может** — оставаться в памяти постоянно. Это решает iOS, и никакое приложение не может это навязать. Кто обещает «больше никаких задержек», обещает не своё.
Что можете сделать вы
- Откройте приложение-контейнер один раз после установки и после каждого обновления. Первый вызов клавиатуры обычно становится быстрее.
- Закройте приложения, занимающие много памяти, если клавиатура часто перезапускается.
- Не судите о клавиатуре по самому первому открытию. Второе и третье показывают, какова она в обиходе.
Разница между хорошо и плохо сделанной клавиатурой не в наличии холодного старта — он есть всегда, — а в его длительности и в том, одинаков ли он без соединения.
Частые вопросы
Это из-за моего телефона?
Лишь отчасти. Старые устройства запускают процессы медленнее, но холодный старт есть на любом iPhone: он следствие того, что клавиатуры — расширения.
Почему снова медленно после обновления?
Потому что системе нужно заново прочитать расширение. Первый вызов после этого — снова полный запуск.
Помогает ли удалить и добавить клавиатуру заново?
Почти никогда. Это лишь сбрасывает регистрацию и не меняет поведение при запуске. Открыть один раз приложение-контейнер обычно полезнее.
Попробуйте на своей клавиатуре
Kibo — бесплатная клавиатура для iPhone с настоящим механическим звуком клавиш, набором тем и эффектами RGB-подсветки. Без аккаунта, без рекламы, и работает даже с выключенным полным доступом.