Sheekada ku saabsan sida tirtirka cascade ee Realm ugu guulaystay bilawga dheer

Dhammaan isticmaalayaashu waxay si degdeg ah u bilaabaan UI oo ka jawaabaan codsiyada moobaylka si fudud. Haddii arjigu uu qaato waqti dheer in la bilaabo, isticmaaluhu wuxuu bilaabaa inuu dareemo murugo iyo xanaaq. Waxaad si fudud u kharribi kartaa khibradaha macmiilka ama aad si buuxda u waayi kartaa isticmaalaha xitaa ka hor inta uusan bilaabin isticmaalka codsiga.

Waxaan mar ogaanay in barnaamijka Dodo Pizza uu qaato 3 ilbiriqsi si uu u bilaabo celcelis ahaan, iyo qaar "nasiib leh" waxay qaadataa 15-20 ilbiriqsi.

Hooska gooyay waa sheeko leh dhamaad farxad leh: oo ku saabsan kobaca xogta Realm, daadinta xusuusta, sida aan u ururinay walxo buul ah, ka dibna nafteena isku soo jiidnay oo wax walba hagaajinnay.

Sheekada ku saabsan sida tirtirka cascade ee Realm ugu guulaystay bilawga dheer

Sheekada ku saabsan sida tirtirka cascade ee Realm ugu guulaystay bilawga dheer
Qoraaga maqaalka: Maxim Kachinkin - Horumarinta Android ee Dodo Pizza.

Saddex ilbiriqsi laga bilaabo marka aad gujiso astaanta codsiga ilaa dib u bilawga() ee hawsha ugu horeysa waa infinity. Isticmaalayaasha qaarna, wakhtiga bilaabista waxa uu gaadhay 15-20 ilbiriqsi. Sidee tani xitaa suurtogal u tahay?

Soo koobid aad u gaaban oo loogu talagalay kuwa aan haysan waqti ay wax ku akhriyaan
Xogtayada Realm waxay u korodhay si aan dhammaad lahayn. Walxaha buulka leh qaarkood lama tirtirin, laakiin si joogto ah ayaa loo ururin jiray. Wakhtiga bilowga arjiga ayaa si tartiib tartiib ah u kordhay. Kadibna waxaanu hagaajinay, iyo wakhtiga bilawga ah ayaa yimid bartilmaameedka - waxay noqotay wax ka yar 1 ilbiriqsi oo aan la kordhin. Maqaalku wuxuu ka kooban yahay falanqaynta xaaladda iyo laba xal - mid degdeg ah iyo mid caadi ah.

Baadh iyo falanqaynta dhibaatada

Maanta, codsi kasta oo moobilku waa inuu si degdeg ah u bilaabmaa oo uu noqdaa mid jawaaba. Laakin ma aha oo kaliya ku saabsan app mobile. Khibrada isticmaale ee la macaamilka adeeg iyo shirkad waa shay adag. Tusaale ahaan, xaaladdeenna, xawaaraha gaarsiinta waa mid ka mid ah tilmaamayaasha ugu muhiimsan ee adeegga pizza. Haddii dhalmada ay dhakhso badan tahay, biisadu way kululaan doontaa, macmiilka doonaya inuu hadda wax cuno ma sugi doono wakhti dheer. Codsiga, markeeda, waxaa muhiim ah in la abuuro dareenka adeegga degdegga ah, sababtoo ah haddii codsigu uu qaato 20 ilbiriqsi oo keliya si loo bilaabo, markaa intee in le'eg ayaad sugeysaa pizza?

Markii hore, anaga lafteena waxa ina soo food saartay xaqiiqda ah in mararka qaar codsigu uu qaatay dhowr ilbiriqsi si loo bilaabo, ka dibna waxaan bilownay inaan maqalno cabashooyinka asxaabta kale ee ku saabsan muddada ay qaadatay. Laakin ma aannan awoodin in aan si joogta ah ugu soo celino xaaladan.

Intee ayay jirtaa? Sida laga soo xigtay Dukumentiyada Google, haddii bilowga qabow ee codsigu uu qaato wax ka yar 5 ilbiriqsi, markaa tan waxaa loo tixgeliyaa "sida haddii caadiga ah". Dodo Pizza Android App-ka ayaa la bilaabay (sida ku cad cabbirka Firebase _app_bilow) ku bilow qabow celcelis ahaan 3 ilbiriqsi - "Ma fiicna, ma ahan mid laga cabsado," sida ay yiraahdaan.

Laakiin dabadeed cabashooyinka ayaa soo baxay in codsigu qaatay waqti aad iyo aad iyo aad u dheer in la bilaabo! Bilawga, waxaanu go'aansanay inaanu cabbirno waxa "aad, aad iyo aad u dheer" yahay. Taasna waxaan u isticmaalnay raad-raac Firebase App-ka raadraaca bilawga.

Sheekada ku saabsan sida tirtirka cascade ee Realm ugu guulaystay bilawga dheer

Raadraaca caadiga ah waxa uu cabbiraa wakhtiga u dhexeeya wakhtiga adeegsaduhu furayo arjiga iyo wakhtiga dib u bilaabashada() ee hawsha ugu horeysa la fuliyo. Gudaha Firebase Console cabbirkan waxaa loo yaqaan _app_start. Waxaa soo baxday in:

  • Waqtiyada bilawga isticmaalayaasha ee ka sarreeya boqolleyda 95aad waxay ku dhow yihiin 20 ilbiriqsi (qaar xitaa waa ka sii dheer yihiin), in kasta oo wakhtiga bilawga qabowga dhexdhexaadka ahi uu ka yar yahay 5 sekan.
  • Waqtiga bilawga ahi maaha qiimo joogto ah, laakiin wuu koraa wakhti ka dib. Laakiin mararka qaarkood waxaa jira dhibco. Waxaan helnay qaabkan markii aan kordhinay cabbirka falanqaynta ilaa 90 maalmood.

Sheekada ku saabsan sida tirtirka cascade ee Realm ugu guulaystay bilawga dheer

Labo fikradood ayaa maskaxda ku soo dhacay:

  1. Wax baa soo daadanaya.
  2. Tani "wax" dib ayaa loo dejiyaa ka dib marka la sii daayo ka dibna mar kale soo daato.

"Malaha wax ku jira kaydka xogta," ayaanu ku fikirnay, waananu saxnay. Marka hore, waxaanu u isticmaalnaa kaydka kayd ahaan, inta socdaalka lagu jiro waanu nadiifinaynaa. Marka labaad, kaydka xogta ayaa la shubaa marka codsigu bilaabmo. Wax walba waa isku wada habboon yihiin.

Maxaa ka qaldan kaydka Realm

Waxaan bilownay inaan hubinno sida macluumaadka ku jira macluumaadka uu u beddelo nolosha codsiga, laga bilaabo rakibaadda ugu horreysa iyo inta lagu jiro isticmaalka firfircoon. Waxaad ku arki kartaa waxa ku jira kaydka xogta Realm adigoo isticmaalaya stetho ama si faahfaahsan iyo si cad adigoo u furaya faylka iyada oo loo marayo Realm Studio. Si aad u aragto waxa ku jira kaydka xogta adoo isticmaalaya ADB, koobiye faylka kaydka xogta Realm:

adb exec-out run-as ${PACKAGE_NAME} cat files/${DB_NAME}

Ka dib markaan eegno waxa ku jira kaydka xogta waqtiyo kala duwan, waxaan ogaanay in tirada walxaha nooc gaar ah ay si joogto ah u kordhayaan.

Sheekada ku saabsan sida tirtirka cascade ee Realm ugu guulaystay bilawga dheer
Sawirku wuxuu muujinayaa qayb ka mid ah Realm Studio laba faylal: dhanka bidix - saldhigga codsiga wakhti ka dib rakibidda, dhinaca midig - ka dib isticmaalka firfircoon. Waxaa la arki karaa in tirada walxaha ImageEntity ΠΈ MoneyType si weyn ayuu u koray (sawirku wuxuu muujinayaa tirada walxaha nooc kasta).

Xiriirka ka dhexeeya kobaca xogta iyo wakhtiga bilowga

Kobaca xogta aan la xakamayn aad buu u xun yahay. Laakiin sidee ayay tani u saamaynaysaa wakhtiga bilowga codsiga? Way fududahay in tan lagu cabbiro iyada oo loo marayo Maareeyaha Waxqabadka. Laga soo bilaabo Android 4.4, logcat wuxuu soo bandhigayaa log-ka leh xargaha la soo bandhigay iyo waqtiga. Wakhtigani waxa uu la mid yahay inta u dhaxaysa laga bilaabo wakhtiga codsiga la bilaabay ilaa dhamaadka samaynta hawsha. Inta lagu jiro wakhtigan dhacdooyinka soo socda ayaa dhacaya:

  • Bilow habka.
  • Bilawga walxaha
  • Abuuritaanka iyo bilaabista hawlaha.
  • Samaynta qaabayn
  • samaynta codsiga

nagu habboon. Haddii aad ku maamusho ADB calamada -S iyo -W, waxaad heli kartaa wax soo saar la dheereeyey wakhtiga bilowga:

adb shell am start -S -W ru.dodopizza.app/.MainActivity -c android.intent.category.LAUNCHER -a android.intent.action.MAIN

Haddaad halkaas ka soo qabsato grep -i WaitTime waqtiga, waxaad si toos ah u samayn kartaa ururinta mitirkan oo muuqaal ahaan waxaad u eegi kartaa natiijooyinka. Jaantuska hoose wuxuu muujinayaa ku-tiirsanaanta wakhtiga bilaabista arjiga ee tirada bilowga qabow ee arjiga.

Sheekada ku saabsan sida tirtirka cascade ee Realm ugu guulaystay bilawga dheer

Isla markaana ay isku si u ahaayeen xidhiidhka ka dhexeeya cabbirka iyo korriinka kaydka xogta, kaas oo ka koray 4 MB ilaa 15 MB. Wadar ahaan, waxay soo baxday in wakhti ka dib (koritaanka qabowgu bilaabmayo), labadaba wakhtiga furitaanka codsiga iyo xajmiga xogta ayaa kordhay. Gacmaheenna waxaan ku haynaa mala-awaal. Hadda waxa hadhay oo dhan waxay ahayd in la xaqiijiyo ku tiirsanaanta. Sidaa darteed, waxaan go'aansanay inaan meesha ka saarno "leaks" oo aan aragno in tani ay soo dedejinayso furitaanka.

Sababaha kobaca xogta aan dhammaadka lahayn

Ka hor inta aan la saarin "leaks", waxaa habboon in la fahmo sababta ay u soo baxeen meesha ugu horeysa. Si tan loo sameeyo, aan xasuusano waxa Realm tahay.

Realm waa xog-ururin aan xidhiidh ahayn. Waxay kuu ogolaanaysaa inaad si la mid ah u qeexdo xidhiidhka ka dhexeeya shayyada si la mid ah inta xog-ururinta ORM ee Android lagu sifeeyay. Isla mar ahaantaana, Realm waxay si toos ah ugu kaydisaa walxaha xusuusta leh tirada ugu yar ee isbeddelka iyo khariidadaha. Tani waxay kuu ogolaaneysaa inaad si dhakhso ah u akhrido xogta diskka, taas oo ah xoogga Realm iyo sababta loo jecel yahay.

(Ujeedada maqaalkan, tilmaantan ayaa nagu filnaan doonta. Waxaad wax badan ka akhrisan kartaa Realm qabow dukumentiyo ama kooda akadeemiyadda).

Horumariyayaal badan ayaa caadaystay inay wax badan ka shaqeeyaan xog ururin (tusaale ahaan, xog-ururinta ORM oo leh SQL ee hoosta hoose). Waxyaalaha ay ka midka yihiin tirtiridda xogta cascading inta badan waxay u muuqdaan kuwo la bixiyay. Laakiin maaha gudaha Realm.

By habka, qaabka tirtirka cascade ayaa la weydiiyay muddo dheer. Tani dib u eegis ΠΈ kale, oo la xidhiidha, ayaa si firfircoon looga hadlay. Waxaa jiray dareen ah in dhawaan la samayn doono. Laakiin markaa wax kasta oo loo tarjumay hordhaca xiriiriyeyaasha xooggan iyo kuwa daciifka ah, kuwaas oo sidoo kale si toos ah u xallin doona dhibaatadan. Wuxuu ahaa mid firfircoon oo firfircoon hawshan jiid codsi, kaas oo hadda hakad ku jira dhibaatooyin gudaha ah awgeed.

Xogta daadato iyada oo aan la tirtirin

Sidee dhab ahaan xogtu u daadataa haddii aad ku tiirsan tahay tirtiridda cascading aan jirin? Haddii aad buul ku dhejisay walxaha Realm, markaa waa in la tirtiraa.
Aynu eegno (ku dhawaad) tusaale dhab ah. Waxaan leenahay shay CartItemEntity:

@RealmClass
class CartItemEntity(
 @PrimaryKey
 override var id: String? = null,
 ...
 var name: String = "",
 var description: String = "",
 var image: ImageEntity? = null,
 var category: String = MENU_CATEGORY_UNKNOWN_ID,
 var customizationEntity: CustomizationEntity? = null,
 var cartComboProducts: RealmList<CartProductEntity> = RealmList(),
 ...
) : RealmObject()

Alaabta ku jirta gaadhigu waxay leedahay meelo kala duwan, oo uu ku jiro sawir ImageEntity, maaddooyinka la habeeyey CustomizationEntity. Sidoo kale, sheyga ku jira gaadhigu wuxuu noqon karaa isku-dhafan oo leh alaab u gaar ah RealmList (CartProductEntity). Dhammaan meelaha liiska ku qoran waa shayada Realm. Haddii aan galino shay cusub (copyToRealm() / copyToRealmOrUpdate()) oo wata aqoonsi la mid ah, markaa shayga gabi ahaanba waa la bedeli doonaa. Laakin dhammaan walxaha gudaha (sawirka, habayntaEntity iyo cartComboProducts) way lumin doonaan xidhiidhka waalidka oo waxay ku sii jirayaan kaydka xogta.

Maadaama xiriirka iyaga la leeyahay uu lumay, ma akhrineyno ama ma tirtirno iyaga (haddii aan si cad u helin ama aan nadiifin dhammaan "miiska"). Tan waxaan ugu yeernay "xasuusta oo daadato".

Marka aan la shaqeyno Realm, waa inaan si cad u dhex marno dhammaan walxaha oo aan si cad u tirtirno wax walba ka hor hawlgallada noocaas ah. Tan waxaa la samayn karaa, tusaale ahaan, sidan:

val entity = realm.where(CartItemEntity::class.java).equalTo("id", id).findFirst()
if (first != null) {
 deleteFromRealm(first.image)
 deleteFromRealm(first.customizationEntity)
 for(cartProductEntity in first.cartComboProducts) {
   deleteFromRealm(cartProductEntity)
 }
 first.deleteFromRealm()
}
// ΠΈ ΠΏΠΎΡ‚ΠΎΠΌ ΡƒΠΆΠ΅ сохраняСм

Haddii aad tan sameyso, markaa wax walba waxay u shaqeyn doonaan sidii la rabay. Tusaalahan, waxaan u qaadaneynaa in aysan jirin walxo kale oo Realm ah oo ku jira sawirka, habeyntaEntity, iyo cartComboProducts, markaa ma jiraan siddo kale oo buul ah oo tirtira.

"Dhakhso" xal

Waxa ugu horreeya ee aan go'aansanay inaan sameyno waxay ahayd inaan nadiifinno walxaha sida ugu dhaqsaha badan u koraya oo aan hubinno natiijooyinka si aan u aragno haddii tani ay xallinayso dhibkayaga asalka ah. Marka hore, xalka ugu fudud uguna dareenka badan ayaa la sameeyay, kaas oo ah: shay kastaa waa inuu mas'uul ka yahay ka saarida caruurtiisa. Si tan loo sameeyo, waxaan soo saarnay interface ah oo soo celiyay liiska walxaheeda dhabta ah ee Realm:

interface NestedEntityAware {
 fun getNestedEntities(): Collection<RealmObject?>
}

Waxaanan ku hirgalinay shayadayada Realm:

@RealmClass
class DataPizzeriaEntity(
 @PrimaryKey
 var id: String? = null,
 var name: String? = null,
 var coordinates: CoordinatesEntity? = null,
 var deliverySchedule: ScheduleEntity? = null,
 var restaurantSchedule: ScheduleEntity? = null,
 ...
) : RealmObject(), NestedEntityAware {

 override fun getNestedEntities(): Collection<RealmObject?> {
   return listOf(
       coordinates,
       deliverySchedule,
       restaurantSchedule
   )
 }
}

Π’ getNestedEntities Waxaan u soo celinaa dhammaan carruurta sida liis fidsan. Ilmo kasta shay sidoo kale waxa uu hirgelin karaa interface-ka NestedEntityAware, taas oo muujinaysa in uu leeyahay walxo gudaha Realm ah oo la tirtiro, tusaale ahaan. ScheduleEntity:

@RealmClass
class ScheduleEntity(
 var monday: DayOfWeekEntity? = null,
 var tuesday: DayOfWeekEntity? = null,
 var wednesday: DayOfWeekEntity? = null,
 var thursday: DayOfWeekEntity? = null,
 var friday: DayOfWeekEntity? = null,
 var saturday: DayOfWeekEntity? = null,
 var sunday: DayOfWeekEntity? = null
) : RealmObject(), NestedEntityAware {

 override fun getNestedEntities(): Collection<RealmObject?> {
   return listOf(
       monday, tuesday, wednesday, thursday, friday, saturday, sunday
   )
 }
}

Iyo wixii la mid ah, buulka walxaha waa lagu soo celin karaa.

Kadibna waxaanu qoraynaa hab si isdaba joog ah u tirtiraya dhammaan walxaha buulka leh. Habka (loo sameeyay sidii kordhin) deleteAllNestedEntities helaya dhammaan walxaha heerka sare ah iyo habka deleteNestedRecursively Si isdaba joog ah ayuu u tirtiraa dhammaan walxaha buulka leh iyadoo la adeegsanayo is-dhexgalka NestedEntityAware:

fun <T> Realm.deleteAllNestedEntities(entities: Collection<T>,
 entityClass: Class<out RealmObject>,
 idMapper: (T) -> String,
 idFieldName : String = "id"
 ) {

 val existedObjects = where(entityClass)
     .`in`(idFieldName, entities.map(idMapper).toTypedArray())
     .findAll()

 deleteNestedRecursively(existedObjects)
}

private fun Realm.deleteNestedRecursively(entities: Collection<RealmObject?>) {
 for(entity in entities) {
   entity?.let { realmObject ->
     if (realmObject is NestedEntityAware) {
       deleteNestedRecursively((realmObject as NestedEntityAware).getNestedEntities())
     }
     realmObject.deleteFromRealm()
   }
 }
}

Waxaan ku sameynay tan walxaha ugu dhaqsiyaha badan waxaanan hubinnay waxa dhacay.

Sheekada ku saabsan sida tirtirka cascade ee Realm ugu guulaystay bilawga dheer

Natiijo ahaan, walxahaas aan ku daboolnay xalkan ayaa joojiyay koritaanka. Oo kobaca guud ee salka ayaa hoos u dhacay, laakiin ma joogsan.

Xalka "caadiga ah".

Inkasta oo salku bilaabay inuu si tartiib tartiib ah u koro, haddana wuu koray. Markaa waxaan bilownay inaan sii eegno. Mashruucayagu waxa uu si firfircoon u isticmaalo kaydinta xogta gudaha Realm. Sidaa darteed, qorista dhammaan walxaha buulka leh ee shay kasta waa mid xoog badan, oo ay weheliso khatarta khaladaadka ayaa kordheysa, sababtoo ah waxaad illoobi kartaa inaad qeexdo walxaha markaad bedelayso koodka.

Waxaan rabay inaan hubiyo inaanan isticmaalin interfaces, laakiin in wax walba ay si iskood ah u shaqeeyaan.

Marka aan rabno in wax keligiis u shaqeeyo, waa inaan isticmaalnaa milicsiga. Si tan loo sameeyo, waxaan mari karnaa goob kasta oo fasal ah oo aan hubin karnaa inay tahay shay Realm ama liiska walxaha:

RealmModel::class.java.isAssignableFrom(field.type)

RealmList::class.java.isAssignableFrom(field.type)

Haddii garoonku yahay RealmModel ama RealmList, ka dib ku dar shayga goobtan liiska walxaha buulka leh. Wax walba waa isku mid sidii aan kor ku samaynay, kaliya halkan ayaa la samayn doonaa lafteeda. Habka tirtirka cascade laftiisu waa mid aad u fudud oo u eg sidan:

fun <T : Any> Realm.cascadeDelete(entities: Collection<T?>) {
 if(entities.isEmpty()) {
   return
 }

 entities.filterNotNull().let { notNullEntities ->
   notNullEntities
       .filterRealmObject()
       .flatMap { realmObject -> getNestedRealmObjects(realmObject) }
       .also { realmObjects -> cascadeDelete(realmObjects) }

   notNullEntities
       .forEach { entity ->
         if((entity is RealmObject) && entity.isValid) {
           entity.deleteFromRealm()
         }
       }
 }
}

Kordhinta filterRealmObject shaandheeya oo gudbiya kaliya walxaha Realm. Habka getNestedRealmObjects Iyadoo dib u milicsi ah, waxay helaysaa dhammaan shayada Realm-ka oo waxay gelisaa liis toosan. Kadibna waxaan samaynaa wax la mid ah si isdaba joog ah. Markaad tirtirto, waxaad u baahan tahay inaad hubiso shayga inuu ansax yahay isValid, sababtoo ah waxaa laga yaabaa in walxaha kala duwan ee waalidka ay yeelan karaan buul isku mid ah. Way fiicantahay in la iska ilaaliyo tan oo si fudud loo isticmaalo jiilkii iswada ee id marka la abuurayo walxo cusub.

Sheekada ku saabsan sida tirtirka cascade ee Realm ugu guulaystay bilawga dheer

Hirgelinta buuxda ee habka getNestedRealmObjects

private fun getNestedRealmObjects(realmObject: RealmObject) : List<RealmObject> {
 val nestedObjects = mutableListOf<RealmObject>()
 val fields = realmObject.javaClass.superclass.declaredFields

// ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅ΠΌ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΏΠΎΠ»Π΅, Π½Π΅ являСтся Π»ΠΈ ΠΎΠ½ΠΎ RealmModel ΠΈΠ»ΠΈ списком RealmList
 fields.forEach { field ->
   when {
     RealmModel::class.java.isAssignableFrom(field.type) -> {
       try {
         val child = getChildObjectByField(realmObject, field)
         child?.let {
           if (isInstanceOfRealmObject(it)) {
             nestedObjects.add(child as RealmObject)
           }
         }
       } catch (e: Exception) { ... }
     }

     RealmList::class.java.isAssignableFrom(field.type) -> {
       try {
         val childList = getChildObjectByField(realmObject, field)
         childList?.let { list ->
           (list as RealmList<*>).forEach {
             if (isInstanceOfRealmObject(it)) {
               nestedObjects.add(it as RealmObject)
             }
           }
         }
       } catch (e: Exception) { ... }
     }
   }
 }

 return nestedObjects
}

private fun getChildObjectByField(realmObject: RealmObject, field: Field): Any? {
 val methodName = "get${field.name.capitalize()}"
 val method = realmObject.javaClass.getMethod(methodName)
 return method.invoke(realmObject)
}

Natiijo ahaan, koodhka macmiilkayaga waxaanu isticmaalnaa "cascading delete" hawlgal kasta oo wax ka beddelka xogta ah. Tusaale ahaan, qalliinka la gelinayo waxay u egtahay sidan:

override fun <T : Entity> insert(
 entityInformation: EntityInformation,
 entities: Collection<T>): Collection<T> = entities.apply {
 realmInstance.cascadeDelete(getManagedEntities(entityInformation, this))
 realmInstance.copyFromRealm(
     realmInstance
         .copyToRealmOrUpdate(this.map { entity -> entity as RealmModel }
 ))
}

Habka marka hore getManagedEntities helaya dhammaan walxaha lagu daray, ka dibna habka cascadeDelete Si isdaba joog ah ayuu u tirtiraa dhammaan walxaha la ururiyey ka hor inta aan la qorin kuwa cusub. Waxaan ku dhamaaneynaa isticmaalka habkan inta codsiga lagu jiro. Daadisyada xusuusta ee Realm gabi ahaanba waa la waayay. Ka dib markii la sameeyay cabbir isku mid ah oo ku tiirsanaanta wakhtiga bilawga ah ee tirada bilawga qabow ee codsiga, waxaan aragnaa natiijada.

Sheekada ku saabsan sida tirtirka cascade ee Realm ugu guulaystay bilawga dheer

Khadka cagaaran wuxuu muujinayaa ku-tiirsanaanta wakhtiga bilawga arjiga ee tirada bilawga qabowga inta lagu jiro tirtirka tooska ah ee walxaha buulka leh.

Natiijooyinka iyo gunaanadka

Xogta Realm-ka ee weligeed koraysa ayaa sababtay in codsigu si tartiib tartiib ah u bilaabo. Waxaan soo saarnay cusboonaysiin leh "tirtiridda cascading" ee walxaha buulka leh. Oo hadda waxaanu la soconaa oo aanu qiimaynay sida go'aankayagu u saameeyay wakhtiga la bilaabay arjiga anagoo adeegsanayna _app_start metrik.

Sheekada ku saabsan sida tirtirka cascade ee Realm ugu guulaystay bilawga dheer

Falanqaynta, waxaanu qaadanaa wakhti 90 maalmood ah oo aragno: wakhtiga furitaanka arjiga, labadaba dhexdhexaadiyaha iyo kan ku dhaca boqolkiiba 95 ee isticmaalayaasha, waxay bilaabeen inay hoos u dhacaan oo aan kor u kicin.

Sheekada ku saabsan sida tirtirka cascade ee Realm ugu guulaystay bilawga dheer

Haddii aad eegto jaantuska todobada maalmood ah, cabbirka _app_start wuxuu u muuqdaa mid ku filan oo ka yar 1 ilbiriqsi.

Waxa kale oo mudan in lagu daro si caadi ah, Firebase waxay soo dirtaa ogeysiisyo haddii qiimaha dhexdhexaadka ah ee _app_start uu dhaafo 5 ilbiriqsi. Si kastaba ha ahaatee, sida aan arki karno, waa inaadan isku hallayn tan, laakiin u gal oo si cad u hubi.

Waxa gaarka ah ee ku saabsan xogta Realm waa in ay tahay xog ururin aan xidhiidh la lahayn. In kasta oo ay fududahay isticmaalka, la mid ah xalalka ORM iyo isku xidhka shayga, ma laha tirtirid cascade.

Haddii tan aan xisaabta lagu darin, markaas walxaha buulka leh ayaa urura oo "daadi doona." Xogta xogta ayaa si joogto ah u kori doonta, taas oo iyana saamayn doonta hoos u dhaca ama bilaabista codsiga.

Waxaan la wadaagay waayo-aragnimadeena ku saabsan sida degdegga ah loo tirtiro walxaha ku jira Realm, kaas oo aan weli ka bixin sanduuqa, laakiin laga hadlayay muddo dheer. dheh ΠΈ dheh. Xaaladeena, tani waxay aad u dedejisay wakhtiga bilowga codsiga.

In kasta oo laga doodayo muuqaalka dhow ee muuqaalkan, maqnaanshaha tirtirka cascade ee Realm waxaa lagu sameeyaa naqshad. Haddii aad dejinayso codsi cusub, markaa tan xisaabta ku dar. Oo haddii aad horeba u isticmaalaysay Realm, hubi haddii aad qabto dhibaatooyinkan oo kale.

Source: www.habr.com

Add a comment