yazılım,c# ve domates kabuğu
Dünya düzdür. »

responsive != performance

  12/09/12 22:28, by ertan, Categories: Yazılım

Herşeyden önce biraz kelime anlamlarını deşelim. Yazılım dünyasında "responsive" hızlı cevap veren demek, "performance" ise çalışma hızı demek.

Bizim yazılımcılarımız genelde bu 2 kelimeyi sürekli karşılaştırırlar, hızlı çalışan her uygulama responsive'dir gibi yanlış bir anlayış var.

Öncelikle uğraştığınız yazılımın hızlı çalışması gibi bir hedef aslında yanlış bir hedefdir. Uygulamanın hızlı çalışması için harcadığınız zamanda aslında boşuna bir uğraştır. Asıl hedef uygulamanın "responsive" olmalıdır.

Bu ne demek örnek vereyim. Mesela bir mail programı düşünün, mail'i gönder dediğinizde mail'in karşı tarafa ne kadar hızlı gittiğinin aslında hiç bir önemi yoktur, kullanıcı için "gönder" bütonuna bastıktan sonra pencerenin kapanıyor olması yeterlidir, e-mail'in sonraki dakikalar içinde arka planda gönderiliyor olması ile programı kullanan kişi ilgilenmez.

Başka bir örnek olarak bir arama ekranı düşünün. Arama ile ilgili kullanıcının istediği sonuçların ekrana kısa sürede gelmesidir. Bunu arama fonksiyonunu hızlı çalışsın diye zaman harcayarak çözmeye çalışmak çoğu zaman anlamsızdır.

Örneğin 100 kayıt içinde çok hızlı arayan bir algoritma, 1 milyon kayıt için siz ne yaparsanız yapın yavaş çalışacaktır. Asıl çözüm arama yapılırken kayıt bulundukça kullanıcının önüne getirirken, paralel olarak aramayı devam ettirmektir. Eğer düzgün bir sıralama mantığı var ise kullanıcı ilk 100 kayıt içinde zaten aradığını bulacaktır, eğer bulamıyor ise sonraki yüzbin tane kayıda tek tek bakan bir kullanıcı zaten yoktur, vazgeçip başka bir şekilde aramaya çalışacaktır.

Bunu yapabilmenin yollarından birisi (pek sevmesemde) listelerde sayfalama yapmaktır ama genelde pratikte yapılan "Client Paging" denilen tüm uyan kayıtları bulduktan sonra içinden ilgili sayfaya gelecek 50 kayıdı seçip kullanıcının ekranında göstermektir. Yani her durumda 1 milyon kayıt bulunana kadar kullanıcı beklemek zorundadır. Eğer bir sonraki sayfayı görmek istediğinde aynı işlemler tekrar tekrar yapılır, bu yüzden "yavaş" çalışan bir programınız olur. Bunun nasıl yapılacağını çoğu yazılımcı bilir ama genelde bir çeşit tembellik yüzünden erteleriz. Bilmeyenler var ise SQL Server için "TOP", "ROWNUMBER", MySQL için "Limit" anahtar kelimeleri yardımcı olacaktır.

Eğer yeni bir uygulamaya başlıyorsanız veritabanı erişimi için mutlaka ek bir (data access layer) şeyler kullanmanızı ve bu sorunu "yılanın başı küçük iken" çözmenizi tavsiye ederim zira daha sonraları bu devasa bir kartopu haline gelebilir.

Algı

Şimdi öncelikle bir kullanıcı için "responsive" algısını düzgün kurmak için temel şeylerden bahsedeyim. Kullanıcının yaptığı her bir işlem için 3 çeşit zaman limiti var. Kolay anlaşılması için google benzeri bir arama ekranı olduğunu hayal edin, verdiğim örneklerde buna uygun olacak.

Geri bildirim (Feedback)

Etrafımızda olanları algıladığımız süre yaklaşık 0.1 saniyelik zamandır. Örneğin hareketli bir animasyon yaratmak için en az 0.1sn içerisinde bir hareket olması gerekir. Bunu filmlerde çoğunlukla görürsünüz, bu süreyi aşan (eski) filmlerde görüntü kesik kesik hareket ediyor gözükür, ne olduğunu algılamak için özel çaba sarfederiz.

Örneğin; arama kutusu içinde klavye'den bir tuşa basılması ve basılan karakterin ekranda gözükmesi.

Örneğin; mouse ile ekrandaki "ara" bütona tıkladığında bütonun şekil değiştirmesi.

Sizde bu tipdeki işlemler için bu süre içerisinde ilk tepkiyi vermeniz gereklidir, eğer bu süreyi aşarsanız kullanıcının koordinasyonu bozulur. Bu koordinasyonu bozduğunuzda kullanıcı kendini rahat hissetmez ve bir problem olduğunu düşünerek yaptığı işi yarıda keser ve konsantrasyonu bozulur.

Genelde bu konuları dert etmenize gerek yoktur, işletim sistemi yada browser'lar bu konuları sizin yerinize hallederler. Bazı uygulamalarda denk gelirseniz "KeyUp/Down" yada "MouseMove" gibi eventlar içinde bir şeyler yapan uygulamalarda bu tür problemler görülür.

Örneğin arama kutusunda kullanıcı textbox üzerinde klavyeden bir şeyler yazdığında aramayı hemen başlatmak gibi. Çok iddalı değilseniz böyle bir şey yapmaktan kaçının, eğer mecbur kalıyorsanız yapılacak işi ayrı bir Thread içinde yapmanız bu dertlerden biraz uzak kalmanızı sağlar.

Kabul (Acknowledge)

Etrafımızda olan olaylara 1sn içerisinde tepki veririz. Örneğin araç sürerken önümüze bir şey çıktığında yaklaşık 1sn içerisinde frene basmaya karar veririz.

Google örneği için; "ara" bütonuna basıldığında en fazla 1sn içerisinde ekranda "arama yapılıyor"/"yükleniyor" lafının çıkmalıdır.

Sizde yapılan işi yapmaya başladığınıza dair 1 saniye içerisinde bir cevap vermelisiniz. Bu süreyi aştığınızda çoğunlukla "olmadı galiba" kararını vererek bırakır veya yaptığı işi tekrar etmeyi dener.

Eğer yapacağınız iş 1sn'den daha uzun ise sizde bu şekilde bir "işleniyor","yükleniyor" benzeri bir ilerleme raporu verirseniz kullanan kişinin kafasının karışmasına engel olabilirsiniz. Bu tür geri bildirimler için genelde ekrandaki durum mesajı görüntülendikten sonra asıl iş başka bir Thread içerisinde yapılır ve belirli aralıklarla thread'in ne aşamada olduğunu görüntülersiniz.

Buna en iyi örneklerden birisi Windows içinde dosya kopyalama penceresidir. Siz dosyayı kopyala dediğinizde işlem başlatılır ve asıl kopyalama işi başka bir thread içerisinde yapılır, pencere sadece kopyalamanın ne kadar süresi kaldığını ekranda göstermekle ilgilenir. Eğer bu pencerenin ekrana gelmesi 1sn'den uzun sürer ise "bir şeyler yanlış" hissine kapılırız.

Yapacağınız her iş için bu şekilde bir mesaj çıkarmanıza gerek gerek yoktur, bunu sadece 1sn'yi geçme ihtimali olan işler için yapmanız yeterlidir. Uygulamayı yazan kişi olarak bu ihtimali bilmek sizin işiniz.

Cevap (Response)

Beynimiz yaklaşık her 10sn içerisinde yapacağı işleri tekrar gözden geçirip düzenler ve bir sonraki yapılacak işe odaklanır.

Google örneği için; ilk arama sonucunun görüntülendiği sayfa denilebilir.

Genel kural olarak kabul edilebecek şekilde; kullanıcının bir işin yapılması için sabredebildiği en uzun 10 saniyedir denilebilir.

Her ne iş yapıyorsanız yapın, bu süre içerisinde verilen işin bitmesi gereklidir. Bu süreyi geçtiğinizde kullanıcı bu işi bırakarak, başka bir şey yapmaya odaklanır. (Örneğin yaptığı işi bırakıp, Facebook'a girmeye karar verir)

Geliştirdiğiniz uygulama ne olursa olsun yukardakilere uyduğunuzda yaptığınız işte ne kadar çok kayıt veya karmaşık olursa olsun "hızlı çalışan" görünen "responsive" yazılımlar üretebilirsiniz.

Kullanıcılar yavaş çalışan programlardan değil "responsive" olmayan programlardan şikayet eder.

No feedback yet

Leave a comment


Your email address will not be revealed on this site.
  
(For my next comment on this site)
(Allow users to contact me through a message form -- Your email will not be revealed!)
Text Renderers:
 

©2017 by Ertan Tike

Contact | Help | b2evo skins by Asevo | multi-blog | web hosting company