Ndi nthawi yayitali bwanji? Malinga ndi Zolemba za Google, ngati kuyamba kozizira kwa ntchito kumatenga masekondi osachepera 5, ndiye izi zimatengedwa ngati "zachilendo". Pulogalamu ya Android ya Dodo Pizza yakhazikitsidwa (malinga ndi ma metrics a Firebase _app_start) pa chiyambi chozizira pafupifupi 3 masekondi - "Osati zabwino, osati zoipa," monga akunena.
Koma madandaulo adayamba kuwoneka kuti pulogalamuyi idatenga nthawi yayitali kwambiri kuti iyambike! Poyamba, tinaganiza zoyesa zomwe "zambiri, zazitali, zazitali kwambiri". Ndipo tidagwiritsa ntchito Firebase trace pa izi Chiyambi cha App.
Kutsata uku kumayesa nthawi pakati pa nthawi yomwe wogwiritsa ntchito atsegula pulogalamuyo ndi nthawi yomwe onResume() ya ntchito yoyamba ikuchitika. Mu Firebase Console metric iyi imatchedwa _app_start. Zinapezeka kuti:
Nthawi zoyambira kwa ogwiritsa ntchito pamwamba pa 95th percentile ndi pafupifupi masekondi 20 (ena ngakhale atatalika), ngakhale nthawi yoyambira yozizira yapakatikati imakhala yosakwana masekondi asanu.
Nthawi yoyambira si mtengo wokhazikika, koma imakula pakapita nthawi. Koma nthawi zina pamakhala madontho. Tinapeza chitsanzo ichi pamene tidakulitsa kuchuluka kwa kusanthula mpaka masiku 90.
Maganizo awiri adabwera m'mutu mwake:
Chinachake chikutuluka.
"chinachake" ichi chimakhazikitsidwanso pambuyo pa kumasulidwa ndikutulukanso.
Titayang'ana zomwe zili mu database nthawi zosiyanasiyana, tidapeza kuti kuchuluka kwa zinthu zamtundu wina kukuchulukirachulukira.
Chithunzichi chikuwonetsa chidutswa cha Realm Studio cha mafayilo awiri: kumanzere - maziko ogwiritsira ntchito pakapita nthawi mutakhazikitsa, kumanja - mutagwiritsa ntchito. Zitha kuwoneka kuti chiwerengero cha zinthu ImageEntity ΠΈ MoneyType chakula kwambiri (chithunzichi chikuwonetsa kuchuluka kwa zinthu zamtundu uliwonse).
Mgwirizano pakati pa kukula kwa database ndi nthawi yoyambira
Kukula kosalamulirika kwa database ndikoyipa kwambiri. Koma izi zimakhudza bwanji nthawi yoyambira pulogalamu? Ndizosavuta kuyeza izi kudzera mu ActivityManager. Popeza Android 4.4, logcat imawonetsa chipikacho ndi chingwe Chowonetsedwa ndi nthawi. Nthawiyi ndi yofanana ndi nthawi kuyambira pomwe pulogalamuyo idakhazikitsidwa mpaka kumapeto kwa ntchitoyo. Panthawi imeneyi, zochitika zotsatirazi zimachitika:
Yambani ndondomeko.
Kuyamba kwa zinthu.
Kupanga ndi kuyambitsa ntchito.
Kupanga dongosolo.
Kupereka kwa pulogalamu.
Zikuyenera ife. Ngati muthamanga ADB ndi -S ndi -W mbendera, mutha kutulutsa zowonjezera ndi nthawi yoyambira:
adb shell am start -S -W ru.dodopizza.app/.MainActivity -c android.intent.category.LAUNCHER -a android.intent.action.MAIN
Ngati mutagwira kuchokera pamenepo grep -i WaitTime nthawi, mutha kusinthiratu kusonkhanitsa kwa metric iyi ndikuwona zotsatira zake. Grafu yomwe ili pansipa ikuwonetsa kudalira kwa nthawi yoyambira ntchito pa kuchuluka kwa kuzizira koyambira kwa pulogalamuyo.
Panthawi imodzimodziyo, panali chikhalidwe chofanana cha ubale pakati pa kukula ndi kukula kwa database, yomwe inakula kuchokera ku 4 MB kufika ku 15 MB. Pazonse, zikuwonekeratu kuti pakapita nthawi (ndi kukula kwa kuzizira kumayamba), nthawi yoyambitsa ntchito komanso kukula kwa database kudakula. Tili ndi malingaliro m'manja mwathu. Tsopano chomwe chinatsala chinali kutsimikizira kudalira. Choncho, tinaganiza zochotsa "kutayikira" ndikuwona ngati izi zingafulumizitse kuyambitsa.
Zifukwa za kukula kosatha kwa database
Musanachotse "kutayikira", ndikofunikira kumvetsetsa chifukwa chake adawonekera poyamba. Kuti tichite izi, tiyeni tikumbukire kuti Realm ndi chiyani.
Realm ndi database yopanda ubale. Zimakulolani kufotokoza maubwenzi pakati pa zinthu mofanana ndi kuchuluka kwa ma data a ORM pa Android omwe akufotokozedwa. Nthawi yomweyo, Realm imasunga zinthu mokumbukira ndikusintha pang'ono komanso kupanga mapu. Izi zimakulolani kuti muwerenge deta kuchokera ku disk mofulumira kwambiri, yomwe ndi mphamvu ya Realm ndi chifukwa chake imakondedwa.
(Zolinga za nkhaniyi, kufotokozeraku kudzakhala kokwanira kwa ife. Mutha kuwerenga zambiri za Realm mu ozizira zolemba kapena mwa iwo akademi).
Madivelopa ambiri azolowera kugwira ntchito kwambiri ndi nkhokwe zaubale (mwachitsanzo, ma database a ORM okhala ndi SQL pansi pa hood). Ndipo zinthu monga cascading deta kufufutidwa nthawi zambiri amawoneka ngati anapatsidwa. Koma osati mu Ufumu.
Mwa njira, mbali yochotsa cascade yafunsidwa kwa nthawi yayitali. Izi kukonzanso ΠΈ wina, yogwirizana nayo, inakambidwa mwamphamvu. Panali kumverera kuti posachedwapa zichitika. Koma ndiye zonse kumasuliridwa kumayambiriro amphamvu ndi ofooka maulalo, amenenso basi kuthetsa vutoli. Anali achangu komanso achangu pantchito iyi kukoka pempho, yomwe yayimitsidwa pano chifukwa cha zovuta zamkati.
Kutaya kwa data popanda kuchotsedwa kwathunthu
Kodi ndendende deta imawukhira bwanji ngati mudalira kuchotsedwa kwapang'onopang'ono komwe kulibe? Ngati mwasungira zinthu za Realm, ndiye kuti ziyenera kuchotsedwa.
Tiyeni tiwone (pafupifupi) chitsanzo chenicheni. Tili ndi chinthu 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()
Zomwe zili m'ngoloyo zimakhala ndi minda yosiyana, kuphatikizapo chithunzi ImageEntity, zosakaniza makonda CustomizationEntity. Komanso, zomwe zili m'ngoloyo zimatha kukhala combo yokhala ndi zida zake RealmList (CartProductEntity). Magawo onse otchulidwa ndi Realm objects. Ngati tiyika chinthu chatsopano (copyToRealm() / copyToRealmOrUpdate()) ndi id yomweyo, ndiye kuti chinthuchi chidzalembedwanso. Koma zinthu zonse zamkati (chithunzi, customizationEntity ndi cartComboProducts) zidzasiya kulumikizana ndi kholo ndikukhalabe munkhokwe.
interface NestedEntityAware {
fun getNestedEntities(): Collection<RealmObject?>
}
Ndipo tidazikhazikitsa muzinthu zathu za 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 timabwezera ana onse monga mndandanda wathyathyathya. Ndipo chinthu chilichonse cha mwana chimatha kugwiritsanso ntchito mawonekedwe a NestedEntityAware, kuwonetsa kuti ili ndi zinthu zamkati za Realm zochotsa, mwachitsanzo. 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
)
}
}
Ndi zina zotero, zisa za zinthu zikhoza kubwerezedwa.
Chapadera pa database ya Realm ndikuti ndi database yopanda ubale. Ngakhale ndizosavuta kugwiritsa ntchito, kufanana ndi mayankho a ORM ndi kulumikiza zinthu, ilibe kufufutidwa kwamasewera.
Ndidagawana zomwe takumana nazo zamomwe tingachotsere mwachangu zinthu ku Realm, zomwe sizili m'bokosi, koma zakhala zikukambidwa kwa nthawi yayitali. nenani ΠΈ nenani. Kwa ife, izi zidafulumizitsa kwambiri nthawi yoyambira ntchito.
Ngakhale kukambitsirana za kuyandikira kwa gawoli, kusakhalapo kwa kuchotsedwa kwa cascade ku Realm kumachitika ndi mapangidwe. Ngati mukupanga pulogalamu yatsopano, ganizirani izi. Ndipo ngati mukugwiritsa ntchito kale Realm, onani ngati muli ndi zovuta zotere.