Bir ekranı yavaşlatmadan okumak
Yakala, oku, şifrele, dizine ekle — yaklaşık saniyenin üçte biri, bir çekirdeğin yaklaşık yüzde biri. Buraya getiren üç karar.
Bir ekran geçmişinin bedeli her aralıkta, sürekli, arka planda, siz başka bir şey yapmaya çalışırken ödenir. Dolayısıyla hiçe yuvarlanması gerekir. ScreenCaptureKit ile bir kare yakalamak, metnini Vision ile okumak, şifrelemek, yazmak ve dizine eklemek yaklaşık saniyenin üçte biri ve tek bir çekirdeğin yaklaşık yüzde biri kadar sürer.
En ucuz iş, yapılmayan iştir
Bu bütçenin büyük kısmı hiç harcanmaz, çünkü aralıkların çoğu değişiklik denetiminde biter: bir önceki kareyle yapılan, neredeyse hiçbir maliyeti olmayan ve burada saklanmaya değer bir şey olmadığına karar veren bir karşılaştırma. Bu denetimin nasıl çalıştığı ayrı bir notun konusu.
Aynı metin iki kez okunmaz
Pahalı adım metin tanımadır. Bir kare, kelimelerinin değişmiş olamayacağı kadar bir öncekine yakınsa LockTime, Vision'ı yeniden çalıştırmak yerine önceki metni taşır. Bir ekranı okumak yaklaşık 70 ms sürer. Okunmuş olanı yeniden kullanmak yaklaşık 1 ms.
Arayüz kitaplığı beklemez
20.000 ekran görüntülük bir kitaplıkta bir günü listelemek yaklaşık 1 milisaniye sürer. Saniyede bir kaydedilmiş tam bir günün an şeridini yerleştirmek — 86.400 an — 5,4 ms sürer; tek bir 16 ms'lik karenin içine rahatça sığar. Kitaplık ister bir hafta ister bir yıl tutsun, pencere ekranın tazeleme hızında kalır.
İki makine için tek sürüm
LockTime baştan sona Swift ve SwiftUI'dir ve Apple Silicon ile Intel için tek bir evrensel sürüm olarak yayımlanır. Bu kısıtın dişleri var. İsteğe bağlı anlam araması gömülerini 16 bitlik kayan noktalı sayılar olarak saklar ve bunları Swift'te yazmanın akla ilk gelen yolu Float16'dır — ki yalnızca arm64'te bulunur. Öyle yazıldığında uygulama Apple Silicon bir Mac'te derlenir ve testlerini geçer, Intel için ise hiç derlenemez. Depo bunun yerine vImage üzerinden IEEE binary16 yazar ve bir test, öyle kalsın diye bayt düzenini sabitler.
Bunların hiçbiri görünmez, mesele de bu. Çalıştığını fark etmemelisiniz.