K Kibo 入手

サードパーティ製キーボードが最初の一回だけ重いのはなぜか

キーボード拡張はiOSが必要になったときに起動し、閉じた時点で終了させる別プロセスです。そのセッションで最初に表示されるときだけ起動処理の分を負担し、二回目以降はそれを省くため、その差が引っかかりとして感じられます。

そのセッションで最初に表示されるとき、キーボードはプロセスとして起動されるところから始まります。二回目以降はその作業の大半を省けるので、差が「重い」と感じられます。

キーボードは必要になったときに起動される別プロセス

キーボードのAppは実際には二つのものでできています。ホーム画面にあるApp本体と、その中に同梱されたキーボード拡張です。拡張は、入力しているAppの一部でも、それをインストールしたApp本体の一部でもありません。独立したプロセスであり、iOSは入力欄が要求したときにだけ起動し、閉じるとまた終了させます。

そのためコールドスタートでは、キーが一つ描かれる前に実際の作業が発生します。

同じセッションで二回目に入力欄をタップしたときは、その多くがすでに片付いています。プロセスがまだ生きていることもあり、直前に使われた拡張のためにシステムが保持しているものもあるからです。

コールドスタートが特に重くなる場面

キーボード側にできること

制御できる部分は、ほぼすべて「最初の一枚が描かれるまでにどれだけの作業をするか」に集約されます。素材を小さく数を少なく保つこと。画像で作られた絵文字のグリッドは展開にも保持にもコストがかかりますが、同じパネルを文字で組めばほとんどゼロになります。写真は拡張の外で一度だけ縮小しておくこと。取り込み時にApp本体側でリサイズしておけば、いちばん都合の悪い瞬間にフル解像度の写真を展開せずに済みます。演出は画像の連番ではなくコードで描くこと。そして、選択中のテーマと音、有効にしている言語だけを読み込み、最初の一枚に必要のない処理は誰も待っていないその後ろへ回すことです。

どのキーボードにもできないこと

温まったまま待機することはできません。バックグラウンドで動くことも、常駐させてほしいとiOSに要求することも、入力欄がタップされる前に先行起動することも、メモリ上限を引き上げることもできません。これらはシステム側の決定です。

初回表示で一瞬待たされるのは正常で、構造上避けられません。正常でないのは、その間が毎回繰り返されることと、表示されてすぐ消えることです。どちらも起動コストではなくメモリ上限を指しています。

よくある質問

最初の一回だけ遅く、その後は問題ないのはなぜですか。

キーボード拡張は、入力欄が必要としたときにiOSが起動する別プロセスだからです。最初の表示ではプロセスの起動、設定と素材の読み込み、キーの配置までを負担します。二回目以降は済んでいる作業を使い回せます。

iPhoneを再起動したあとに遅くなるのはなぜですか。

再起動でファイルのキャッシュが空になるため、フレームワークや素材をストレージから読み直すことになります。さらにその最初の起動は、同じタイミングでシステムが立ち上げている処理とも資源を奪い合います。

キーボードが表示された直後に消えます。これも同じ原因ですか。

違います。起動が遅いのではなく、メモリ上限を超えて拡張が終了させられている状態です。バックグラウンドのAppを閉じることと、写真を背景に設定している場合はそれを外すことで収まることが多いです。

キーボードを事前に読み込んで常に速くしておくことはできますか。

できません。キーボード拡張はバックグラウンドで実行することも、自分を常駐させることもできません。常に温まっているキーボードとは、入力していない間も動き続けているキーボードのことだからです。

自分のキーボードで試す

Kiboは、本物のメカニカルキー音とテーマ、RGBバックライト効果を備えたiPhone向けの無料カスタムキーボードです。アカウント登録も広告もなく、フルアクセスをオフにしたままでも使えます。

App Storeでダウンロード

関連ガイド

ガイド一覧