Site Listesinde Bekleyen Eklenti Güncellemelerini Rozetle Gösterme: Mevcut Önbelleği Kullanarak Durum Yönetimini Basitleştirme Yazılım

Site Listesinde Bekleyen Eklenti Güncellemelerini Rozetle Gösterme: Mevcut Önbelleği Kullanarak Durum Yönetimini Basitleştirme

Çapraz site güncelleme kontrolü sonrası her site için bekleyen eklenti sayısını rozetle göstermek için mevcut önbellek kullanıldı. Yeni API eklenmedi,

Bir müşteri, çapraz site güncelleme kontrolü çalıştırdıktan sonra her sitenin site listesinde bekleyen eklenti güncelleme sayısını göstermek istedi. Görsel olarak çözüm açıktı: 🔌 eklenti butonunun sağ üst köşesinde küçük kırmızı bir rozet, tıpkı okunmamış bildirim sayacı gibi. Ancak asıl zorluk verinin nereden geleceğiydi. Yeni bir API uç noktası ve 'site başına bekleyen sayısı' için yeni bir önbellek eklemek mümkündü, ancak bu state yönetimini iki katına çıkaracaktı. Oysa zaten bu bilgiyi bilen bir önbellek vardı: çapraz site güncelleme panosu önbelleği. Bu nedenle mevcut önbellek üzerinden gitmeye karar verildi.

Çapraz site güncelleme panosu (önceki makalede bahsedilen 24.5 saniyelik sessizliği önbellek-ilk tasarımla ortadan kaldıran yapı), her sitenin bekleyen eklentilerini _updatesDashState adlı localStorage destekli bir state'te tutuyordu. Bu state'in yapısı basitti: siteler dizisi, her site için site_id ve eklenti listesi, toplam bekleyen sayısı ve yüklenme zamanı. Site_id ile arama yapıp plugins.length alarak rozet sayısı elde edilebiliyordu. Yeni API veya önbellek gerekmiyordu. Çapraz site panosunu besleyen veri, aynı zamanda site listesi rozetini de besliyordu.

State eklememenin avantajları sessiz ama gerçek: Bakım çalışması _updatesDashState'i geçersiz kıldığında rozet otomatik olarak kaybolur (senkronizasyon kodu yazmaya gerek yok). TTL (başlangıçta 7 gün, sonra kısmi geçersiz kılma ile 30 güne çıkarıldı) mevcut tasarımdan devralınır. Rozet ve altta yatan sayı asla uyuşmazlık yaşamaz çünkü ikinci bir kopya yoktur. Her yeni UI elemanı için yeni bir uç nokta oluşturma cazibesine karşı kuralımız şu: Mevcut state cevap veriyorsa, daha fazlasını ekleme.

Sonuç ve Değerlendirme

Rozeti eklemek için helper fonksiyonlar kullanıldı. _getPendingPluginCountForSite, site_id'ye göre bekleyen eklenti sayısını döndürür (null = kontrol edilmemiş, rozet gösterilmez). _attachPendingPluginCountBadge ise butona rozeti ekler. Sayı 0 veya null ise rozet gösterilmez, 99'dan büyükse '99+' olarak kısaltılır. Butona position: relative eklenmeli, aksi takdirde absolute konumlu rozet ekranda kaybolur. Ayrıca, tek site kontrolü yapıldığında da aynı önbellek güncellenir, böylece rozet anında yenilenir. Must-use ve dropin eklentileri hariç tutulur, çünkü bunlar standart WordPress güncelleme akışına girmez ve 'güncelleme var' rozeti gösterip güncelleme butonunun çalışmaması hatasına yol açar.

Paylaş: