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 nasıl düşürdü?
Okuma süresi: 11 dakika
Bu blog yayını Meta ekibiyle ortaklaşa yazılmıştır
Instagram Direct, Instagram'daki temel yüzeylerden biridir ve her gün milyarlarca kullanıcı mesajını işler. Yıllar süren yineleme sürecinde ekip, eski Android View sisteminden mümkün olan her mikro optimizasyonu elde etti. Ancak yoğun şekilde optimize edilmiş eski bir yüzeyi korumak ve genişletmek, özellikle ekipler bildirim temelli kullanıcı arayüzünü ve yapay zeka kodlama asistanlarını giderek daha fazla kullandıkça önemli bir teknik borç ve mühendislik ek yükü oluşturur.
Instagram Direct için Jetpack Compose'u kullanmaya başlama, tipik bir kullanıcı arayüzü modernizasyonunun ötesine geçti. Ekip, orijinal uygulamadan % 50 daha küçük olan bir yapay zeka tabanlı kullanıcı arayüzü kod tabanı oluşturdu. Bu sayede yapay zeka aracısı yürütme süresinde% 35, mühendis-aracı değişimlerinde% 32 ve jeton maliyetinde% 33 azalma elde etti. Google ile yakın iş ortaklığı içinde olan ekip, yüksek performans standardını korurken Jetpack Compose'u kullanmaya başladı. 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 modernleştirme
Yapay zeka, sektördeki mühendislerin günlük hayatında hızla yerini aldı. Instagram gibi büyük ölçekli bir kod tabanında yapay zekayı kullanmak, şimdiden gerçek üretkenlik 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 uygun olacak şekilde yeniden tasarladı. Böylece, yapay zekanın etkisini yalnızca uyarlama ile elde edilebilecek etkiden çok daha fazla artırdı.
Instagram Direct ekibi, yapay zeka destekli bir kullanıcı arayüzü mimarisi oluşturmak için Jetpack Compose'u temel bileşen olarak seçti. Bildirimsel yapısı sayesinde kod kısa, tahmin edilebilir ve yapısal olarak yapay zeka modellerinin üzerinde akıl yürütmesi daha kolaydır. Ayrıca daha az yan etki, daha az örtülü durum ve daha net bileşen sınırları vardır.
Jetpack Compose'a geçiş için dikkatli bir planlama yapılması gerekiyordu. Her gün yüz milyonlarca kullanıcı Instagram'da mesaj gönderiyor. Bu nedenle, ekip altyapıyı yeniden tasarlarken geçişin kademeli ve sorunsuz bir şekilde yapılması, deneyimde hiçbir kesintiye yol açmaması gerekiyordu. Zorluğun boyutunu göstermek için: Ayrı kullanıcı arayüzü bileşenleri 160'tan fazla farklı durum permütasyonunda oluşturulabilir ve tek bir sohbet ekranı 200'den fazla farklı mesaj türünü işler.
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. Bu, kademeli taşıma sırasında artan bir adım olarak tamamen geçerlidir. Ancak uzun vadede, Compose'u görünüm tabanlı bir kod tabanına entegre etmek zorlu bir görevdir. Yapay zeka araçları genellikle en az direnç gösterilen yolu tercih eder. Bildirimsel ve zorunlu kullanıcı arayüzü kodunu karıştırırsanız yapay zeka bunları yanlış bir şekilde birleştirerek küçük hatalara, teknik borca ve performans gerilemelerine neden olabilir.
Yapay zekaya özgü bir kullanıcı arayüzü mimarisi oluşturma
Instagram ölçeğinde, mimari soyutlama kaçınılmazdır ve uygulamanın büyüdükçe bakımı yapılabilir durumda kalmasını sağlar. Her RecyclerView öğe türünün, onBind gibi normal yaşam döngüsü kancalarını ortaya çıkaran ö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 var. İlk olarak, isPinnedChatsEnabled işareti zorunlu kodda okunur ve ardından bir Compose lambda'sında yakalanır. Bu, paradigmalar arasında ince bir eşleşmedir. İkincisi, isPinned, ChatUiState içinde değil, öğenin kendisinde değiştirilebilir bir alan olarak bulunduğundan RecyclerView satırlar arasında yeniden bağlama ve geri dönüştürme işlemlerinden etkilenmez. Bu durum, yeniden üretilmesi zor olan hatalara yol açar.
Öğeye özel bir @Composable işlevi verilerek 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 örnek, kasıtlı olarak basit tutulmuştur ancak daha geniş bir sorunu gösterir: Yapay zekaya ne kadar az sınır verilirse zaman içinde ürettiği kodun kalitesi o kadar düşer. Koruma sınırları ve beceriler yardımcı olsa da tek başlarına yeterli değildir. Çünkü yapay zeka, engellendiğinde genellikle kendisini engellemeyi kaldırmak için bu sınırların etrafından dolaşır.
Kod tabanının yapay zeka dostu olması için iki pratik kurala uyması gerekir:
- Özel bağlama bağımlılığı en aza indirin. Bir yapay zeka aracısının doğru bir değişiklik yapması için gereken, kod tabanına özgü bilgi ne kadar fazla olursa çıktısının kalitesi o kadar düşük olur. Kod tabanı bilinen en iyi uygulamalara ne kadar yakın olursa yapay zeka sonuçları da o kadar iyi olur.
- Yapay zekayı öncelikli kılan bir kod tabanı, kendi sınırlarını zorunlu kılmalıdır. Bağlama yüklenen her beceri jeton maliyetine neden olduğundan ve aracının performansını düşürebileceğinden, yapay zeka becerileriyle tasarım boşluklarını yamamak ölçeklenebilir değildir. Bunun yerine, mimarinin kendisi bu ağırlığı taşımalıdır. Yapay zeka ajanları doğal olarak en az direnç gösteren yolu izler. Bu nedenle, tasarım bu yolun doğru ve yüksek kaliteli kodlara yönelmesini sağlamalı, aynı zamanda kötü tasarım kararlarının ifade edilmesini zor ve maliyetli hale getirmelidir.
Liste öğesi kendi soyutlamasıyla temsil edilebilir ancak bu durumda tüm Compose kodu oluşturucuda yer alır. Bu nedenle, sınıf üyelerine veya duruma erişimi yoktur ve tek bağımsız değişken kaynağı oluşturucudur. 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 boyuttaki bir kod tabanını taşımak büyük bir iştir. Uzun bir süre boyunca, Direct UI'nın büyük bir bölümünü oluşturan yüzlerce kullanıcı arayüzü bileşeni, eski karşılıklarıyla birlikte var olmak zorunda kaldı ve her ikisi de paralel olarak korunuyordu. Yapay zeka iş akışları, büyük miktarda kod yazma sürecini hızlandırarak bu paralel taşıma işlemini mümkün kıldı. Bu yaklaşım sayesinde Direct ekibi, taşıma işlemini rekor sürede gerçekleştirdi. Ekibin geri kalanı ise her gün milyonlarca insanın deneyimini iyileştiren özellikleri yayınlamaya devam etti.
Birden fazla mühendis, kendi yapay zeka aracılarını, taşıma sırasında oluşturulan yeniden kullanılabilir beceri ve kurallardan oluşan ortak bir bilgi bankasına karşı çalıştırdı. Bu sayede, her mühendisin iş akışlarını ve en iyi uygulamaları yeniden keşfetmesi yerine ekip genelinde senkronize tutuldu. Ekip, her platformda aşağıdaki aşamalarda taşıma işlemini gerçekleştirdi:
- Tüm Compose kodunu yapay zekayla 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 iyileştirildi.
Çalışmayı ekran başına iki aşamaya bölmek, bir mühendisin tüm yüzeyde hızlıca ilerlemesini, mimariyi ve zorlu uç durumları önceden çözmesini sağlar. Bu temel hazırlıklar yapıldıktan sonra diğerleri, teknik kararlar almak için duraksamadan kullanıcı arayüzünü üretime hazır hale getirmeye odaklanabilir ve böylece genel taşıma süreci hızlanabilir.
Taşıma sonuçları, yaklaşımı doğruladı. Taşınan Instagram Direct yüzeylerinde Jetpack Compose, ekibin toplam kullanıcı arayüzü kodu miktarını%50 azaltmasına olanak tanıdı. Yapay zekanın oluşturması gereken kod miktarının az olması, daha yüksek kaliteli sonuçlar ve görev başına daha düşük jeton maliyetiyle ilişkilidir.
Instagram Direct'in Android kod tabanının dahili bir veri analizinde, Compose kullanıcı arayüzünde çalışan yapay zeka ajanı oturumları, Android Views kullanılarak yapılan aynı görevlerle karşılaştırıldı. Verimlilik artışları iki boyutta net bir şekilde görüldü:
- İndirilen kodun her karakteri için: Gerekli mühendis-ajan etkileşimlerinde% 32 ve ajan yürütme süresinde% 35 azalma(bir ajanın mühendisin isteği üzerinde çalışmaya başlamasından yanıt döndürmesine kadar geçen süre) elde edin.
- Aracı oturumu başına: Oluşturma ile toplam jeton maliyeti, Görüntülemeler'e kıyasla% 33 azaldı.
Hem çıkış verimliliğini hem de tipik oturum sayılarını bağımsız olarak faydalı sonuçlar oldukları için bildiririz. Mühendis-aracı alışverişleri ve yürütme süresi rakamları, tamamlanmış çıktı birimi başına kaynak kullanımını karşılaştırırken jeton rakamı, tipik bir aracı oturumunun toplam maliyetini karşılaştırır.
Veriler, iki çerçevenin karmaşık veya hassas kodu ele alma şekli arasında tutarlı bir fark olduğunu da ortaya koydu. Meta, bunu kod değişikliklerinin risk puanını kullanarak izler. Bu puan, genel kod kalitesini ve bir değişikliğin üretimde olaylara neden olma olasılığını değerlendirir. Analizde, bir temsilcinin kaynak verimliliği, jeton tüketimi, temsilcinin yürütme süresi ve mühendis ile temsilci arasındaki etkileşimlerin bir bileşimi kullanılarak ölçüldü. Dosyalar daha yüksek bir risk puanı aldıkça yapay zeka aracısı oturumları doğal olarak daha az kaynak açısından verimli hale gelir.
Bir dosyanın birikmiş risk puanı iki katına çıktığında, Android Views ile uygulanan kullanıcı arayüzü, aracı kaynağı verimliliğini%30 azaltır (her karakter için). Aynı koşullarda, Jetpack Compose kullanıcı arayüzü yalnızca%9 oranında küçülür.
Google ve Meta arasındaki iş ortaklığı sayesinde Instagram Direct ekibi, Compose'un benimsenmesine yeni bir bakış açısı getirdi. Bu ekip, Compose'a yalnızca kullanıcı arayüzünü yeniden yazmak yerine kod tabanının yapay zeka uyumluluğu açısından yaklaştı. Bu çalışma, özellikle Instagram gibi uygulamaların ölçeğinde uygulandığında Compose'un yapay zeka öncelikli kod tabanları ve mimariler oluşturmak için temel olarak kullanılmasının ne kadar avantajlı olduğunu ortaya koydu.
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 önemli ölçüde yeniden yazılması anlamına geliyordu. Bir numaralı hedef ise gerileme olmadan yüksek kaliteli bir deneyimi korumaktı.
Yıllarca süren yineleme çalışmaları, Instagram'daki eski görüntülemeye dayalı uygulamayı olağanüstü yüksek bir performans seviyesine 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ği ölçer. Compose'un benimsenmesi için en önemli üç faktör şunlardı:
- Etkileşim süresi: Ekranın açılmasıyla kullanılabilir hale gelmesi arasındaki süre.
- Tamamen yüklenme süresi : Ekranın açılmasıyla tüm içeriğin (ör. resimler) tamamen yüklenmesi arasında geçen süre.
- Kaydırma performansı: Ekranın, kare kaybı olmadan ne kadar sorunsuz kaydırıldığı.
Bu metrikler, üretimde çalışma zamanında izlenir. Böylece, taşınan Compose kullanıcı arayüzünü eski kullanıcı arayüzüyle karşılaştıran A/B testleri yapmak ve bu çalışmanın performans üzerindeki etkisini değerlendirmek mümkün olur.
Bu tür bir taşıma işlemine yaklaşmanın yaygın bir yolu, az sayıda kullanıcı arayüzü bileşenini taşıyarak, veri toplayarak ve bunların nasıl davrandığını inceleyerek küçük bir başlangıç yapmaktır. Bu ilk sonuçlar faydalı olsa da yalnızca kısmi bir tablo sunar ve aşağıdaki nedenlerle Compose'un benimsenmesiyle ilgili yanlış negatifler sağlar:
- Temsil etmez: 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ı şekilde davranır. Bu nedenle, her zaman bu bileşenlerden ekstrapolasyon yapamazsınız.
- Interop maliyeti: Büyük bir View kod tabanının içindeki küçük bir Compose parçası, iki sistem arasında öngörülemeyen bir köprüleme maliyeti öder. Bu ek yük, ölçümü bozduğundan küçük ölçekli ilk sonuçlar, tam taşıma işleminin gerçekte nasıl görüneceğini yansıtmaz.
Bu nedenle, küçük geçişler faydalı olsa da Compose'un tam etkisini her zaman yansıtmaz. Bir yüzeyin kesintiler olmadan uçtan uca taşınması, performans açısından daha net ve iyi bir resim elde edilmesini sağlar.
Instagram Direct'teki temel ekranlar, başlangıçta RecyclerView ile uygulanan çeşitli öğe türlerinin uzun listeleri üzerine kurulmuştur. Mimari, ölçeklenebilirlik için özel soyutlamalara dayanır ancak View tabanlı sistemin yaşam döngüsüne bağlı kalır.
Ekibin temel görevi, mevcut RecyclerView tabanlı mimarideki birkaç yüz ayrı liste öğesini Compose'a kademeli olarak taşımak ve bunları A/B testleri kapsamında küçük bağımsız gruplar halinde üretimde kullanıma sunmaktı. Tüm bu işlemler, kullanıcının mesajlaşma deneyiminde görünür bir değişiklik olmadan gerçekleştirildi.
Böyle bir kurulumun en büyük dezavantajı, her liste öğesi Compose'a tamamen taşındıktan 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 yatırım yapmaya karar verdi.
Bu nedenle, Compose kullanıcı arayüzü bileşenleri, hem RecyclerView hem de LazyColumn ile aynı anda uyumlu olacak şekilde, içinde bulundukları çerçeveden soyutlanmalıdır. A/B testi yapabilmek için özellik işaretleri aracılığıyla çalışma zamanında ikisi arasında geçiş yapabilme özelliği de aynı derecede önemlidir.
Yeni Compose öğeleri LazyColumn ile doğal olarak uyumlu olsa ve kesintisiz bir kompozisyon ağacına eklenebilse de bu öğeleri RecyclerView'ye yerleştirmek için bir birlikte çalışabilirlik API'si oluşturuldu. Bu sayede, aynı Compose öğelerini yeniden kullanarak ve performansı iyileştirerek LazyColumn kurulumunu RecyclerView ile birlikte A/B testi kapsamında kullanıma sunmak mümkün oldu. Ayrıca, ekibin geri kalanının özellik oluşturma ve iyileştirme çalışmalarını da aksatmadık.
Instagram'ın ölçeği, karmaşıklığı ve en küçük gerilemelere karşı hassasiyeti, Jetpack Compose için benzersiz bir zorluk oluşturdu. Bu sorunların çözümü için yinelemeli ve uygulamalı bir iş ortaklığı gerekiyordu. Google ve Meta mühendisleri, View tabanlı karşılaştırmaları karşılayacak veya aşacak yeni Compose özellikleri belirlemek ve tasarlamak için metrikleri analiz ederek yakın bir şekilde birlikte çalıştı. Bu iş ortaklığı sonucunda, Jetpack Compose'a aşağıdaki özellikler eklendi: LazyLayoutCacheWindows ile duraklatılabilir kompozisyon ve görünürlük takibi.
LazyLayoutCacheWindows ile duraklatılabilir kompozisyon
Duraklatılabilir oluşturma (Compose 1.10'da varsayılan olarak etkindir), pahalı tembel liste öğelerinin kareler arasında artımlı olarak oluşturulmasına olanak tanıyarak duraklamayı önler. LazyLayoutCacheWindow ile eşlendiğinde (Compose 1.9'da eklenmiştir) kaydırma işleminin sorunsuzluğu önemli ölçüde artar. Meta'da yakın zamanda yapılan bir dahili testte, Pausable Composition'ı tek görüntü alanıylaLazyLayoutCacheWindow birleştirmenin, vanilla Compose'a kıyasla dakikada büyük kare düşüşlerini (LFD/m) yaklaşık% 13 azalttığı görüldü. Önbellek penceresi, aynı referans değerine kıyasla bu değeri yaklaşık% 8 oranında azaltmıştır. LFDs/m, Meta'nın kaydırma sırasında fark edilebilir takılmaları izlemek için kullandığı dahili bir metriktir.
Uygulamanızda LazyLayoutCacheWindow kullanmak, hızlı fırlatma işlemleri için ekran dışı öğeleri hazırlayıp görünüm alanının etrafındaki piksel tabanlı bir bant içinde tutar. Uygulamanızda LazyLayoutCacheWindows'dan 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, yani ekran dışındaki içeriğin ne kadarının oluşturulmuş halde tutulacağını farklı birimlerde 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. - Kayan: Görüntü alanının kesri.
aheadFraction = 0.5f, ekranın yarısını önceden oluşturulmuş olarak tutar. Bu nedenle, mutlak miktar ekran yüksekliğiyle orantılı olarak değişir ve çeşitli form faktörlerini destekler: tabletlerde veya katlanmamış katlanabilir cihazlarda daha fazla, kompakt telefonlarda daha az.
Instagram ekibi, önbellek penceresinin kayan kesirlerini özellikle Direkt'in içerik yapısı ve öğe boyutları için 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üğü kaydı
Google ile Meta arasındaki teknik ortaklığın bir diğer önemli sonucu da onVisibilityChanged (Compose 1.9.0'da eklenen) API'dir. Büyük ölçekli Jetpack Compose yüzeylerine, composable'ın ekranda gerçekten ne zaman göründüğünü bilmek için tutarlı bir yol sunar ve geçmişte kullanılan özel, elle oluşturulmuş uygulamaların yerini alır. Yalnızca Instagram Direct'te bile, bu görünürlük sinyalleri, 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 kullanılır.
Başlatma performansı
Instagram Direct'te Jetpack Compose'un kullanılması, uygulamanın diğer yüzeylerinde beklenmedik performans iyileşmelerine yol açtı. Jetpack Compose çalışma zamanı, yalnızca bir kez ödediğiniz bir ısınma maliyeti taşır ve mesajlaşma, kullanıcı oturumunda genellikle erken ziyaret edilen yüksek trafikli bir yüzey olduğundan, Instagram'ın Compose'u kullanan diğer yüzeylerinde belirgin performans iyileşmeleri görüldü.
Instagram Direct'in içindeki Compose kullanıcı arayüzünün başlangıç performansı, Baseline Profiles kullanılarak optimize edildi. Bu sayede, yükleme sırasında sık kullanılan kod yolları önceden derlenerek Compose'un ilk başlatmadan itibaren hızlı bir şekilde oluşturulması sağlandı.
Instagram Direct'in Jetpack Compose'a geçişinden çıkarılan dersler
- Jetpack Compose ile yatırımınızın karşılığını hemen alırsınız: Compose'dan yararlanmak için gelişmiş yapay zeka iş akışlarını kullanmanız gerekmez. Kodda yaklaşık% 50 azalma olması, daha az kodun korunması ve hatalar için daha küçük bir yüzey alanı anlamına gelir.
- Yapay zeka destekli bir mimari tasarlamak; yapay zeka aracısı yürütme süresinde% 35 azalma, mühendis-aracı etkileşimlerinde% 32 azalma ve jeton maliyetinde% 33 azalma gibi önemli kazanımlar sağladı.
- Birlikte çalışabilirlik API'leri ve Görünümler ile Compose'u birlikte kullanma desteği olsa da büyük yüzeyleri tek tek küçük bileşenlere taşımayı hedefleyin. Bu sayede kullanıcı arayüzü tek ve kesintisiz bir kompozisyon hiyerarşisi içinde kalır ve Compose'a özgü en iyi performans optimizasyonlarının tümü kullanılabilir.
- PausableComposition'ı LazyLayoutCacheWindow ile eşleştirin: Bu ikisini birlikte kullanmak, yalnızca önbellek pencerelerine kıyasla daha iyi sonuçlar verir. Yalnızca önbellek penceresiyle, ağır bir öğe tek geçişte oluşturulmaya çalışabilir ve bu da kare bütçesini aşabilir.
- Compose'un geliştirilmesine katkıda bulunun. Meta, Jetpack Compose ekibiyle iş ortaklığı yaparak geri bildirimlerini ve fikirlerini Compose'da hayata geçirdi. Açık kaynaklı bir araç seti üzerinde çalışmak, hatalar ve performans iyileştirmeleri merkezi olarak yapıldığında hepimizin yararlanacağı anlamına gelir. Bu nedenle, geri bildiriminizi bizimle paylaşın.
Jetpack Compose'u kullanmaya başlamak, Instagram'da günlük kullanıcı arayüzü mühendisliğini basitleştirirken yapay zeka destekli geliştirme konusunda önemli kazanımlar sağladı. Bildirim temelli yaklaşım, standart kodları azaltır, durumun anlaşılmasını kolaylaştırır ve geliştiricilerin genel ü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 dört gözle bekliyor.
Yapay zeka destekli Compose'u henüz denemediyseniz Jetpack Compose'a geçiş yapmak artık çok daha kolay.
Teşekkürler. Meta ve Google arasındaki işbirliği sayesinde Compose'da performans iyileştirmeleri yapılmasını sağlayan Meta'dan Michal Zielinski ve Matthew Du ile Google'dan Andrei Shikov ve George Mount'a teşekkür ederiz. Ayrıca, Compose'u Instagram Direct'e getirmemize yardımcı olan Meta'dan Gary Ye'ye ve bu çalışmayı veri bilimi aracılığıyla destekleyen Meta'dan Gopal Juneja'ya da teşekkür ederiz.
-
Başarılı ÖrneklerWhatsApp, dünya genelinde milyarlarca kullanıcıya hizmet veren, dünyanın en büyük mesajlaşma platformudur. Farklı bölgelerdeki kullanıcılar için varsayılan iletişim aracıdır. Kullanıcıları özel, güvenilir ve güvenli mesajlaşma yoluyla birbirine bağlar.
Niharika Arora, Tracy Agyemang, Mayank Jain • Okuma süresi: 8 dk. -
Başarılı ÖrneklerTinder, her yeni nesil bekarlar için tanışmayı kolay ve eğlenceli hale getirerek gerçek bağlantıları güçlendirmeyi ve onlara ilham vermeyi amaçlar.
Ajesh Pai, Ulises Uriel Verduzco Díaz , Tracy Agyemang • Okuma süresi: 4 dakika -
Başarılı ÖrneklerAndroid uygulamalarının büyük çoğunluğu Kotlin'i ana dil olarak seçtiğinden kotlinx.coroutines, eşzamansız programlama için fiili bir standart haline geldi. Kitaplık, Kotlin'e özgü olarak eşzamanlı akışları yönetmek için iyi tasarlanmış ve yapılandırılmış bir yöntem sunar.
Jonathan Starup, Andrei Shikov • Okuma süresi: 7 dk.
Android geliştirmeyle ilgili en son analizleri haftalık olarak gelen kutunuza alın.