Geliştiricilerden
İstemci Temizleme Çalışmaları

Bu yıl istemcinin altyapısına bazı iyileştirmeler getiriyoruz. Amacımız istemciyi düzeltmek.

GeliştiricilerdenYAZARLARRiot Cactopus, Riot Sparango, Riot Id, Riot A Huevo
  • Seçim panoya kopyalandı

ÖZET: Önümüzdeki altı ay boyunca LoL İstemcisi'nin altyapısına bazı değişiklikler ve iyileştirmeler getireceğiz. İlerleyişimizi takip etmek adına iki ana istemci performans ölçütü için belli başlı hedeflerimizi paylaşacağız: istemci önyükleme süresi (istemcinin başlatılması ne kadar sürüyor) ve şampiyon seçimi kesinleştirme süresi. Bu ölçütleri daha iyi hale getirirken ayrıca hata ve çökme gibi sorunları da ele alacağız. Kısacası amacımız istemciyi düzeltmek.

"İstemciyi ne zaman düzelteceksin, Rito?"

Bu aslında sık sık duyduğumuz bir soru. Doğrusu istemci şu anda pek iyi durumda değil. Çok fazla hata ve gecikmenin (özellikle de şampiyon seçimi sırasında) yanı sıra bellek sızıntısı, çökme, donma ve bunlar gibi pek çok diğer sorun var. Geçmişte de istemciye yönelik bazı çalışmalar gerçekleştirsek de sıkıntılar hâlâ sürüyor.

Bu yüzden farklı bir şey denemek istiyoruz.

Bugün planlarımız hakkında üstünkörü bilgiler vermek yerine, belli başlı performans hedeflerinden ve önümüzdeki altı ay boyunca getirmeyi planladığımız değişikliklerin ayrıntılarından bahsedeceğiz.

Gelin, önce son zamanlarda yaptığımız bazı performans iyileştirmelerinden konuşalım ve gelecekteki çalışmalarımızda da bize rehber olacak bazı rakamları inceleyelim.

Sayılarla İstemci

Geçen yıl istemcinin başlatılma ve tamamen işlevsel hale gelme (diğer adıyla önyükleme) süresi gibi temel performans göstergelerini takip etmemizi sağlayan bazı araçları istemciye ekledik.

Önyüklemenin nispeten zayıf bilgisayarlara sahip oyuncular için bile en fazla 15 saniye sürmesini istiyoruz. Fakat gözlemlerimiz sonucunda önyüklemenin bazı oyuncular için bu sürenin üç, hatta dört katı sürdüğünü öğrendik.

Takip ettiğimiz bir diğer ölçütse "şampiyon seçimi kesinleşme" süresi. Bu, istemcinin siz düğmeye tıkladıktan sonra şampiyonu seçtiğinizi algılama süresi. Aşağıdaki grafikte 9.22 Yaması (turuncu çizgi) ve 10.2 Yaması (mavi çizgi) sırasında şampiyon seçimi kesinleştirme için sistemin ortalama tepki sürelerini görebilirsiniz. Kesinleştirme yanıt süreleri milisaniye cinsinden hesaplanıyor.

Champ_Select_Lock-in_Time.jpg

Grafikte de görülebileceği gibi şampiyon seçimi tepki süreleri oyuncudan oyuncuya çok büyük farklılıklar gösterebiliyor. Tabii istemci performansı bilgisayarınızın ne kadar hızlı olduğuna bağlı. Mesela kesinleştirmeyi 200 milisaniyenin altında tamamlıyorsanız, bilgisayarınız %10'luk bölümde ve tepki süreleriniz oyuncuların %90'ına kıyasla daha kısa demek. Benzer şekilde tepki süreniz 800 milisaniyenin üstündeyse %90'lık bölümdesiniz ve istemciniz oyuncuların %90'ına kıyasla daha yavaş çalışıyor.

Gördüğünüz gibi kesinleştirme süreleri 10.2 Yaması'nda 9.22'ye kıyasla çok daha iyi hale gelmiş. Bu gelişmenin en önemli sebebi de 9.23 Yaması'nda istemcinin kullandığı Chromium versiyonunu güncellememiz. Bu çalışma bize epey hız kazandırsa da pek çoğunuz için istemcinin hâlâ fazla yavaş olduğunu düşünüyoruz.

Bununla ne kastettiğimizi anlamak için gelin bu belli grupların şampiyon seçimi kesinleştirmelerindeki tepki sürelerinin zaman içinde nasıl değiştiğine ayrıntılı şekilde göz atalım.

Champ_Select_Percentile.jpg

Görebildiğiniz üzere mavi çizgi %50'lik bölümü, yani "ortalama" oyuncuyu temsil ediyor. Buradaki ortalama oyuncunun tepki sürelerindeki düşüş güzel bir şey. Yine de ortalama oyuncular için şampiyon seçimi tepki sürelerinin 2020'nin başlarından itibaren 300 ms civarında seyrettiğini görüyoruz. Bu çok kötü olmamakla birlikte epey fark edilir bir gecikme.

Oyuncuların %70'lik bölümü (yeşil çizgi) de son dönemde büyük iyileşmelerle karşılaştı; ancak şampiyon seçimi tepki süreleri 450 ms civarında. Bu neredeyse yarım saniyelik bir gecikme anlamına geliyor ve açıkçası ortalama bir bilgisayardan beklediğimiz performansın çok altında.

Son olarak %90'lık bölümün (turuncu çizgi) içler acısı haline geçiyoruz. Bu oyuncuların diğer çoğu oyuncudan daha yüksek tepki süreleriyle karşılaşması sürpriz değil. Yine de 800 ms fazla yüksek bir değer ve bu oyuncular Chromium güncellemesinden sonra bile aynı noktada.

Şimdi gelin bu sorunları çözmek için neler yapacağımızdan bahsedelim.

ÖNCELİK VERECEĞİMİZ KONULAR

Şu anda istemci performansına dair öncelik verdiğimiz iki uzun vadeli hedefimiz var:

  1. Önyükleme süresini %90'lık bölümdeki oyuncular için bile 15 saniye civarına çekmek istiyoruz. Bu, mevcut duruma kıyasla üç ila dört kat daha fazla hız demek.
  2. Şampiyon seçimi kesinleştirme tepki sürelerini %90'lık bölümdeki oyuncular için 100 ms değerine çekmek. Bu da şu anki durumdan sekiz kat daha hızlı olması anlamına geliyor.

Ne düşündüğünüzü biliyoruz. Peki hatalara ne olacak? Çökmeler ve bellek sızıntılarına ne gibi çareler üreteceksiniz?

Bu iki şeye öncelik verilmesinin sebebi ne? Buradaki sebep, önyükleme ve şampiyon seçimi kesinleştirme sürelerine müdahale ettiğimiz esnada istemcinin temelini oluşturan bazı yönlerini de temizleyip yeniden şekillendirecek olmamız. Bu hedeflere ulaşmaya çalıştığımız sırada hataları, bellek sızıntılarını ve çökmeleri de ortadan kaldıracağımızı düşünüyoruz.

Şampiyon seçimi ekranındaki "siyah ekran" hatası ve rün sayfalarının doğru şekilde kaydedilmemesi gibi sorunlar, süreç boyunca ortadan kaldırmak istediğimiz şeylere örnek olarak verilebilir. Tabii bu çalışmanın zaman alacağı konusunda da dürüst olmak istiyoruz. Şu anda bizi bu hedeflere önemli ölçüde yaklaştıracağına inandığımız altı aylık bir planımız var. Ancak uzun vadeli hedeflerimize ulaşmak muhtemelen daha fazla zaman alacak.

Ayrıca bunlar yalnızca birer hedef ve onlara ulaşamama ihtimalimiz de bulunuyor. Hedeflerimizi sizinle paylaşmamızın sebebiyse, istemciye olan güvenin yeniden sağlanabilmesi için daha önce hiç görülmemiş bir şeffaflık sergilememizin gerekmesi.


"Peki bunu tam olarak nasıl yapacaksınız?" diye sorduğunuzu duyar gibiyiz.

BUNU NASIL  YAPACAĞIZ?

Şimdilik uzun önyükleme sürelerine katkı yapan iki büyük yapısal sorunu tespit ettik. Bunların ilki, kodları istemcinin kullanabileceği parçalara ayırmamıza olanak tanıyan eklenti mimarimiz. Bu mimari, biz istemciye yeni işlevler ekledikçe şişti. İkinci sorunsa arayüzün üstüne kurulu olduğu Javascript altyapısını (Ember olarak biliniyor) yanlış kullanmamız.

Şu anda istemci çok fazla eklenti ve Ember uygulaması kullanıyor. Hatta istemcinin önyükleme işlemi esnasında 41 ayrı eklenti ve 16 uygulama çalıştırıyoruz. Bunların her birinin başlaması 100 ila 800 ms sürüyor. Bu da hiç iyi değil.

Planımız tüm bu eklenti ve uygulamaları daha az sayıda (ve teorik olarak daha verimli) eklenti ve uygulamalar altında birleştirmek. İlk olarak önyükleme esnasında başlatılanlara odaklanacağız; çünkü istemciye en büyük faydanın bu şekilde sağlanabileceğini düşünüyoruz.

1. AŞAMA: ÖNYÜKLEME

Şu anda pek çoğunuzun önyükleme işlemini tamamlaması 40 saniyeye kadar sürüyor. Eğer siz de bu oyuncular arasındaysanız bu deneyimin son derece yavaş ve sancılı olduğunu biliyorsunuzdur. Aynı durum, istemcinin çökmesi halinde onu yeniden başlatmanın daha da can sıkıcı olması anlamına geliyor.

Bildirimler, arkadaş listesi ve Koleksiyon sekmesi gibi pek çok istemci özelliği, önyükleme sırasında başlayan eklenti ve uygulamalara bağlı. Dolayısıyla uzun vadeli amacımız önyükleme süresini %90'lık bölümdeki oyuncular için 15 saniyeye çekmek olsa da bu sırada istemcinin farklı yönlerini etkileyen bazı hata ve verimsizlikleri de ortadan kaldıracağımızı düşünüyoruz.

Önyüklemeye odaklanacağımız birkaç ayın ardından hedeflerimize ne kadar yaklaşığımızı değerlendireceğiz. Muhtemelen baharın sonlarına doğru da dikkatimizi şampiyon seçimine kaydıracağız

2. AŞAMA: ŞAMPİYON SEÇİMİ

Şampiyon seçimi pek çok diğer eklentiyi ve Ember uygulamasını işin içine sokuyor. Biraz açmak gerekirse, şampiyon seçimi esnasında yaptığınız hemen hemen her şey yeni uygulamalar oluşturuyor. Şampiyon takas etmek iki tane oluşturuyor. Aynı durum sihirdar büyünüzü değiştirmek için de geçerli.

Aynı oturumda ne kadar uzun süre LoL oynarsanız bu uygulamalar da o kadar fazla yığılıyor ve sonunda giderek yavaşlayan bir deneyimle karşılaşıyorsunuz. Şampiyon seçimi esnasında gerçekleştirdiğiniz çoğu eylemin sunucularımızla haberleşme gerektirmesiyse sorunu daha da büyüterek tüm etkileşimlere daha fazla gecikme ekliyor.

Şampiyon seçimindeki asıl sorun, geri plandaki sistemlerimizin verileri yönetme şekliyle ilgili. Şampiyon seçiminin mevcut mimarisi, büyük miktarda önemli veriyi sistemlerimizden geçirmemize olanak tanıyor. Örneğin, Riot bir şampiyonu dereceli için devre dışı bıraktığında bu şampiyon neredeyse hemen ve değişiklik devreye sokulduğu anda şampiyon seçimi ekranında olanlar da dahil olmak üzere
tüm oyuncular için devre dışı kalıyor.

Bu gerçekten güçlü bir sistem olsa da çalışmak için büyük miktarda enerjiye ihtiyaç duyuyor. Mevcut sistemdeyse çok fazla gereksiz kontrol noktası ve darboğaz bulunuyor. Dolayısıyla çoğu zaman sadece ufacık bir giriş değiştiğinde bile tonlarca verinin yeniden oluşturulması gerekiyor. Bu da istemci deneyiminizi son derece kötü etkiliyor.

Bunu düzeltmek için şampiyon seçimi altyapımızın işleyişini baştan aşağı değiştirmemiz gerekecek. Şampiyon seçimi esnasında tüm verilerin sunucudan istemciye geçiş biçimini yeniden düzenleyeceğiz.

Ayrıca şampiyon seçimini daha da verimli hale getirebilecek iddialı ve uzun vadeli bazı hedeflerimiz daha var. Tüm istemciyi hiç eklenti kullanmayan tek bir Ember uygulaması altında toplamak da bunlar arasında. Ancak kısa vadede istemcinin hedeflenen değerlerde çalışmasını sağlamaya yetecek kadar değişikliğe gitmek istiyoruz. Bu değerleri yazımızın önceki bölümlerinde bulabilirsiniz.

Altı aylık çalışma tamamlandığında "iyi" bir duruma ne kadar yaklaşacağımızı kestirmek güç. Fakat bunun sonuna geldiğimizde muhtemelen büyük ölçüde ilerleme kaydedecek ve sonraki adımlarımızın ne olduğunu da keşfedeceğiz.

SONRAKİ ADIMLAR

Her birkaç ayda bir geliştirici bloglarımızla ilerlememizi sizinle paylaşacağız. Bu yazılarımızda performansa dair kesin rakamlar ve varsa projenin takvimine dair ayarlamalar göreceksiniz.

Bize şans dileyin! LoL oynamaya devam ettiğiniz için teşekkürler. Yakında görüşmek üzere.



  • Seçim panoya kopyalandı