Partekatu bidez


Diseinatu inprimakiak eredu bidezko aplikazioetan

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:

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:

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 window objektuan 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:

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