Konu Başlıkları
Yükleniyor...

Progress Göstergesini Süreye Değil Ölçülebilirliğe Göre Seçin

Spinner mı Yüzde Çubuğu mu? Bekleme Göstergesi Kararı

Yavaş bir işlemi hızlandıramıyorsanız yapılacak şey bekleyişi görünür kılmaktır. Ama hangi göstergeyi koyacağınız sorusunun cevabı, çoğu yerde yazıldığı gibi işlemin kaç saniye sürdüğü değil. Asıl ayrım, ilerlemeyi gerçekten ölçüp ölçemediğinizde.

Ölçebiliyor musunuz, ölçemiyor musunuz?

Gösterge rehberlerinin neredeyse tamamı süre tablosu verir: iki saniyenin altında hiçbir şey göstermeyin, iki ile dokuz saniye arasında spinner koyun, on saniyeyi geçiyorsa yüzde çubuğuna geçin. Bu tablonun pratikte çalışmayan tarafı şu: yüzde çubuğu koyabilmek için işin toplamını bilmeniz gerekir, ve zaten o toplamı biliyorsanız süreyi de kabaca tahmin edebiliyorsunuz demektir. Yani tablo, cevabı soruya dolaylı yoldan geri koyuyor.

Kararı tek soruya indirin: payda var mı? Dosya yüklerken byte sayısı belli, toplu güncellemede kayıt sayısı belli, çok adımlı bir sihirbazda adım sayısı belli. Bunların hepsinde yüzde ya da sayaç gösterilebilir. Buna karşılık ne zaman döneceği belirsiz bir sorgu, üçüncü parti bir ödeme servisinden gelecek yanıt ya da arka planda kuyruğa atılmış bir iş için elinizde payda yoktur. Oralarda gösterilecek şey belirsiz bir animasyondur, süre ne olursa olsun.

Uydurulmuş yüzde, göstergenin kendisini bozar

Payda yokken yüzde isteyen bir tasarım, geliştiriciyi tahmin uydurmaya zorlar. Ortaya çıkan şey tanıdıktır: çubuk hızla yüzde doksana gelir, orada durur, kalan onluk dilim işlemin gerçek süresinin yarısını yer. Kullanıcı bunu bir iki kez yaşadıktan sonra çubuğa bakmayı bırakır, çünkü çubuk artık bilgi taşımıyor.

Belirsiz bir spinner'ı, uydurulmuş bir yüzdeden daha güvenilir bulurum. Spinner az şey söyler ama söylediği doğrudur. Uzun ve ölçülemeyen işlemlerde spinner'ı yalnız bırakmak istemiyorsanız, yüzde yerine dürüst olabilen başka bilgiler var:

  • Aşama adı: "Dosya alındı, şimdi doğrulanıyor". Kaçıncı aşamada olduğunuzu bilmek, yüzde bilmemekten daha iyi.
  • Toplamı olmayan sayaç: "412 kayıt işlendi". Artan bir sayı, sistemin takılmadığını kanıtlar.
  • Geçen süre. Çirkin ama yalan değil, ve uzun işlemlerde kullanıcının sayfayı kapatıp kapatmama kararını verebilmesine yetiyor.

İlk geri bildirim gösterge değildir

Tıklamanın kaydedildiğini gösteren şey ile işlemin ilerleyişini gösteren şey aynı bileşen değil. Birincisi anında olmak zorunda: buton pasifleşir, etiketi değişir, formun bir yeri kilitlenir. Bu, ağdan dönecek hiçbir cevabı beklemez, tamamen istemci tarafında olur.

Yükleme animasyonunu ise hemen göstermeyin. İsteklerin çoğu üç yüz milisaniyede dönüyorsa, her tıklamada ekrana düşüp hemen kaybolan bir spinner arayüzü tiktikli gösterir. Animasyonu dört yüz milisaniye gecikmeyle açın, bir kez açtıysanız da en az beş yüz milisaniye ekranda tutun. Hızlı isteklerde kullanıcı hiç spinner görmez, yavaş olanlarda da gösterge yanıp sönmez.

"İki kez tıklamayın" uyarısı yanlış katmanda duruyor

Ödeme ve sipariş formlarında hâlâ görülen bu uyarı, arayüz sorunu gibi sunulan bir sunucu sorunudur. Butonu pasifleştirmek ve spinner göstermek çift gönderim olasılığını düşürür, sıfırlamaz: bağlantı kopar, kullanıcı sayfayı yeniler, geri tuşuna basıp formu yeniden gönderir.

Çözüm istekte taşınan bir idempotency anahtarı. Formu açarken ürettiğiniz tekil bir değeri gönderiyle beraber yollarsınız, sunucu o anahtarı daha önce gördüyse yeni kayıt açmaz, ilk işlemin sonucunu döner. Üç dört satırlık bir kontrol ve bir tekil indeks, ve uyarı metnine gerek kalmaz. Bunu kurduktan sonra progress göstergesi asıl işini yapar: kullanıcıya ne olduğunu anlatır, veri bütünlüğünü korumaya çalışmaz.

Beklemeyi kısaltamıyorsanız bölün

Tek bir uzun bekleyiş, toplamı aynı olan birkaç kısa bekleyişten daha ağır gelir. Toplu bir içe aktarma işini dosya doğrulama, kayıt eşleme ve yazma diye üçe bölüp her aşamayı adıyla göstermek, tek bir yüzde çubuğundan daha iyi iş çıkarır; çünkü kullanıcı ilerlemeyi görmekle kalmaz, nerede takıldığını da görür. Takılma anında bu ayrım hata mesajını da kurtarır: "işlem başarısız" yerine "kayıt eşleme aşamasında durdu" yazabilirsiniz.