Pasty v0.8.4-beta
Pasty v0.8.4-beta — 速さが、戻ってきた。
ノッチに触れた瞬間、すっとパネルが降りてくる。 カードをクリックした瞬間、ぱっとハイライトが出て、貼り付けが終わる。 v0.7 系の「気持ちよさ」を取り戻すために、Pasty の体感に効く 7 箇所を一気に直しました。
⚡️ ノッチ表示遅延を根治
起動直後にノッチへマウスを乗せても、パネルがすぐ降りてくるようになりました。原因は 4 つあり、全部直してあります。
- SwiftUI body の初回評価を prewarm で先払い (M-3): 起動時に NotchHover と Strip パネルをいったん画面外で
layoutSubtreeIfNeededまで走らせ、初回 hover のときに body 評価が走らないようにしました。 - 起動シーケンスを 2 段に分割 (M-4): hotkey 登録・notch hover・prewarm・Accessibility 許可だけを即時に走らせ、Sparkle / Onboarding / What's New / StackPill / マイグレーションのバックフィルは 0.5 秒後にずらしました。cold-start のメインスレッドが空くので、prewarm が他のタスクに邪魔されません。
- hot zone を 24px に拡大 + 50ms grace 期間 (M-7): ノッチなしの Mac だと判定領域が 4px しかなく、マウスがちょっと外れると
mouseExitedで即キャンセルされていた問題を修正。24px に拡大し、加えて mouseExited 後 50ms は cancelShow を遅延させるようにしました。マウスがちらりと離れて即戻る程度ではキャンセルされません。 entity_uuidバックフィルを lazy 化 (M-2): v0.8.0 で追加した全行 UPDATE のマイグレーションが cold-start のクリティカルパスに乗っていたのを、起動完了後に 500 行ずつバッチで走るバックグラウンド処理に分離。WHERE entity_uuid IS NULLガードで新規 insert との衝突も防止しています。10k 行履歴で 500ms+ 短縮します。
⚡️ クリック反応遅延を根治
Strip カードをクリックしてから「光って消えて貼り付く」までの体感が、v0.7 級に戻りました。
simultaneousGestureを撤去して手動 double-click 検知に置換 (M-1): v0.8.1 で「snappy」と謳って入れたsimultaneousGesture(TapGesture(count:2)) + count:1の二段重ねが、実は SwiftUI 内部の double-tap 排他制御で count=1 の発火を ~250ms 遅延 させていました。今は.onTapGesture(count: 1)一本に戻し、CACurrentMediaTime()の差分でNSEvent.doubleClickIntervalを見て手動でダブルクリックを判定します。mouseUp 直後に即発火します。.animation(value: isCursor)削除 +withAnimation化 (M-5): カーソル移動時に StripCard の.animation(.spring, value: isCursor)が、ForEach 配下の 20 枚すべてで spring + scale + offset + shadow を同時に再合成していたのを撤廃。代わりにSelectionModel側でwithAnimation(.easeOut(duration: 0.12))で囲み、差分のあった 2 枚 (抜けたカード + 選ばれたカード) だけが animate するようにしました。- 1 フレームのハイライト視覚フィードバック (M-10): クリックから貼り付けまでが速すぎて「光らずに消える」現象が起きていたので、
handleDoubleTapでcursorIndexを立てた直後に 16.67ms (1 frame at 60Hz) だけ待ってから dismiss + paste するようにしました。Web のbutton:activeを 100ms 維持するのと同じ理屈で、「タップした」確証が視覚的に返ります。
🏎 起動が速く
M-4 (init 2 段化) と M-2 (backfill lazy 化) の合わせ技で、cold-start のメインスレッド占有時間が 150〜500ms 短縮 されました。
✨ 体感、1〜2 倍速い
7 箇所の修正が積み上がった結果、ノッチ表示は v0.7 級の体感即時、クリック反応は 100ms 以内のハイライト + 貼付に戻りました。何より、起動直後の最初の 1 操作が「あ、戻ってきた」と感じられるはずです。
リリース詳細: https://github.com/IvyGain/Pasty/releases/tag/v0.8.4-beta
GitHub Releases で詳細を見る ↗