Başarılı Örnekler

Instagram Direct mühendisleri, Jetpack Compose ile yapay zeka tabanlı kullanıcı arayüzü mimarisini nasıl oluşturdu ve temsilci oturumu başına jeton maliyetini %33 azalttı?

Okuma süresi: 11 dk.

Bu blog yayını Meta ekibiyle birlikte hazırlanmıştır

Instagram Direct, Instagram'ın temel platformlarından biridir ve her gün milyarlarca kullanıcı mesajını işler. Ekip, yıllar süren yinelemeler sonucunda eski Android View sisteminden mümkün olan her mikro optimizasyonu elde etti. Ancak, özellikle ekiplerin bildirimli kullanıcı arayüzü ve yapay zeka kod yazma desteği asistanlarını daha fazla kullanmaya başlamasıyla birlikte, yoğun şekilde optimize edilmiş eski bir yüzeyi korumak ve genişletmek önemli teknik borç ve mühendislik yükü oluşturuyor. 

Instagram Direct için Jetpack Compose'u kullanmaya başlamak, tipik bir kullanıcı arayüzü modernizasyonunun ötesine geçti. Ekip, orijinal uygulamadan % 50 daha küçük olan yapay zeka tabanlı bir kullanıcı arayüzü kod tabanı oluşturdu. Bu sayede yapay zeka temsilcisinin yürütme süresinde% 35 azalma, mühendis-temsilci etkileşimlerinde% 32 azalma ve jeton maliyetinde% 33 azalma elde edildi. Google ile yakın işbirliği içinde çalışan ekip, yüksek performans çıtasını korurken Jetpack Compose'u benimsedi. Meta ve Google, performans optimizasyonları sayesinde Compose'u yalnızca Instagram için değil, daha geniş Android geliştirici ekosistemi için de iyileştirdi.

Kod tabanını büyük ölçekte modernize etme

Yapay zeka, sektördeki mühendislerin günlük hayatının bir parçası haline geldi. Yapay zekayı Instagram gibi büyük ölçekli bir kod tabanına uygulamak, üretkenlikte gerçek kazanımlar sağlıyor. Instagram Direct ekibi daha iddialı bir hedef belirledi. Ekip, yapay zeka araçlarını mevcut koda yönlendirmek yerine kod tabanını ve mimarisini yapay zekaya özgü olacak şekilde yeniden tasarladı. Böylece yapay zekanın etkisini, yalnızca mevcut koda uyarlama yapmanın sağlayabileceğinden çok daha fazla artırdı.

Instagram Direct ekibi, yapay zekaya özgü bir kullanıcı arayüzü mimarisi oluşturmak için Jetpack Compose'u temel bileşen olarak seçti. Bildirim temelli yapısı sayesinde kodlar kısa, öngörülebilir ve yapısal olarak yapay zeka modellerinin daha kolay anlayabileceği şekilde olur. Ayrıca daha az yan etki, daha az örtük durum ve daha net bileşen sınırları vardır.

Jetpack Compose'a geçiş için dikkatli bir planlama gerekiyordu. Her gün yüz milyonlarca kişi Instagram'da mesaj gönderiyor. Bu nedenle, ekip altyapıyı yeniden tasarlarken geçişin kademeli ve sorunsuz olması, deneyimde hiçbir kesinti yaşanmaması gerekiyordu. Zorluğun boyutunu göstermek gerekirse: Bağımsız kullanıcı arayüzü bileşenleri, 160'tan fazla farklı durum permütasyonunda oluşturulabilir ve tek bir görüşme ekranı tek başına 200'den fazla farklı mesaj türünü işler.

Product Design 1.png

Bu boyuttaki bir kod tabanını Compose'a taşırken kolay yolu seçip Compose kullanıcı arayüzü bileşenlerini mevcut görünüm hiyerarşisine yerleştirmek cazip gelebilir. Kademeli bir geçiş sırasında aşamalı bir adım olarak bu tamamen geçerlidir. Ancak uzun vadede, Compose'u görünüm tabanlı bir kod tabanına entegre etmek zor olabilir. Yapay zeka araçları genellikle en kolay yolu seçer. Bildirimli ve zorunlu kullanıcı arayüzü kodunu karıştırırsanız yapay zeka bunları yanlış bir şekilde harmanlayarak küçük hatalara, teknik borçlara ve performans gerilemelerine neden olabilir. 

Yapay zekaya özgü bir kullanıcı arayüzü mimarisi oluşturma

Instagram ölçeğinde, bir dereceye kadar mimari soyutlama kaçınılmazdır ve uygulama büyüdükçe sürdürülebilirliğini sağlayan da budur. Her RecyclerView öğe türünün, onBind gibi olağan yaşam döngüsü kancalarını gösteren özel bir RecyclerViewItem temel sınıfının alt öğesi olarak modellendiği yaygın bir kalıbı ele alalım.

1. Örnek

class ChatItem(
  val features: FeatureFlagProvider
) : RecyclerViewItem<ComposeViewHolder, ChatUiState> {

  // Imperative context:
  // AI could often take the path of least resistance and generate a mutable
  // state here, dispatched outside the ChatUiState. This class survives
  // re-bindings and is shared across multiple items, ultimately leading to
  // unexpected, hard-to-reproduce bugs.
  var isPinned: Boolean = false

  override fun onBind(holder: ComposeViewHolder, uiState: ChatUiState) {
      // Imperative context
      val isPinnedChatsEnabled = features.isEnabled("pinned_chats_feature")

      // Declarative context
      holder.composeView.setContent {

        // Blending imperative and declarative contexts
        if (isPinnedChatsEnabled) {
          Button(onClick = { isPinned = !isPinned }) {
            Text(if (isPinned) "Unpin" else "Pin")
          }
        }
        
        ...
      }
  }
}


Yukarıdaki snippet'te iki sorun ortaya çıkıyor. İlk olarak isPinnedChatsEnabled işareti, zorunlu kodda okunur ve ardından bir Compose lambda'da yakalanır. Bu, paradigmalar arasında ince bir bağlantıdır. İkinci olarak, isPinned, ChatUiState yerine öğenin kendisinde değiştirilebilir bir alan olarak bulunur. Bu nedenle, RecyclerView satırlar arasında yeniden bağlama ve geri dönüşümden etkilenmez. Bu da sızıntılara ve yeniden üretilmesi zor hatalara neden olur.

Öğeye özel bir @Composable işlevi vererek kod temizlense bile aynı sorunlar devam eder.

2. Örnek

class ChatItem(
  val features: FeatureFlagProvider
) : ComposeRecyclerViewItem<ChatUiState> {

  // Imperative context
  val isPinnedChatsEnabled = features.isEnabled("pinned_chats_feature")
  var isPinned: Boolean = false

  // Declarative context
  @Composable
  override fun Content(uiState: ChatUiState) {

 
    // Blending imperative and declarative contexts
    if (isPinnedChatsEnabled) {
      Button(onClick = { isPinned = !isPinned }) {
        Text(if (isPinned) "Unpin" else "Pin")
      }
    }

    ...
  }
}

Bu basit bir örnek olsa da daha geniş bir sorunu gösteriyor: Yapay zekaya ne kadar az sınır verilirse zaman içinde ürettiği kodun kalitesi o kadar düşer. Önlemler ve beceriler yardımcı olur ancak tek başlarına yeterli değildir. Yapay zeka bir engelle karşılaştığında genellikle engeli aşmak için bu önlemleri ve becerileri devre dışı bırakır.

Kod tabanının yapay zeka dostu olması için iki pratik kurala uyması gerekir: 

  • Özel bağlama olan bağımlılığı en aza indirin. Yapay zeka temsilcisinin doğru bir değişiklik yapmak için daha fazla özel, kod tabanına özgü bilgiye ihtiyaç duyması, çıktısının kalitesini düşürür. Kod tabanı, bilinen en iyi uygulamalara ne kadar yakınsa yapay zeka sonuçları o kadar iyi olur.
  • Yapay zeka öncelikli bir kod tabanı kendi sınırlarını zorlamalıdır. Tasarım boşluklarını yapay zeka becerileriyle doldurmak ölçeklenebilir bir yöntem değildir. Bağlama yüklenen her beceri, jeton maliyetine neden olur ve temsilcinin performansını düşürebilir. Bunun yerine, mimarinin kendisi bu ağırlığı taşımalıdır. Yapay zeka ajanları doğal olarak en az direnç gösteren yolu seçer. Bu nedenle tasarım, bu yolun doğru ve yüksek kaliteli koda ulaşmasını sağlamalı, kötü tasarım kararlarını ifade etmeyi zor ve maliyetli hale getirmelidir.

Liste öğeleri kendi soyutlamalarıyla temsil edilebilir ancak bu durumda tüm Compose kodu kurucuda yer alır. Bu nedenle, sınıf üyelerine veya duruma erişemez ve tek bağımsız değişken kaynağı kurucudur. Bu, mevcut mimariye uygun şekilde düz bir @Composable işlevine eşdeğer olmasını sağlar.

3. Örnek

class ChatItem(
  val features: FeatureFlagProvider,
  val onPin: (Boolean) -> Unit,
) : ComposeItem<ChatUiState>(

 
   // Compose UI
   content = { uiState: ChatUiState ->
    val isPinnedChatsEnabled = features.isEnabled("pinned_chats_feature")

    if (isPinnedChatsEnabled) {
      Button(onClick = { onPin(!uiState.isPinned) }) {
        Text(if (uiState.isPinned) "Unpin" else "Pin")
      }
    }
    
    ...
  },
)

Bu boyutta bir kod tabanını taşımak çok büyük bir iştir. Uzun bir süre boyunca, Direct kullanıcı arayüzünün çoğunluğunu oluşturan yüzlerce kullanıcı arayüzü bileşeni, eski muadilleriyle birlikte var olmak zorunda kaldı ve her ikisi de paralel olarak sürdürüldü. Yapay zeka iş akışları, büyük miktarda kod yazma sürecini hızlandırarak bu paralel geçişi mümkün kıldı. Bu yaklaşım sayesinde Direct ekibi, taşıma işlemini rekor sürede tamamladı. Bu süreçte, her gün milyonlarca kullanıcının deneyimini iyileştiren özellikler sunmaya devam eden ekibin geri kalanı da kesintiye uğramadı.

Birden fazla mühendis, taşıma işlemi sırasında oluşturulan yeniden kullanılabilir beceriler ve kurallardan oluşan ortak bir bilgi bankasında kendi yapay zeka ajanlarını çalıştırdı. Bu sayede, her mühendisin iş akışlarını ve en iyi uygulamaları yeniden keşfetmesi gerekmedi ve ekip genelinde uyum sağlandı. Ekip, her platformda taşıma işlemini aşağıdaki aşamalarda gerçekleştirdi:

  • Tüm Compose kodlarını yapay zeka ile yazın.
  • Kullanıcı arayüzü herkese açık bir testte gerçek kullanıcılara sunulana kadar uç durumları ele alarak ve performans boşluklarını kapatarak arayüzü iyileştirin.

Çalışmayı ekran başına iki aşamaya bölmek, bir mühendisin tüm yüzeyde hızlıca ilerlemesine olanak tanır. Böylece mimariyi ve zorlu uç durumları önceden belirleyebilir. Bu temel oluşturulduktan sonra diğerleri, teknik kararları kendileri vermek için durmadan kullanıcı arayüzünü üretime hazır hale getirmeye odaklanabilir ve genel geçişi hızlı tutabilir.

Taşıma işleminin sonuçları, yaklaşımın doğruluğunu kanıtladı. Jetpack Compose, taşınan Instagram Direct yüzeyleri için ekibin kullanıcı arayüzü kodunun toplam miktarını%50 azaltmasına olanak tanıdı. Yapay zekanın daha az kod üretmesi, daha yüksek kaliteli çıkış ve görev başına daha düşük jeton maliyeti sağlar. 

Quote-Pavlo-New.jpg

Instagram Direct için Android kod tabanının dahili veri analizinde, Compose kullanıcı arayüzünde çalışan yapay zeka ajanı oturumları, Android görünümlerini kullanan aynı görevlerle karşılaştırıldı. Verimlilik artışı iki boyutta net bir şekilde görüldü:

  • Kullanılan kodun karakter sayısı başına: Compose, % 32 daha az mühendis-temsilci etkileşimi ve % 35 daha az temsilci yürütme süresi(bir temsilcinin mühendisin isteği üzerinde çalışmaya başlamasından yanıt döndürene kadar geçen süre) gerektirdi.
  • Temsilci oturumu başına: Görünümler ile karşılaştırıldığında, Compose ile genel jeton maliyeti% 33 azaldı.

Hem çıktı verimliliğini hem de tipik oturum sayılarını raporlarız. Çünkü bunlar bağımsız olarak faydalı sonuçlardır. Mühendis-temsilci etkileşimleri ve yürütme süresi rakamları, elde edilen çıktı birimi başına kaynak kullanımını karşılaştırırken jeton rakamı, tipik bir temsilci oturumunun toplam maliyetini karşılaştırır.

Veriler ayrıca iki çerçevenin karmaşık veya hassas kodları işleme biçiminde tutarlı bir fark olduğunu da ortaya koydu. Meta, bunu kod değişikliklerinin risk puanını kullanarak takip eder. Bu puan, genel kod kalitesini ve bir değişikliğin üretim sorunlarına yol açma olasılığını değerlendirir. Analiz, bir temsilcinin kaynak verimliliğini; jeton tüketimi, temsilcinin yürütme süresi ve mühendis ile temsilci arasındaki etkileşimlerin bir bileşimini kullanarak ölçtü. Dosyalar daha yüksek bir risk puanı biriktirdikçe yapay zeka ajanı oturumları doğal olarak daha az kaynak verimli hale gelir. 

Bir dosyanın birikmiş risk puanı iki katına çıktığında, Android görünümleriyle uygulanan kullanıcı arayüzü, temsilci kaynak verimliliğini%30 azaltır (karakter başına). Aynı koşullarda Jetpack Compose kullanıcı arayüzü yalnızca%9'luk bir azalma gösterir.

Google ve Meta arasındaki iş ortaklığı sayesinde Instagram Direct ekibi, Compose'un benimsenmesine yeni bir bakış açısı getirdi. Bu yaklaşım, yalnızca kullanıcı arayüzünün yeniden yazılması değil, kod tabanının yapay zekaya hazır olması açısından da ele alındı. Bu çalışma, özellikle Instagram gibi büyük ölçekli uygulamalarda kullanıldığında Compose'un yapay zeka öncelikli kod tabanları ve mimariler oluşturmak için güçlü bir temel oluşturduğunu gösterdi.

Performans optimizasyonları 

Instagram Direct, uygulamanın en önemli yüzeylerinden biridir ve kullanıcılar her zaman hızlı ve duyarlı olmasını bekler. Jetpack Compose'u etkili bir şekilde kullanmak, kullanıcı arayüzünün büyük bir kısmını yeniden yazmak anlamına geliyordu. Birincil hedef ise hiçbir gerileme olmadan yüksek kaliteli deneyimi korumaktı.

Yıllar süren iterasyonlar, Instagram'daki eski görünüme dayalı uygulamayı son derece yüksek bir performans çıtasına taşımıştı. Ekibin, tamamen yeni bir kullanıcı arayüzü çerçevesine geçerken aynı standardı karşılaması gerekiyordu.

Instagram, binlerce olmasa da yüzlerce performans metriğini ölçer.  Compose'un benimsenmesi için en önemli üç faktör şunlardı:

  • Etkileşim süresi: Ekranın açılması ile kullanılabilir hale gelmesi arasında geçen süre.
  • Tam yüklenme süresi : Ekranın açılması ile tüm içeriğin (ör. resimler) tam olarak yüklenmesi arasında geçen süre.
  • Kaydırma performansı: Ekranın kare atlamadan ne kadar sorunsuz kaydırıldığı.

Bu metrikler, üretimde çalışma zamanında izlenir. Bu sayede, taşınan Compose kullanıcı arayüzünü eski kullanıcı arayüzüyle karşılaştıran A/B testleri yapılabilir ve bu çalışmanın performans üzerindeki etkisi değerlendirilebilir.

Bu tür bir taşıma işlemine yaklaşmanın yaygın bir yolu, küçük bir başlangıç yaparak birkaç kullanıcı arayüzü bileşenini taşımak, veri toplamak ve bunların nasıl davrandığını incelemektir. Bu erken sonuçlar faydalı olsa da yalnızca kısmi bir tablo sunar ve Compose'un benimsenmesiyle ilgili yanlış negatif sonuçlar verir. Bunun nedenleri şunlardır:

  • Temsili değil: Taşınan bir kullanıcı arayüzü bileşeni, belirli bir ekrandaki genel performansıyla ilgili faydalı veriler sağlayabilir. Ancak farklı bileşenler, genelleştirilemeyen nedenlerden dolayı farklı davranır. Bu nedenle, her zaman bu bileşenlerden çıkarım yapamazsınız.
  • Birlikte çalışabilirlik maliyeti: Büyük bir View kod tabanındaki küçük bir Compose parçası, iki sistem arasında öngörülemeyen bir köprü oluşturma maliyeti öder. Bu ek yük, ölçümü bozduğundan erken aşamadaki küçük ölçekli sonuçlar, tam taşımanın gerçekte nasıl görüneceğini yansıtmaz.

Sonuç olarak, küçük geçişler faydalı olsa da her zaman Compose'un tam etkisini yansıtmaz. Bir yüzeyin ne kadar büyük bir kısmı köprü kesintileri olmadan uçtan uca taşınırsa performans açısından o kadar net ve iyi bir tablo ortaya çıkar.

Instagram Direct'teki temel ekranlar, başlangıçta RecyclerView ile uygulanan çeşitli öğe türlerinin uzun listeleri etrafında oluşturulmuştur. Mimari, ölçeklenebilirlik için özel soyutlamalara dayanır ancak Görünüm tabanlı sistemin yaşam döngüsüne bağlı kalır.

Diagram 1.png

Ekibin asıl görevi, mevcut RecyclerView tabanlı mimaride birkaç yüz liste öğesini kademeli olarak Compose'a taşımak ve bunları A/B testleri kapsamında küçük bağımsız gruplar halinde üretim ortamında kullanıma sunmaktı. Tüm bunlar, kullanıcının mesajlaşma deneyiminde görünür bir değişiklik olmadan yapıldı.

Bu tür bir kurulumun en büyük dezavantajı, her liste öğesinin Compose'a tam olarak taşınmasından sonra bile temel bir RecyclerView mimarisi aracılığıyla eski View sistemine önemli ölçüde bağımlı olmasıdır. Ekip, doğal bir sonraki adım olarak RecyclerView tabanlı temel mimariyi Compose'a özgü alternatif olan LazyColumn ile değiştirmeye karar verdi.

Bu, Compose kullanıcı arayüzü bileşenlerinin, içinde bulundukları çerçeveden soyutlanması ve aynı anda hem RecyclerView hem de LazyColumn ile uyumlu olması gerektiği anlamına gelir. A/B testini etkinleştirmek için çalışma zamanında özellik bayrakları aracılığıyla ikisi arasında geçiş yapabilmek de aynı derecede önemlidir.

Diagram 2.png

Yeni Compose öğeleri LazyColumn ile yerel olarak uyumlu olsa ve kesintisiz bir oluşturma ağacına eklenebilse de bunları RecyclerView'e de yerleştirmek için bir birlikte çalışabilirlik API'si oluşturuldu. Bu sayede, LazyColumn kurulumunu RecyclerView ile yan yana bir A/B testinde kullanıma sunmak mümkün oldu. Aynı Compose öğelerini yeniden kullanarak ve performansı iyileştirerek, ekibin geri kalanının özellikleri oluşturmasını ve hassaslaştırmasını engellemeden bunu başardık.

Instagram'ın ölçeği, karmaşıklığı ve en küçük gerilemelere bile duyarlılığı, Jetpack Compose için benzersiz bir zorluk oluşturdu. Bu sorunları çözmek için tekrarlanan, uygulamalı bir iş ortaklığı gerekiyordu. Google ve Meta mühendisleri, yakın bir işbirliği içinde çalışarak metrikleri analiz etti ve görünüm tabanlı karşılaştırmaları karşılayacak veya aşacak yeni Compose özelliklerini belirleyip tasarladı. Bu iş ortaklığı sonucunda Jetpack Compose'da şu eklemeler öne çıkıyor: LazyLayoutCacheWindows ile duraklatılabilir oluşturma ve görünürlük izleme. 

LazyLayoutCacheWindows ile duraklatılabilir oluşturma

Duraklatılabilir oluşturma (Compose 1.10'da varsayılan olarak etkindir), takılmayı önlemek için pahalı geç listesi öğelerinin kareler arasında kademeli olarak oluşturulmasına olanak tanır. LazyLayoutCacheWindow (Compose 1.9'da eklendi) ile birlikte kullanıldığında kaydırma akıcılığı önemli ölçüde artar. Meta'da yakın zamanda yapılan şirket içi testlerde, duraklatılabilir oluşturmayı tek görüntü alanlı LazyLayoutCacheWindow ile birleştirmenin, standart Compose'a kıyasla dakikadaki büyük kare düşüşlerini (LFD'ler/dk) yaklaşık% 13 azalttığı görüldü. Cache Window, aynı referans değere kıyasla tek başına yaklaşık% 8'lik bir azalma sağladı. LFDs/m, Meta'nın kaydırma sırasında fark edilen takılmaları izlemek için kullandığı dahili bir metriktir.

Quote-Fabio.jpg


Uygulamanızda LazyLayoutCacheWindow kullanmak, hızlı kaydırma hareketlerini etkinleştirmek için ekran dışı öğeleri görüntü alanının etrafındaki piksel tabanlı bir bantta hazırlar ve saklar. Uygulamanızda LazyLayoutCacheWindows özelliğinden yararlanmak için en yeni Compose 1.13.0-alpha03 sürümünü kullanabilir ve aşağıdaki örnekte gösterildiği gibi ayarlayabilirsiniz:

val cacheWindow = LazyLayoutCacheWindow(ahead = 150.dp, behind = 100.dp)
// OR
val cacheWindow = LazyLayoutCacheWindow(aheadFraction = 0.5f, behindFraction = 0.3f)

LazyColumn(state = state, cacheWindow = cacheWindow) {
    ...
}

Önbellek penceresini yapılandırmanın iki yolu vardır. Her ikisi de aynı şeyi (ekran dışı içeriğin ne kadarının oluşturulmuş olarak tutulacağını) farklı birimlerle açıklar.

  • Dp: Sabit mutlak uzunluk. ahead = 150.dp, cihazdan bağımsız olarak görünür kenarın ötesinde oluşturulan 150 dp'lik içeriği korur.
  • Float: Görüntü alanının kesri. aheadFraction = 0.5f, ekranın yarısını önceden oluşturulmuş olarak tutar. Böylece mutlak miktar, ekran yüksekliğine göre ölçeklenerek çeşitli form faktörlerini destekler: Tablette veya katlanabilir cihazda daha fazla, kompakt telefonda daha az. 

Instagram ekibi, önbellek penceresinin kayan kesirlerini Direct'in içerik yapısına ve öğe boyutlarına göre hassas bir şekilde ayarladı. İdeal değerler, belirli kullanıcı arayüzü parametrelerine göre değiştiğinden doğru dengeyi bulmak için biraz deneme yapmanız gerekir.

onVisibilityChanged ile gösterim günlüğü oluşturma


 onVisibilityChanged (Compose 1.9.0'da eklendi) API'si, Google ve Meta arasındaki teknik iş ortaklığının bir diğer önemli sonucuydu. Bu sayede, büyük ölçekli Jetpack Compose yüzeyleri, bir composable'ın ekranda ne zaman göründüğünü tutarlı bir şekilde anlayabilir ve geçmişte kullanılan özel, elle oluşturulmuş uygulamaların yerini alır. Yalnızca Instagram Direct'te, kullanıcı arayüzü öğelerinin kullanıcılara gerçekten gösterilip gösterilmediğine bağlı olan ürün kalitesi metriklerini desteklemek için yüzlerce dosyada bu görünürlük sinyalleri kullanılır.

Başlangıç performansı

Instagram Direct için Jetpack Compose'un benimsenmesi, uygulamanın diğer bölümlerinde beklenmedik performans iyileştirmeleri sağladı. Jetpack Compose çalışma zamanı, yalnızca bir kez ödediğiniz bir ısınma maliyeti taşır. Mesajlaşma, genellikle kullanıcı oturumunun başlarında ziyaret edilen yüksek trafikli bir bölüm olduğundan Instagram'da Compose'u kullanan diğer bölümlerde de belirgin performans iyileştirmeleri görüldü.

Instagram Direct'te Compose kullanıcı arayüzünün başlangıç performansı, yükleme sırasında sık kullanılan kod yollarını önceden derleyen temel profiller kullanılarak optimize edildi. Böylece Compose, ilk başlatmadan itibaren hızlı bir şekilde oluşturulur.

Instagram Direct'in Jetpack Compose'a geçişinden çıkarılan dersler 

  • Jetpack Compose'un yatırım getirisi anında görülür: Compose'dan yararlanmak için gelişmiş yapay zeka iş akışlarını kullanmanız gerekmez. Kodda yaklaşık% 50 azalma, daha az kodun bakımının yapılması ve hatalar için daha az yüzey alanı anlamına gelir.
  • Yapay zeka tabanlı bir mimari tasarlamak, önemli kazanımlar sağladı. Örneğin, yapay zeka temsilcisinin yürütme süresi% 35 azaldı, mühendis-temsilci etkileşimleri% 32 azaldı ve jeton maliyeti% 33 azaldı.
  • Çok sayıda birlikte çalışabilirlik API'si ve Görünümler ile Compose'u birleştirme desteği olsa da küçük bileşenler yerine daha büyük yüzeyleri taşımayı hedefleyin. Bu sayede kullanıcı arayüzü tek ve kesintisiz bir oluşturma hiyerarşisinde tutulur ve Compose'a özgü en iyi performans optimizasyonlarının tümü kullanılabilir.
  • Duraklatılabilir oluşturmayı LazyLayoutCacheWindow ile eşleme: Bu ikisini birlikte eşlemek, yalnızca önbellek pencerelerinden daha iyi sonuçlar verir. Yalnızca önbellek penceresi kullanıldığında, ağır bir öğe tek bir geçişte oluşturulmaya çalışılabilir ve bu da kare bütçesini aşabilir.
  • Compose'a katkıda bulunun. Meta, geri bildirimlerini ve fikirlerini Compose'da hayata geçirmek için Jetpack Compose ekibiyle iş ortaklığı yaptı. Açık kaynaklı bir araç seti üzerinde çalışmak, hatalar ve performans iyileştirmeleri merkezi olarak yapıldığında hepimizin faydalanması anlamına gelir. Bu nedenle, geri bildiriminizi paylaşın.

Jetpack Compose'u kullanmaya başlayan Instagram, yapay zeka destekli geliştirme sürecinde önemli kazanımlar elde ederken günlük kullanıcı arayüzü mühendisliği süreçlerini de basitleştirdi. Bildirimli yaklaşım, standart kodları azaltır, durumun daha kolay anlaşılmasını sağlar ve genel geliştirici üretkenliğini artırır. Instagram mühendislik ekibi, Compose'u uygulamanın daha fazla yüzeyine getirmeyi ve Instagram ile Jetpack Compose kullanıcılarına daha fazla iyileştirme sunmak için Google ile Meta arasındaki işbirliğini sürdürmeyi planlıyor. 

Yapay zeka destekli Compose'u henüz denemediyseniz Jetpack Compose'a geçiş yapmak artık her zamankinden daha kolay.

Teşekkür. Meta ve Google arasındaki işbirliği sayesinde Compose'da performans iyileştirmeleri yapan Meta'dan Michal Zielinski ve Matthew Du ile Google'dan Andrei Shikov ve George Mount'a teşekkür ederiz. Ayrıca, Compose'un Instagram Direct'e getirilmesine yardımcı olan Meta'dan Gary Ye'ye ve veri bilimi aracılığıyla bu çalışmayı destekleyen Meta'dan Gopal Juneja'ya teşekkür ederiz.

Yazan:
Okumaya devam et