Делите путем


Изградите велике и сложене апликације платна

Већина чланака у овом одељку документације покрива перформансе апликација које доживљавају људи који их користе. Овај чланак покрива перформансе апликација које доживљавају људи који их чине.

Како апликације постају све веће и сложеније, Power Apps Studio потребно је учитати и управљати већим бројем контрола, формула и извора података, а све са међусобним зависностима које експоненцијално расту. Power Apps Studio може потрајати дуже за учитавање, а функције као што су ИнтеллиСенсе и кодирање боја могу заостајати. Користите препоруке које следе за бољи рад са великим и сложеним апликацијама у Power Apps Studio. Они такође могу помоћи у побољшању перформанси ваших апликација.

Примери у овом чланку користе решење за хитне случајеве одговор болнице.

Користите Апп.Формулас уместо Апп.ОнСтарт

Савет

Можете користити Са функцијом и компонентом платна прилагођеним излазним својствима као алтернативу именованим формулама.

Најбољи начин да смањите време учитавања и за Power Apps Studio вашу апликацију јесте да замените иницијализацију варијабли и колекције у Апп.ОнСтарт са именованим формулама у Апп.Формулас.

Погледајмо следећи пример, који користи Апп.ОнСтарт.

// Get the color of text on a dark background.
Set(varColorOnDark,RGBA(0, 0, 0, 1));

// Get the color of the menu icons.
Set(varColorMenuIcon,"#0070a9");

// Get the styles for a form.
Set(varFormStyle,
    {
        DataCard: { Height: 50 },
        Title: { Height: 50, Size: 21, Color: varColorOnDark },
        Control: { Height: 50, Size: 18 },
        Label: { Size: 18, Color: varColorOnDark }
    }
);

ClearCollect(
    FacilitiesList,
    ForAll(
        Facilities,
        { Name: 'Facility Name', Id: Facility }
    )
);
If(
    Not IsBlank(Param("FacilityID")),
    Set(ParamFacility,
        LookUp(
            FacilitiesList,
            Id = GUID(Param("FacilityID"))
        ).Name
    );
);

Будући да су то низ изјава, ваша апликација мора да процени ове позиве Сет анд Цоллецт како би пре него што може да прикаже први екран, што чини учитавање апликације спорије. И зато што се цео Апп.ОнСтарт мора посматрати као целина, редослед сачуван, а грешке агрегиране пре враћања коначног резултата, формула је сложена за Power Apps Studio анализу.

Постоји бољи начин. Уместо тога користите Апп.Формулас и дефинишите ове варијабле и колекције као именоване формуле, као у следећем примеру.

// Get the color of text on a dark background.
varColorOnDark = RGBA(0, 0, 0, 1);

// Get the color of the menu icons.
varColorMenuIcon = "#0070a9";

// Get the styles for a form.
varFormStyle = 
    {
        DataCard: { Height: 50 },
        Title: { Height: 50, Size: 21, Color: varColorOnDark },
        Control: { Height: 50, Size: 18 },
        Label: { Size: 18, Color: varColorOnDark }
    };

FacilitiesList =
    ForAll(
        Facilities,
        { Name: 'Facility Name', Id: Facility }
    );

ParamFacility = 
    If( Not IsBlank(Param("FacilityID")),
        LookUp(
            FacilitiesList,
            Id = GUID(Param("FacilityID"))
        ).Name,
        Blank()
    );

Ова промена може изгледати мала, али може имати огроман утицај. Јер сваки именовани формула је независна од других, Power Apps Studio може да их анализира независно, ефикасно раздвајање велики Апп.ОнСтарт на мање делове. Видели Power Apps Studio смо пад времена учитавања за чак 80% само са овом променом.

Ваша апликација се такође учитава брже јер не мора да процењује ове формуле док јој не затреба резултат. Први екран апликације се одмах приказује.

Именоване формуле се не могу користити у свим ситуацијама јер их не можете модификовати или користити са Сет. Неке ситуације захтевају употребу променљиве стања која се може модификовати. Сет је савршен за ове ситуације и требало би да наставите да га користите. Али, чешће него не, користите глобалне варијабле у ОнСтарт-у · да бисте поставили статичке вредности које се не мењају. У тим случајевима, именована формула је бољи избор.

Пошто су именоване формуле непроменљиве, префикс var (скраћеница од "променљива") као конвенција именовања више није прикладан. Нисмо променили имена у овом примеру, јер би то захтевало промене у остатку апликације да се подударају.

Примамљиво је поставити именовану формулу у Апп.ОнСтарт, али немојте. Они не припадају тамо. Као својство понашања, Апп.ОнСтарт процењује сваку од својих изјава по реду, стварајући глобалне варијабле и разговарајући са базама података само једном, када се апликација учита. Именоване формуле су формуле које дефинишу како израчунати нешто кад год је то потребно и увек су истините. То је природа формуле која им омогућава да буду независни и омогућава апликацији да заврши учитавање пре него што се процене.

Раздвојите дугачке формуле

Апп .ОнСтарт је један од најгорих преступника за дуге формуле и дефинитивно где треба да почнете, али то није једини случај.

Наше студије су показале да скоро све апликације са дугим временом учитавања имају Power Apps Studio најмање једну формулу више од 256.000 знакова. Неке апликације са најдужим временом учитавања имају формуле веће од 1 милиона знакова. Формуле које дуго стављају значајан притисак на Power Apps Studio.

Да ствар буде гора, копирање и лепљење контроле са дугом формулом дуплира формулу у својствима контроле без да се реализује. Power Apps је моделиран по узору на Екцел, где је уобичајено више копија формуле. Међутим, у Екцел-у формуле су ограничене на један израз и ограничене су на КСНУМКС знакове. Power Apps Формуле могу расти много дуже са увођењем императивне логике и ланчаног оператора (; или ;;, у зависности од локала).

Опште решење је да се дугачке формуле поделе на мање делове и поново користе делови, као што смо урадили у претходном одељку када смо променили Сет/Цоллецт изразе у Апп.ОнСтарт на именоване формуле у Апп.Формулас. У другим програмским језицима, делови за вишекратну употребу се често називају потпрограмима или кориснички дефинисаним функцијама. Можете замислити именоване формуле као једноставан облик кориснички дефинисане функције без параметара или споредних ефеката.

Користите именоване формуле свуда

У ранијем примеру, користили смо именоване формуле као замену за Апп.ОнСтарт. Међутим, можете их користити да замените обрачун било где у апликацији.

На пример, један од екрана у решењу за хитне случајеве одговор укључује ову логику у Сцреен.ОнВисибле:

ClearCollect(
    MySplashSelectionsCollection,
    {
        MySystemCol: First(
            Filter(
                Regions,
                Region = MyParamRegion
            )
        ).System.'System Name',
        MyRegionCol: First(
            Filter(
                Regions,
                Region = MyParamRegion
            )
        ).'Region Name',
        MyFacilityCol: ParamFacility,
          MyFacilityColID:  LookUp(
            FacilitiesList,
            Id = GUID(Param("FacilityID"))
        ).Id
    }
); 

Ова формула се може поделити у скуп именованих формула. Такође чини формулу лакшом за читање.

MyRegion = LookUp(
                    Regions,
                    Region = MyParamRegion
           );

MyFacility = LookUp(
                    FacilitiesList,
                    Id = GUID(Param("FacilityID")
            );

MySplashSelectionsCollection = 
    {
        MySystemCol: MyRegion.System.'System Name',
        MyRegionCol: MyRegion.'Region Name',
        MyFacilityCol: ParamFacility,
        MyFacilityColID:  MyFacility.Id
    };

Издвојили смо ПарамФацилитy као именовану формулу раније када смо преселили већину Сет позива из Апп.ОнСтарт на именоване формуле у Апп.Формулас.

Именоване формуле се процењују само када су њихове вредности потребне. Ако је првобитна намера коришћења Сцреен.ОнВисибле била да се одложи рад док се не прикаже екран, онда је рад и даље одложен као глобалне именоване формуле у Апп.Формулас.

Користите функцију Са

Такође можете користити функцију Са у формули да бисте поделили логику. Креирајте запис у првом параметру са вредностима које желите да користите као поља, а затим користите та поља у другом параметру да бисте израчунали повратну вредност из Витх. На пример, претходни пример може бити написан као само једна именована формула:

MySplashSelectionsCollection = 
    With( { MyRegion: LookUp(
                            Regions,
                            Region = MyParamRegion
                      ),
            MyFacility: LookUp(
                            FacilitiesList,
                            Id = GUID(Param("FacilityID")
                      ) 
           },
           {
                MySystemCol: MyRegion.System.'System Name',
                MyRegionCol: MyRegion.'Region Name',
                MyFacilityCol: ParamFacility,
                MyFacilityColID:  MyFacility.Id
           }
    )

Једна мана коришћења Са овим начином је да MyFacility се не могу користити MyRegion јер су дефинисани у истој функцији С, проблем који није присутан са именованим формулама. Једно од решења је да се гнезди са функцијама и користите кључну реч Ас да бисте именовали запис за сваку како бисте омогућили лак приступ свим променљивим Ви .

Користите компоненте платна

Компоненте платна се најчешће користе за креирање контроле корисничког интерфејса која се може поставити на платно баш као и контрола. Такође их можете користити без стављања у кориснички интерфејс за извођење прорачуна са прилагођеним излазним својствима као алтернативу именованим формулама. Компоненте платна се лако деле у апликацијама са библиотекама компоненти и, за разлику од именованих формула, у потпуности су подржане. Међутим, теже их је конфигурисати и користити од именованих формула.

Да бисте поделили логику:

  1. У Power Apps Studio, пребаците се на картицу Компоненте у приказу стабла.
  2. Креирање нове компоненте.
  3. У окну Пропертиес укључите Аццесс опсег апликације.
  4. Додајте прилагођену особину.
  5. Подесите тип особине на излаз и тип података по потреби.
  6. Изаберите Креирај.
  7. У бирачу особина поред траке формуле на врху екрана, изаберите нову особину.
  8. Напишите формулу за логику за поделу и поновну употребу.

Да бисте користили логику:

  1. Пребаците се на картицу Екрани у приказу стабла.
  2. У окну Убаци, проширите Прилагођено и убаците компоненту.
  3. Да бисте израчунали вредност са особином, користите ЦомпонентНаме.ПропертyНаме.

Користите Изаберите са скривеном контролом за императивну логику

Императивна логика се користи за модификацију стања помоћу Сет анд Цоллецт, обавештавање корисника помоћу Нотифи, навигацију на други екран или апликацију помоћу Навигате анд Лаунцх-а и писање вредности у базу података помоћу Патцх, СубмитФорм или РемовеИф. · ·

Именоване формуле и прилагођене излазне особине компоненте платна не подржавају императивну логику. Уобичајени начин да се раздвоји императивна логика је да се користи особина ОнСелецт скривене контроле.

  1. Додајте контролу дугмета на екран.
  2. Подесите особину ОнСелецт на императивну логику коју желите да извршите.
  3. Подесите својство Висибле на фалсе, јер нема потребе да корисник види или комуницира са њим.
  4. Позовите Select( Button ) када желите да извршите императивну логику.

На пример, један од екрана у нашем узорку има следећу особину ОнСелецт на контроли Буттон . (Овај једноставан пример служи само за илустрацију. Нормално, ову технику бисте користили само за дуже формуле.)

btnAction_17.OnSelect = 
    Trace("Feedback Screen: Submit Button",TraceSeverity.Information);
    If(
        // Proceed if all forms are validated.
        And(
            FormFeedback.Valid
        ),
    
        // Set the updates to static variables.
        Set(updatesFeedback,Patch(Defaults('App Feedbacks'), FormFeedback.Updates));
        // Submit the first form. Subsequent actions can be found in the OnSuccess.
        SubmitForm(FormFeedback);
        ,
    
        Notify("Please complete all fields before proceeding",
               NotificationType.Warning,2000)
    );

Да бисмо поделили ову логику на делове, можемо ставити делове на одвојене контроле дугмета и одабрати их из оригинала:

btnTrace.OnSelect = 
    Trace("Feedback Screen: Submit Button",TraceSeverity.Information);

btnSubmit.OnSelect = 
    If(
        // Proceed if all forms are validated.
        And(
            FormFeedback.Valid
        ),
    
        // Set the updates to static variables.
        Set(updatesFeedback,Patch(Defaults('App Feedbacks'), FormFeedback.Updates));
        // Submit the first form. Subsequent actions can be found in OnSuccess.
        SubmitForm(FormFeedback);
        ,
    
        Notify("Please complete all fields before proceeding",
               NotificationType.Warning,2000)
    );

btnAction_17.OnSelect = 
    Select( btnTrace );
    Select( btnSubmit );

Ова техника ради само на истом екрану. Друге технике које су мало компликованије раде преко екрана, као што је коришћење Тоггле контроле, подешавање ОнЦхецк на логику коју желите да покренете, и подешавање Дефаулт на глобалну променљиву, а затим пребацивање глобалне променљиве са Set( global, true ); Set( global, false ) у тренутку када желите да покренете логику.

У овом примеру, неко логичко раздвајање је већ учињено. У коментару се помиње да се "Накнадне акције могу наћи у ОнСуццесс-у." Овај догађај покреће императивну логику након што је запис успешно поднесен, решење специфично за функцију СубмитФорм .

Партиција апликацију

Неке апликације расту на хиљаде контрола и стотине извора података, што успорава. Power Apps Studio Као и код дугих формула, велике апликације се могу поделити на мање делове који раде заједно како би створили једно корисничко искуство.

Одвојене апликације платна

Један од приступа је имплементација секција у одвојеним апликацијама платна и коришћење функције Лаунцх за навигацију између одвојених апликација и пролазак потребног контекста.

Овај приступ је коришћен у решењу за хитне случајеве одговор узорка болнице. Одвојене апликације управљају сваком од главних области целокупне апликације. Апликације деле заједничку компоненту централе кроз < ДИЦТ__библиотека компоненти > цомпонент либрарy </ДИЦТ__библиотека компоненти > који свака апликација приказује на свом почетном екрану:

Снимак екрана апликације платна за хитне случајеве одговор болнице која се изводи на телефону, приказујући компоненту платна централе.

Када корисник одабере подручје, компонента користи метаподатке о доступним апликацијама и која апликација хостује компоненту. Ако је жељени екран у овој апликацији (то јест, ТхисИтем.Сцреен није празан), онда се упућује позив за навигацију . Али, ако је жељени екран у другој апликацији (то је,ТхисИтем.ПоверАппИД · није празан), онда Лаунцх функција се користи са Апп ИД циља и ФацилитyИД контекста:

If(
    IsBlank(ThisItem.Screen),
    If(IsBlank(ThisItem.PowerAppID), 
        Launch(ThisItem.URL),           
        Launch("/providers/Microsoft.PowerApps/apps/" & ThisItem.PowerAppID, 
               "FacilityID", Home_Facility_DD.Selected.Id)
    ),
    Navigate(
        ThisItem.Screen,
        Fade
    )
);

Стање у оригиналној апликацији се губи када се покрене друга апликација. Обавезно сачувајте било коју државу пре него што позовете функцију покретања . Напишите га у базу података, позовите СавеДата, или прођите државу у циљну апликацију са параметрима који се читају помоћу функције Парам .

Апликација заснована на моделу са прилагођеним страницама

Секције се такође могу имплементирати као прилагођене странице. Прилагођене странице делују као мини апликација платна са контејнером апликација заснованим на моделу за навигацију.

Напомена

Можете ли нам рећи о својим жељеним поставкама језика у документацији? Испуните кратку анкету. (имајте на уму да је ова анкета на енглеском језику)

Анкета ће трајати око седам минута. Не прикупљају се лични подаци (изјава о приватности).