Oharra
Orrialde honetara sartzeak baimena behar du. Saioa hasteko edo direktorioak aldatzen saia zaitezke.
Orrialde honetara sartzeak baimena behar du. Direktorioak aldatzen saia zaitezke.
Zereginak azkar eta modu eraginkorrean burutu daitezkeen esperientziak eraikitzea funtsezkoa da erabiltzailearen gogobetetzea lortzeko. Ereduek gidatutako aplikazioak oso pertsonalizatuak izan daitezke zure erabiltzaileen beharrak asetzen dituzten esperientziak sortzeko, baina garrantzitsua da erabiltzaileak zure aplikazioan irekitzen eta nabigatzen duenean azkar kargatzen diren eredu bidezko aplikazioak nola kode, eraiki eta exekutatzen jakitea eguneroko zereginak lantzen ari zen bitartean. Errendimendua aplikazioaren atsekabearen eragile nagusia dela frogatu da errendimendurako optimizatuta ez dagoenean.
Pertsonalizazio adimendunak eta forma performanteak alderdi garrantzitsuak dira oso modu eraginkor eta produktiboan eraikitzeko. Era berean, garrantzitsua da erabiltzaileen interfazearen diseinuan eta diseinuan praktika onekin inprimaki oso emankorrak eraikitzen ari zarela ziurtatzea. Eraginkortasun eta produktibitaterako inprimakiak diseinatzeari buruzko informazioa lortzeko, ikus Ereduetan oinarritutako aplikazioetan inprimaki nagusi produktiboak diseinatu.
Era berean, garrantzitsua da erabiltzaileak gomendatutako eta onartutako gailuetan eta eskatutako gutxieneko zehaztapenetan daudela ziurtatzea. Informazio gehiago: Onartutako web arakatzaileak eta gailu mugikorrak
Datuekin eta fitxekin lan egitea
Atal honetan datuak eta fitxak bistaratzen dituzten kontrolek eragina nola eragiten duten azaltzen da.
Fitxa lehenetsiaren garrantzia
Fitxa lehenetsia inprimaki bateko lehen fitxa zabaldua da. Zeregin berezia du inprimakiaren orria kargatzean. Diseinuaren arabera, fitxa lehenetsiaren kontrolak erregistro bat irekitzerakoan errendatzen dira. Zehazki, kontrolaren hasieratze logikari, hala nola datuak berreskuratzeari, fitxako kontrol guztiei deitzen zaie.
Aitzitik, bigarren mailako fitxa batek ez du hasierako kontrolik egiten inprimakia hasieran kargatzen denean. Horren ordez, kontrolaren hasieraketa bigarren fitxa irekitzen den unean gertatzen da, erabiltzailearen interakzioaren bidez edo bezeroaren API metodoa deituz. setFocus Horrek aukera ematen du hasierako inprimakiaren karga kontrol gehiegizko prozesamendutik babesteko, zenbait kontrol bigarren fitxetan lehenetsitakoaren ordez jarriz. Horrela, kontrolaren kokapen estrategiak eragin nabarmena izan dezake hasierako inprimakiaren kargaren erantzunean. Erantzuteko fitxa lehenetsi batek esperientzia orokor hobea eskaintzen du eremu garrantzitsuak aldatzeko, komando barrarekin elkarreragiteko eta beste fitxa eta atal batzuk aztertzeko.
Jarri gehien erabiltzen diren kontrolak zure lehenetsitako fitxaren goialdean. Diseinua eta informazioaren arkitektura garrantzitsua da errendimendurako, baita produktibitatea hobetzeko ere, erabiltzaileek inprimakiko datuekin elkarreragiten dutenean. Informazio gehiago: Diseinatu inprimaki nagusi produktiboak ereduetan oinarritutako aplikazioetan
Datuak gidatutako kontrolak
Erregistro primarioaz haratagoko datu gehiago behar dituzten kontrolek inprimakien erantzuteko eta kargatzeko abiadurari eragiten diote gehien. Kontrol hauek datuak sarean zehar eskuratzen dituzte eta askotan itxaronaldi bat izaten dute (aurrerapen adierazle gisa ikusita), datuak igortzeko denbora behar baita.
Datuak gidatutako kontroletako batzuk honakoak dira:
- Ikuspegi azkarreko formularioa
- Azpi-sareta
- Denbora-lerroa
- Laguntzailea (Dynamics 365 Sales Insights behar du)
Mantendu kontrol horien artean gehien erabiltzen direnak lehenetsitako fitxan soilik. Datuek eragindako gainerako kontrolak bigarren mailako fitxetan banatu beharko lirateke fitxa lehenetsia azkar kargatzeko. Gainera, diseinu estrategia honek erabiltzen ez diren datuak eskuratzeko aukera murrizten du.
Datuek gidatutako kontrolek baino eragin gutxiago duten beste kontrol batzuk daude baina oraindik goiko diseinu estrategian parte har dezakete errendimendu onena lortzeko. Kontrol horien artean daude:
web-arakatzaile
Atal honek web arakatzaileekin erabiltzeko praktika onak biltzen ditu.
Ez ireki leiho berriak
Bezeroaren API metodoak parametro-aukera bati aukera ematen dio formulario bat leiho berri batean bistaratzeko. openForm Ez erabili parametro hau edo ezarri faltsua. Faltsua ezartzeak ziurtatuko du metodoak lehenetsitako portaera egingo duela, hau da, formularioa dagoen leihoa erabiliz bistaratzea. openForm JavaScript funtzioa zuzenean script pertsonalizatu batetik edo beste aplikazio batetik deitzea ere posible da; hala ere, hori ere saihestu egin behar da. window.open Leiho berri bat irekitzeak esan nahi du orrialdeko baliabide guztiak hutsetik kargatu eta kargatu behar direla, orrialdeak ezin baititu aurrez kargatutako inprimakiaren eta inprimakiaren leiho berri bateko memorian gordetako datuak gordetzeko gaitasunak baliatu. Leiho berriak irekitzeko alternatiba gisa, kontuan hartu erregistroak fitxa askotan irekitzea ahalbidetzen duen saio anitzeko esperientzia erabiltzea, bezeroaren cachearen errendimendu onurak maximizatuz.
Erabili arakatzaile modernoak
Web arakatzailerik eguneratuena erabiltzea funtsezkoa da zure ereduak gidatutako aplikazioa ahalik eta azkarren exekutatzeko. Horren arrazoia da errendimendu hobekuntza asko arakatzaile moderno berrietan soilik erabil daitezkeela.
Adibidez, zure erakundeak bertsio zaharragoak baditu Firefox, Chromium-en oinarritutako arakatzaileak, eta abar, modeloek gidatutako aplikazio batean sartutako errendimendu irabazi asko ez dira erabilgarri egongo arakatzailearen bertsio zaharragoetan, ez baitituzte onartzen aplikazioak azkar exekutatzeko mende dauden funtzioak eta arazorik gabe.
Kasu gehienetan, orrialdearen kargaren hobekuntzak ikustea espero dezakezu hona pasatzera Microsoft Edge, arakatzailearen azken bertsiora bertsio zaharrago batetik eguneratzea edo Chromium oinarritutako arakatzaile moderno batera aldatzea.
JavaScript pertsonalizazioa
Atal honetan eredu pertsonalizatutako aplikazio batean inprimaki eta orrialde performanteak eraikitzen lagunduko duten JavaScript erabiltzen duzunean pertsonalizazio adimendunak nola egin behar diren azaltzen da.
JavaScript erabiliz inprimakiekin
JavaScript-ek inprimakiak pertsonalizatzeko gaitasunak garatzaile profesionalei malgutasun handia eskaintzen die inprimakiaren itxurari eta portaerari buruz. Malgutasun hori modu desegokian erabiltzeak modu negatiboan eragin dezake errendimenduan. Garatzaileek estrategia hauek erabili behar dituzte inprimakiaren errendimendua maximizatzeko JavaScript pertsonalizazioak ezartzerakoan.
Erabili sare eskaera asinkronoak datuak eskatzerakoan
Eskatu datuak sinkronikoki beharrean sinkronizatu beharrean pertsonalizazioetarako datu gehiago behar direnean. Kode asinkronoaren zain egotea onartzen duten gertaeretarako, hala nola form OnLoad eta form OnSave gertaerak, gertaeren kudeatzaileek a Promise itzuli beharko lukete plataformak Promise konpondu arte itxaron dezan. Plataformak UI egokia erakutsiko du erabiltzaileak gertaera amaitzearen zain dagoen bitartean.
Kode asinkronoa itxarotea onartzen ez duten gertaeretarako, hala nola form OnChange gertaera, konponbide bat erabil dezakezu formulario batekin elkarreragina geldiarazteko kodeak eskaera asinkronoa egiten duen bitartean showProgressIndicator erabiliz. Eskaera sinkronikoak erabiltzea baino hobea da, erabiltzaileek aplikazioaren beste atal batzuekin elkarreragin ahal izango baitute aurrerapen adierazlea bistaratzen den bitartean.
Hona hemen adibide bat kode asinkronoa luzapen puntu sinkronoetan erabiliz.
//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);
Kontuz ibili beharko zenuke kode asinkronoa itxarotea onartzen ez duen gertaeren kudeatzaile batean kode asinkronoa erabiltzean. Hau bereziki egia da kode asinkronoaren ebazpenean ekintza edo kudeaketa egin behar duen kodean. Kode asinkronoak arazoak sor ditzake ebazpenen kudeatzaileak aplikazioaren testuingurua kode asinkronoa abiarazi zenean bezalakoa izatea espero badu. Zure kodeak egiaztatu behar du erabiltzailea testuinguru berean dagoela jarraipen puntu asinkrono bakoitzaren ondoren.
Adibidez, gertaeren kudeatzaile batean kodea egon daiteke sareko eskaera bat egiteko eta erantzun datuen arabera desgaitu beharreko kontrol bat aldatzeko. Eskaeraren erantzuna jaso aurretik, baliteke erabiltzaileak kontrolarekin elkarreragin izatea edo beste orrialde batera nabigatzea. Erabiltzailea beste orri batean dagoenez, baliteke inprimakiaren testuingurua erabilgarri ez egotea, eta horrek akatsak sor ditzake, edo nahi ez diren beste jokabide batzuk egon litezke.
Asinkronizatu OnLoad inprimakia eta OnSave gertaerak
Inprimakiek OnLoad eta OnSave gertaerek promesak itzultzen dituzten kudeatzaileak onartzen dituzte. Gertakariak kudeatzaile batek itzultzen dituen promesak noiz arte itxaron zain egongo dira. Laguntza hau aplikazioaren ezarpenen bidez gaitu daiteke.
Informazio gehiago:
- Kargatzeko formularioa
- Gordetzean inprimakia
- Elkarreragin HTTP eta HTTPS baliabideekin modu asinkronoan
Inprimakia kargatzean eskatutako datu kopurua mugatu
Eskatu inprimaki batean negozio logika egiteko beharrezkoa den gutxieneko datu kopurua. Ahalik eta gehien eskatzen diren datuak gorde cache, batez ere maiz aldatzen ez diren edo freskoak izan behar ez duten datuetarako. Adibidez, imajinatu inprimaki bat dagoela datuak eskatzen dituena ezarpen-taula batetik. Ezarpen taulako datuetan oinarrituta, inprimakiak inprimakiaren atal bat ezkutatzea aukeratu dezake. Kasu honetan, JavaScript-ek datuak cachean gorde ditzake sessionStorage , datuak saio bakoitzeko behin bakarrik eska daitezen (onLoad1). "stale-while-revalidate" estrategia ere erabil daiteke, non JavaScript-ek sessionStorage -ko datuak erabiltzen dituen formulariorako hurrengo nabigaziorako (onLoad2) datuak eskatzen dituen. Azkenik, deduplikazio estrategia bat erabil liteke kudeatzaile bat jarraian hainbat aldiz deitzen bada (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
}
}
Erabili bezeroaren APIan eskuragarri dagoen informazioa eskaerak egin beharrean. Adibidez, inprimakia kargatzean erabiltzaile baten segurtasun-rolak eskatu beharrean, getGlobalContext.userSettings.roles erabil dezakezu.
Kargatu kodea behar denean soilik
Kargatu inprimaki jakin baterako gertaeretarako behar adina kode. A formularioetarako eta Bformularioetarako bakarrik den kodea baduzu, ez litzateke Cformularioetarako kargatutako liburutegi batean sartu behar. Bere liburutegi propioan egon beharko luke.
Saihestu liburutegiak OnLoad gertaeran kargatzea, baldin eta OnChange edo OnSave gertaeretarako bakarrik erabiltzen badira. Horren ordez, kargatu gertaera horietan. Horrela, plataformak inprimakia kargatu arte atzera ditzake. Informazio gehiago: Inprimakiaren errendimendua optimizatu
Kendu kontsolaren APIen erabilera ekoizpen-kodean
Ez erabili kontsolako API metodoak, ekoizpen-kodean bezala. ...console.log Kontsolan datuak erregistratzeak memoria eskaria nabarmen handitu dezake eta baliteke datuak memorian garbitzea eragotzi. Horrek denborarekin aplikazioa motelagoa izatea eta azkenean huts egitea ekar dezake.
Saihestu memoria ihesak
Zure kodean memoria-ihesek denboraren poderioz errendimendu motelagoa izan dezakete eta, azkenean, aplikazioa huts egin dezake. Memoria-ihesak gertatzen dira aplikazioak beharrezkoa ez denean memoria askatzen ez duenean. Zure inprimakiko pertsonalizazio eta kode osagai guztiekin, hau egin beharko zenuke:
- Ondo kontuan hartu eta probatu memoria garbitzeaz arduratzen den edozertarako eszenatokiak, adibidez objektuen bizi-zikloa kudeatzeko ardura duten klaseak.
- Garbitu gertaeren entzule eta harpidetza guztiak, batez ere
windowobjektuan badaude. - Garbitu tenporizadore guztiak, hala nola
setInterval. - Saihestu, mugatu eta garbitu objektu global edo estatikoen erreferentziak.
Kontrol-osagai pertsonalizatuetarako, garbiketa *suntsitu* metodoarekin egin daiteke. ...
Memoria arazoak konpontzeari buruzko informazio gehiago lortzeko, joan Edge garatzaileentzako dokumentazio honetara. ...
Aplikazioak eraginkorrak izan daitezen erabil ditzakezun tresnak
Atal honetan errendimendu arazoak ulertzen lagun ditzakezun tresnak deskribatzen dira eta ereduak gidatutako aplikazioetan zure pertsonalizazioak optimizatzeko moduari buruzko gomendioak eskaintzen dira.
Errendimenduaren xehetasunak
Performance insights enpresako aplikazioen arduradunentzako autozerbitzu tresna da, exekuzio garaiko telemetria datuak aztertzen ditu eta lehenetsitako gomendio zerrenda eskaintzen du, ereduek gidatutako aplikazioen errendimendua hobetzen laguntzeko. Ezaugarri honek eguneroko ikuspegi analitikoen multzoa eskaintzen du Power Apps ereduak gidatutako edo bezeroenganako konpromisoa aplikazioarekin erlazionatuta, esate baterako, Dynamics 365 Sales edo Dynamics 365 Service, gomendioekin eta jarduteko elementuekin. Enpresa aplikazioen arduradunek errendimenduari buruzko informazio zehatza ikus dezakete aplikazio mailan Power Apps. Informazio gehiago: Zer dira errendimenduaren ikuspegiak? (aurrebista)
Soluzio-egiaztatzailea
Irtenbide egiaztatzailea errendimendu edo fidagarritasun arazoetarako bezeroen eta zerbitzariaren pertsonalizazioak azter ditzakeen tresna indartsua da. Bezeroaren aldetik JavaScript, XML formatua eta .NET zerbitzariaren pluginak azter ditzake eta azken erabiltzaileak motel ditzakeenaren inguruko ikuspegi zehatzak eman ditzake. Garapen ingurune batean aldaketak argitaratzen dituzun bakoitzean irtenbide egiaztatzailea exekutatzea gomendatzen dugu, azken erabiltzaileengana iritsi aurretik errendimendu kezkak azal daitezen. Informazio gehiago: Erabili soluzio-egiaztatzailea zure ereduetan oinarritutako aplikazioak balioztatzeko Power Apps
Soluzio egiaztatzailearekin aurkitutako errendimenduarekin lotutako arazoen adibide batzuk:
- il-zehaztu-zutabea. Saiestu zutabe guztiak Dataverse kontsulta APIen bidez hautatzea.
- web-erabilera-async. Elkarri HTTP eta HTTPS baliabideak asinkronikoki.
-
web-saihestu-ui-freskatze-zinta. Saihestu
refreshRibbonerabiltzeaOnLoadetaEnableRuleformatuetan.
Objektu-egiaztatzailea
Objektu egiaztatzaileak denbora errealeko diagnostikoak egiten ditu zure konponbidearen osagai objektuetan. Arazoak hautematen badira, arazoa nola konpondu deskribatzen duen gomendioa bidaltzen da. Informazio gehiago: Erabili objektu-egiaztatzailea soluzio-osagai bat diagnostikatzeko (aurrebista)
Hurrengo urratsak
Diseinatu inprimaki nagusi produktiboak ereduetan oinarritutako aplikazioetan