서드파티 키보드가 처음 열릴 때만 굼뜬 이유
한 세션에서 처음 올라오는 키보드는 프로세스를 새로 띄우는 비용을 그대로 치릅니다. 그다음부터는 그 작업 대부분을 건너뛰기 때문에 차이가 느껴집니다. 그 시작 단계에서 실제로 무슨 일이 벌어지는지 정리했습니다.
한 세션에서 서드파티 키보드가 처음 올라올 때는 프로세스를 새로 띄우는 작업을 전부 치르고, 그 뒤의 등장들은 그 대부분을 건너뜁니다. 지연이라고 부르는 것은 이 둘의 차이입니다. 키보드가 느린 것이 아니라 켜지는 중입니다.
키보드 확장은 필요할 때 실행되는 별도의 프로세스입니다
키보드 앱은 사실 두 가지입니다. 홈 화면에 있는 앱 본체와, 그 안에 담겨 배포되는 키보드 확장입니다. 확장은 글자를 치고 있는 앱의 일부도, 본체 앱의 일부도 아닌 자기만의 프로세스입니다. iOS는 입력란이 키보드를 요구할 때만 실행했다가 키보드가 사라지면 종료합니다. 그래서 콜드 스타트에는 키 한 칸이 그려지기 전에 해야 할 일이 있습니다.
- 프로세스가 만들어지고 확장의 코드와 프레임워크가 메모리에 올라갑니다.
- 고른 테마, 키 소리, 조명 효과, 켜 둔 입력 언어 같은 설정을 읽습니다.
- 테마가 쓰는 이미지, 소리 파일, 현재 언어의 자판 배열 데이터를 불러와 해독합니다.
- 화면 너비와 방향에 맞춰 배열을 계산하고 키 하나하나를 만들어 자리에 놓습니다.
같은 세션에서 두 번째로 입력란을 누를 때는 이 대부분이 이미 정리되어 있습니다. 프로세스가 아직 살아 있을 수도 있고, 시스템이 남겨 둔 것들 덕분에 같은 작업을 다시 하지 않아도 됩니다.
유난히 오래 걸리는 경우
- 재시동 직후. 캐시에 남은 것이 없어 저장 장치에서 다시 읽어야 하고, 갓 켠 기기가 처리 중인 다른 작업과도 경쟁합니다.
- 앱 업데이트 직후. 예전 코드를 기준으로 쌓아 둔 것들이 무효가 되고 처음 실행될 때 다시 검사를 거칩니다. 사실상 처음 설치한 직후와 같습니다.
- 메모리가 빠듯할 때. 확장에는 일반 앱보다 훨씬 낮은 메모리 상한이 걸려 있어서, 기기가 메모리에 쫓기면 더 자주 내려가고 등장할 때마다 콜드 스타트가 됩니다.
줄일 수 있는 부분과 없는 부분
줄일 수 있는 쪽은 거의 전부 첫 화면이 그려지기 전에 얼마나 많은 일을 하느냐입니다. 이미지로 만든 이모지 격자는 해독에도 메모리에도 비용이 크지만, 같은 화면을 글자로 구성하면 그 비용이 거의 사라집니다. 사진 배경은 본체 앱에서 가져올 때 한 번 줄여 두면 확장이 원본을 여는 일이 없어집니다. 고른 테마와 소리, 켜 둔 언어만 읽고 나머지는 첫 화면 뒤로 미루는 것도 같습니다.
반대로 어떤 키보드도 할 수 없는 것은 미리 켜져 있는 일입니다. 백그라운드에서 돌 수도, 메모리에 남겨 달라고 요청할 수도, 메모리 상한을 올릴 수도 없습니다. 모든 서드파티 키보드가 같은 조건 안에 있습니다.
첫 한 박자와 구분해야 하는 증상
첫 등장에서 잠깐 걸리는 것은 구조에서 나오는 정상적인 부분입니다. 반면 그 지연이 등장할 때마다 반복되거나 키보드가 떴다가 곧바로 사라진다면 시작 비용이 아니라 메모리 상한 쪽 이야기입니다. 배경에 띄워 둔 앱을 정리해 보면 두 경우를 구분할 수 있습니다.
자주 묻는 질문
처음 한 번만 느리고 그 뒤로는 괜찮은 이유가 무엇인가요?
키보드 확장은 입력란이 필요로 할 때 iOS가 실행하는 별도의 프로세스입니다. 첫 등장은 프로세스 실행, 설정 읽기, 자원 불러오기, 키 배치를 전부 치르고 뒤이은 등장은 이미 끝난 작업을 다시 쓰기 때문입니다.
재시동한 직후에 더 오래 걸리는 이유는 무엇인가요?
캐시가 비워져 자원을 저장 장치에서 다시 읽어야 하고, 그 첫 실행이 기기가 동시에 시작하는 다른 작업들과 경쟁하기 때문입니다.
키보드가 떴다가 바로 사라지는 것도 같은 문제인가요?
아닙니다. 그 증상은 확장이 메모리 상한을 넘겨 종료되는 경우이지 시작이 느린 것이 아닙니다. 배경에 띄워 둔 앱을 정리하고 사진 배경을 꺼 두면 대체로 나아집니다.
키보드를 미리 올려 두어 항상 빠르게 만들 수는 없나요?
없습니다. 키보드 확장은 백그라운드에서 돌 수도, 자기를 메모리에 남겨 둘 수도 없습니다. 늘 켜져 있는 키보드는 입력하지 않는 동안에도 돌아가는 키보드이고, iOS는 그것을 허용하지 않습니다.
내 키보드에서 직접 써보기
Kibo는 진짜 기계식 키음과 다양한 테마, RGB 백라이트 효과를 갖춘 iPhone용 무료 키보드입니다. 계정도 광고도 없고, 전체 접근 권한을 꺼둔 상태에서도 작동합니다.