Mudelipõhiste rakenduste jõudluse kujundusvormid

Kasutajate rahulolu jaoks on väga oluline luua kogemus, kus ülesandeid saab täita kiiresti ja tõhusalt. Mudelipõhiseid rakendusi saab palju kohandada, et luua kasutajate vajadustele vastavaid kogemusi, kuid on oluline teada, kuidas igapäevaste tööülesannetega töötades kiiresti koormusega modelleeritud rakendusi koodida, koostada ja käivitada. Jõudlus on osutunud rakenduse rahulolematuse peamiseks tõukejõuks, kui see pole jõudluse jaoks optimeeritud.

Arukad kohandused ja toimivad vormid on tõhusate ja tootlike vormide loomisel olulised aspektid. Samuti on oluline veenduda, et loote väga tootlikke vorme, millel on kasutajaliidese kujunduse ja paigutuse parimad tavad. Lisateavet vormide kujundamise kohta tööviljakuse ja tööviljakuse huvides leiate teemast Mudelipõhistes rakendustes produktiivsuse põhivormide kujundamine.

Samuti on oluline tagada, et kasutajad on soovitatavatel ja toetatud seadmetel ning minimaalsed nõutavad erinõuded. Rohkem teavet: Toetatud veebibrauserid ja mobiiliseadmed

Andmete ja vahekaartidega töötamine

Selles jaotises kirjeldatakse, kuidas andmete ja vahekaartide kuvamise juhtelemendid vormi jõudlust mõjutavad.

Vaikevahekaartide olulisus

Vaikevahekaart on vormi esimene laiendatud vahekaart. See täidab vormilehe laadimisel erirolli. Vaikimisi määratud vahekaardi juhtelemendid renderdatakse alati kirje avamisel. Täpsemalt käivitatakse juhtelemendi lähtestamise loogika (nt andmete toomine) iga juhtelemendi kohta vahekaardil.

Teisene vahekaart seevastu ei käivita seda lähtestamist juhtelementide jaoks vormi algselt laadimisel. Selle asemel toimub juhtelemendi lähtestamine teisese vahekaardi avamisel kasutaja interaktsiooni kaudu või setFocus kliendile API-meetodil helistamisel. See annab võimaluse varjata esialgset vormikoormust liigse kontrolli järgselt, lõpetades teatud juhtelemendid teisestes vahekaartides, mitte vaikeskaartides. Seega võib kontrolli paigutamise strateegia oluliselt mõjutada esialgse vormi koormuse reageerimisvõimet. Reageerivam vaikevahekaart annab parema üldkogemuse oluliste väljade muutmiseks, käsuribaga suhtlemiseks ning muude vahekaartide ja jaotiste tutvumiseks.

Pange alati kõige sagedamini kasutatavad juhtelemendid vaikevahekaardi ette. Paigutus ja teave ei ole mitte ainult jõudluse jaoks oluline, vaid oluline ka tootlikkuse parendamiseks, kui kasutajad vormil andmetega suhtlevad. Lisateave: Tööviljakust põhivormide kujundamine mudelipõhistes rakendustes

Andmepõhised juhtelemendid

Juhtelemendid, mis nõuavad esmasest kirjest täiendavaid andmeid, annavad vormi reageerimis- ja laadimise kiirusel kõige rohkem pingutust. Need juhtelemendid tõmbavad andmeid võrgus ja hõlmavad sageli ooteperioodi (näidatakse kui edenemise näitajaid), kuna andmete edastamine võib aega võtta.

Mõned andmepõhised juhtelemendid sisaldavad:

Hoidke vaikevahekaardil ainult kõige sagedamini kasutatavad juhtelemendid. Ülejäänud andmepõhised juhtelemendid tuleks levitada teisestele vahekaartidele, et vaikevahekaarti oleks võimalik kiiresti laadida. Lisaks vähendab see paigutusstrateegia võimalust tuua andmeid, mis lõpevad kasutuskõlbmatuna.

On ka muid andmepõhisest juhtelemendist vähem mõjutavaid juhtelemente, mis võivad siiski osaleda ülaltoodud paigutuse strateegias, et saavutada paremaid tulemusi. Need juhtelemendid sisaldavad:

Veebibrauser

See jaotis hõlmab häid tavasid, mida kasutada veebibrauserites.

Ärge avage uues aknas

openForm kliendi API meetod võimaldab parameetri suvandil kuvada vormi uues aknas. Ärge kasutage seda parameetrit või seadke selle väärtuseks väär. Kui määrate selle väärtuseks väär, tagab openForm meetod vormi kuvamise vaikekäitumise olemasoleva akna abil. Samuti on võimalik helistada otse window.open JavaScript funktsiooni kohandatud skriptist või muust rakendusest; kuid seda tuleks vältida. Uue akna avamine tähendab, et kõik leheressursid tuleb tuua ja laadida nullist, kuna leht ei saa kasutada mälus vahemälu võimalusi varem laaditud vormi ja vormi vahel uues aknas. Alternatiivina uute akende avamisele kaaluge multisessionaalse kogemuse kasutamist, mis võimaldab kirjeid avada mitmel vahekaardil, maksimeerides samal ajal kliendi vahemällu salvestamise jõudlust.

Kasutage kaasaegseid brausereid

Kõige ajasõbralikuma veebibrauseri kasutamine on võti mudelipõhise rakenduse käitamiseks nii kiiresti kui võimalik. Selle põhjuseks on see, et paljusid jõudluse täiustusi saab kasutada ainult uuemates kaasaegsetes brauserites.

Näiteks kui teie organisatsioonil on vanemaid Firefox versioone, mitte-Chromiumi-põhistest brauseritest jne, ei ole paljud mudelipõhisesse rakendusse sisseehitatud jõudluse üleliidesed varasemates brauseri versioonides saadaval, kuna nad ei toeta funktsioone, millest rakendus sõltub, et see kiiresti ja tõrgeteta käitada.

Enamikul juhtudel on oodata lehe koormuse paranemist, lülitudes lihtsalt üle Microsoft Edge versioonile, värskendades vanema versiooni uusimale praegusele brauseriversioonile või liikudes kaasaegsesse Chromium-põhisesse brauserisse.

JavaScript`i kohandamine

Selles jaotises kirjeldatakse, kuidas teha nutikaid kohandusi JavaScript`i kasutamisel, mis aitavad teil koostada mudelipõhises rakenduses tõhususe-vorme ja -lehti.

JavaScript`i kasutamine vormidel

Võimalus kohandada vorme JavaScripti abil pakub professionaalsetele arendajatele suurt paindlikkust vormi ilme ja käitumise osas. Paindlikkuse kasutamine võib vormi jõudlust negatiivselt mõjutada. Arendajad peaksid JavaScripti kohanduste rakendamisel kasutama järgmisi strateegiaid vormi jõudluse maksimeerimiseks.

Asünkroonsete võrgutaotluste kasutamine andmete taotlemisel

Kui kohanduste jaoks on vaja täiendavaid andmeid, taotlege andmeid asünkroonselt, mitte sünkroonselt. Sündmuste puhul, mis toetavad asünkroonse koodi ootamist nagu vorm OnLoad ja vorm OnSave sündmused, peaksid sündmuseohjurid tagastama Promise tellimuse, et platvorm ootakas, kuni Promise on lahendatud. Platvorm näitab sobivat kasutajaliidest, kuni kasutaja ootab sündmuse lõpule viimist.

Sündmustele, mis ei toeta asünkroonse koodi ootamist, näiteks vormi OnChange sündmus, saate lahenduse abil vormiga suhtlemise peatada, kui kood kasutab asünkroonset päringut showProgressIndicator. See on parem, kui kasutada sünkroonseid taotlusi, kuna kasutajad saavad endiselt suhelda rakenduse muude osadega edenemisnäite kuvamisel.

Siin on näide, kus kasutatakse sünkroonses laienduspunktides asünkroonset koodi.

//Only do this if an extension point does not yet support asynchronous code
try {
    await Xrm.WebApi.retrieveRecord("settings_entity", "7333e80e-9b0f-49b5-92c8-9b48d621c37c");
    //do other logic with data here
} catch (error) {
    //do other logic with error here
} finally {
    Xrm.Utility.closeProgressIndicator();
}

// Or using .then/.finally
Xrm.Utility.showProgressIndicator("Checking settings...");
Xrm.WebApi.retrieveRecord("settings_entity", "7333e80e-9b0f-49b5-92c8-9b48d621c37c")
    .then(
        (data) => {
            //do other logic with data here
        },
        (error) => {
            //do other logic with error here
        }
    )
    .finally(Xrm.Utility.closeProgressIndicator);

Peaksite olema ettevaatlik asünkroonse koodi kasutamisel sündmuseohjuris, mis ei toeta asünkroonse koodi ootamist. See kehtib eriti hästi koodi puhul, mille puhul on vaja asünkroonse koodi lahendamisel võtta meetmeid või seda käsitleda. Asünkroonne kood võib põhjustada probleeme, kui lahenduseohjur loodab, et rakenduse kontekst jääb samaks, mis see oli asünkroonse koodi käivitamisel. Teie kood peaks kontrollima, et kasutaja on samas kontekstis pärast iga asünkroonset jätku-punkti.

Näiteks võib sündmuseohjuris olla kood võrgutaotluse jaoks ja muuta reageeringu andmete põhjal juhtelemendi keelatuks. Enne päringult vastuse saamist võis kasutaja juhtelemendiga suhelda või liikuda muule lehele. Kuna kasutaja on teisel lehel, ei pruugi vormi kontekst olla saadaval, kuna see võib põhjustada tõrkeid või võib esineda muid soovimatuid käitumisi.

Asünkroonse toe vorm OnLoad ja vorm OnSave sündmused

Vormide OnLoad ja OnSave sündmuste tugiteenuste ohjurid, mis lubavad tagasi. Sündmused ootavad ohjuri tagastatud lubaduste lahendamist kuni ajalõpuperioodini. Seda tuge saab lubada rakenduse sätete kaudu.

Lisateave:

Vormi laadimisel nõutavate andmesummade piiramine

Taotlege ainult vormil äriloogika jaoks vajalikku minimaalset andmekogust. Salvestage nõutavad andmed vahemällu nii palju kui võimalik, eriti nende andmete korral, mida sageli ei muudeta või mis ei pea olema värsked. Näiteks on olemas vorm, mis taotleb andmeid sätted tabelist. Sättetabeli andmete põhjal võib vorm valida vormi jaotise peitmise. Sel juhul saab JavaScript andmeid vahemällu sessionStorage lisada, nii et andmeid taotletakse ainult üks kord seansi kohta (onLoad1). Kasutusel võib olla aegunud taasvalimise strateegia, kui JavaScript kasutab vormile järgmise navigeerimise jaoks andmete sessionStorage taotlemisel saadud andmeid vormilt (onLoad2). Lõpetuseks võiks kasutada deduplikatsioon strateegiat juhul, kui ohjurit nimetatakse reas mitu korda (onLoad3).

const SETTING_ENTITY_NAME = "settings_entity";
const SETTING_FIELD_NAME = "settingField1";
const SETTING_VALUE_SESSION_STORAGE_KEY = `${SETTING_ENTITY_NAME}_${SETTING_FIELD_NAME}`;

// Retrieve setting value once per session
async function onLoad1(executionContext) {
    let settingValue = sessionStorage.getItem(SETTING_VALUE_SESSION_STORAGE_KEY);

    // Ensure there is a stored setting value to use
    if (settingValue === null || settingValue === undefined) {
        settingValue = await requestSettingValue();
    }

    // Do logic with setting value here
}

// Retrieve setting value with stale-while-revalidate strategy
async function onLoad2(executionContext) {
    let settingValue = sessionStorage.getItem(SETTING_VALUE_SESSION_STORAGE_KEY);

    // Revalidate, but only await if session storage value is not present
    const requestPromise = requestSettingValue();

    // Ensure there is a stored setting value to use the first time in a session
    if (settingValue === null || settingValue === undefined) {
        settingValue = await requestPromise;
    }
    
    // Do logic with setting value here
}

// Retrieve setting value with stale-while-revalidate and deduplication strategy
let requestPromise;
async function onLoad3(executionContext) {
    let settingValue = sessionStorage.getItem(SETTING_VALUE_SESSION_STORAGE_KEY);

    // Request setting value again but don't wait on it
    // In case this handler fires twice, don’t make the same request again if it is already in flight
    // Additional logic can be added so that this is done less than once per page
    if (!requestPromise) {
        requestPromise = requestSettingValue().finally(() => {
            requestPromise = undefined;
        });
    }

    // Ensure there is a stored setting value to use the first time in a session
    if (settingValue === null || settingValue === undefined) {
        settingValue = await requestPromise;
    }
    
    // Do logic with setting value here
}

async function requestSettingValue() {
    try {
        const data = await Xrm.WebApi.retrieveRecord(
            SETTING_ENTITY_NAME,
            "7333e80e-9b0f-49b5-92c8-9b48d621c37c",
            `?$select=${SETTING_FIELD_NAME}`);
        try {
            sessionStorage.setItem(SETTING_VALUE_SESSION_STORAGE_KEY, data[SETTING_FIELD_NAME]);
        } catch (error) {
            // Handle sessionStorage error
        } finally {
            return data[SETTING_FIELD_NAME];
        }
    } catch (error) {
        // Handle retrieveRecord error   
    }
}

Kasutage kliendi API-s saadaolevaid andmeid, mitte ei tee taotlusi. Näiteks selle asemel, et taotleda vormil laadimisel kasutaja turberolle, võite kasutada getGlobalContext.userSettings.roles.

Laadi kood ainult siis, kui see on vajalik

Laadige kindla vormi sündmuste jaoks vajalik kood. Kui teil on kood, mis kehtib ainult vorm A ja vorm B jaoks, ei tohiks seda kaasata teeki, mis on laaditud vormi C jaoks. See peaks olema omaette teegis.

Vältige teekide OnLoad laadimist sündmuse jaoks, kui neid kasutatakse ainult OnChange või OnSave sündmuste jaoks. Selle asemel laadige need neisse sündmustesse. Sel viisil saab platvorm nende laadimist edasi lükata kuni vormi laadimiseni. Lisateave: Vormi jõudluse optimeerimine

Konsooli API-de kasutamise eemaldamine tootmise koodis

Ärge kasutage konsool API meetodeid nagu näiteks console.log tootmise koodi. Andmete logimine konsooli võib märkimisväärselt suurendada mälunõudlust ja takistada andmete mälus puhastamist. See võib kaasa tuua rakenduse aja jooksul aeglasemaks muutumise ja lõpuks kokku jooksmise.

Väldi mälu lekkeid

Koodis salvestatud mäluleke võib aja jooksul jõudlust aeglustada ja lõpuks rakenduse kokku jooksmise põhjustada. Mäluleke tekib kui rakendus ei vabasta enam mälu, kui seda enam ei vajata. Kõigi kohanduste ja koodikomponentide korral vormil peaksite:

  • Põhjalikult kaaluma ja testima stsenaariumeid kõige eest, mis vastutab mälu puhastamise eest, nt objektide elutsükli haldamise eest vastutavad objektid.
  • Puhastama kõik sündmuse kuulajad ja tellijad, eriti kui see on window objekt.
  • Puhastama kõik taimerid nagu setInterval.
  • Vältima, piirama ja puhastama viited globaalsetele või staatilistele objektidele.

Kohandatud juhtelemendi komponentide puhul saab puhastamist teha hävita meetodil.

Mäluprobleemide lahendamise kohta leiate lisateavet Edge arendaja dokumentatsioonist.

Tööriistad, mida saate kasutada rakenduste teostamiseks

Selles jaotises kirjeldatakse tööriistu, mis aitavad teil mõista jõudlusprobleeme ja anda soovitusi kohanduste optimeerimiseks mudelipõhistes rakendustes.

Jõudlusülevaated

Jõudluse ülevaated on ettevõtte rakenduse tegijatele iseteeninduse tööriist, mis analüüsib käitusaja telemeetriaandmeid ja pakub prioriteediga soovituste loendit, mis aitab parandada mudelipõhiste rakenduste toimivust. See funktsioon pakub igapäevast analüütilist ülevaadet, mis on seotud Power Apps mudelipõhise või kliendikaasamise rakendusega (nt Dynamics 365 Sales või Dynamics 365 Service) jõudlusega, soovituste ja toiminguga üksustega. Enterprise'i rakenduse tegijad saavad vaadata rakenduse tasemel üksikasjalikke tulemusülevaateid rakenduses Power Apps. Lisateave: Mis on jõudluse ülevaated? (eelvaade)

Lahenduse kontrollija

Lahenduse kontroll on võimsam tööriist, mis võimaldab analüüsida kliendi ja serveri kohandusi jõudluse või töökindluse tagamiseks. See võib sõeluda kliendipoolset JavaScript`i, vormi XML ja .NET serveripoolseid lisandmooduleid ja anda sihipäraseid ülevaateid selle kohta, mis võib lõppkasutajaid aeglustada. Soovitame teil käivitada lahendusekontrolli iga kord arenduskeskkonnas muudatuste avaldamisel, et jõudlusele soovitud muudatused avaldaks enne lõppkasutajateni jõudmist. Lisateave. Lahenduste kontrollija kasutamine mudelipõhiste rakenduste valideerimiseks teenuses Power Apps

Mõned näited lahenduse kontrollijaga leitud jõudlusega seotud probleemidest:

Objektikontrollija

Objektikontrollija käitab lahenduse komponendi objektide jaoks reaalajas diagnostikat. Probleemide tuvastamisel tagastatakse soovitus, mis kirjeldab probleemi lahendamist. Lisateave: Objektikontrolli kasutamine lahendusekomponendi diagnoosimiseks (eelvaade)

Järgmised toimingud

Kujunda tootlikke põhivorme mudelipõhistes rakendustes