ORDA – Ottimizzare le prestazioni con il pieno controllo delle richieste REST

Tradotto automaticamente da Deepl

In una versione precedente, avete scoperto che le richieste ORDA REST sono state ottimizzate automaticamente per aumentare le prestazioni quando si lavora con un datastore remoto e con configurazioni client/server.

Si è appreso che è possibile utilizzare i contesti per sfruttare l’ottimizzazione automatica delle richieste ORDA REST.

Questo è stato un passo importante, ma ora vi offriamo il controllo completo sul comportamento delle vostre richieste REST. Poiché le prestazioni sono una preoccupazione strategica, non vedrete l’ora di scoprire questa nuova funzionalità!

E non è tutto: sono ora disponibili nuovi strumenti per aiutarvi a capire e a eseguire il debug dei vostri problemi.

Continuate a leggere per una presentazione completa.

HDI: Come iniziare a controllare le richieste REST?

Vi ricordate cos’è il contesto?

Prima di iniziare, ecco un rapido riassunto:

  • quando si lavora con una selezione di entità, dopo una fase di apprendimento, 4D attiva automaticamente delle richieste ottimizzate (chiedendo al server pagine di entità con solo gli attributi appropriati)
  • è possibile utilizzare un contesto per rendere persistente tale ottimizzazione e riutilizzarla quando si lavora con altre selezioni di entità (o entità)

Avete sentito parlare della cache orda?

Quando si richiedono dati al server con ORDA, questi vengono inseriti nella cache ORDA sul computer client.

La cache ORDA è organizzata per classi di dati. Le entità caricate vengono memorizzate nella cache ORDA come oggetti contenenti il contenuto degli attributi richiesti.

Per maggiori dettagli sui contesti e sulla cache ORDA, guardate la sessione del Summit 2020.

Il nuovo passo: prendere il controllo completo dei contesti

Come avete capito, gli attributi di un contesto sono definiti dalla fase di apprendimento di 4D. Grazie al datastore, il grande passo avanti è che ora è possibile decidere quali attributi includere in un determinato contesto con la funzione .setRemoteContextInfo().

esempio

In questo esempio, inseriamo gli attributi firstname e lastname della classe di dati Persone nel contestoA.

In questo modo, quando si chiama la funzione all() la prima entità Persons non è completamente caricata per la fase di apprendimento. Le richieste inviate al server sono già completamente ottimizzate.

var $ds : 4D.DataStoreImplementation
var $contextA : Object
var $persons : cs.PersonsSelection
var $p : cs.PersonsEntity
var $text : Text

$ds :=Open datastore(New object("hostname"; "school.acme.com"); "schools")

$ds .setRemoteContextInfo("contestoA"; "Persone"; New collection("nome"; "cognome"))
$contextA :=New object("contesto"; "contestoA")
$persons :=$ds.Persons.all($contestoA)
$text :="
For each ($p; $persons)
$text :=$p.firstname+" "+$p.lastname
End for each

sulle caselle di riepilogo

Si noti che se la selezione dell’entità $persone è usata in una casella di riepilogo, è possibile specificare gli attributi desiderati nel contesto della modalità pagina.

Nell’esempio seguente, il contesto della casella di riepilogo contiene gli attributi firstname e lastname della classe di dati Persone.

Quando si seleziona un’entità, questa viene immediatamente caricata con gli attributi del contesto dell’elemento corrente (firstname, lastname, children, gender).

Non c’è più una fase di apprendimento che richieda il caricamento completo della prima entità.

var $contextPersons

FormpersonsFormdsPersonsall$contextPersons: Object
var $listAttributes ; $pageAttributes: Collection

$contextPersons :=New object("contesto"; "persone")
$listAttributes :=New collection("nome"; "cognome")

Form .ds.setRemoteContextInfo("persone"; Form.ds.Persons; $listAttributes) //Form.ds is a remote datastore

$pageAttributes :=New collection("nome"; "cognome"; "figli"; "sesso")
Form .ds.setRemoteContextInfo("persone"; Form.ds.Persons; $pageAttributes; //Form.persons is displayed in a list box

gestire la lunghezza della pagina per le selezioni di entità

È possibile impostare una lunghezza di pagina per le selezioni di entità richieste dal server. La buona notizia è che questo vale anche per gli attributi delle entità legate al genere.

Le entità Indirizzo sono richieste al server da pagine di 100 entità con l’attributo city nell’esempio seguente.

Per ogni entità Indirizzo, le entità correlate persone (selezione delle entità) sono richieste da pagine di 50 entità con gli attributi firstname e lastname.

var $ds : 4D.DataStoreImplementation
var $contextA : Object
var $addresses : cs.AddressSelection
var $a : cs.AddressEntity
var $p : cs.PersonsEntity
var $text : Text

$ds :=Open datastore(New object("hostname"; "school.acme.com"); "schools")

$ds .setRemoteContextInfo("contextA"; $ds.Address; "city, persons:50, persons.lastname, persons.firstname"; "main"; 100)

$contextA :=New object("context"; "contextA")
$addresses :=$ds.Address.all($contextA)

$text :=""
For each ($a; $addresses)
$text :=$text+"/"+$a.city
For each ($p; $a
.persons )
$text :=$text+" - "+$p.firstname+$p.lastname
End for each
End for each

la cache ORDA

Sono disponibili altri strumenti utili per gestire il timeout e la dimensione massima della cache ORDA e per ispezionare il contenuto della cache ORDA.

Ulteriori informazioni sono disponibili sul sito web della documentazione.

Ad esempio, è possibile modificare il timeout della cache ORDA per adattare la frequenza delle richieste. Questo è utile quando si sa se i dati cambieranno spesso o meno.

esempio

Nell’esempio seguente, la classe di dati Città contiene codici di avviamento postale e città che probabilmente non cambieranno molto spesso, quindi il timeout è esteso.

var $ds : 4D.DataStoreImplementation
$ds :=Open datastore(New object("hostname"; "school.acme.com"); "schools")
// The entities will expire after 3 hours
// There are 350 entities maximum in the cache of the Cities dataclass
$ds .Cities.setRemoteCacheSettings(New object("timeout"; 10800; "maxEntries"; 350))

Per risparmiare memoria, si può anche aggiornare il numero massimo di entità presenti nella cache per ogni classe di dati.

ispezionare e ripristinare i contesti

Per aiutarvi a immergervi in questo affascinante argomento, visitate la documentazione.

Importante: si noti che probabilmente sarà necessario ispezionare le richieste per una comprensione completa e per il debug.

un’altra cosa

Non molto vicina a questa funzionalità, ma preziosa, la funzione dataClass.getCount() è ora disponibile per ottenere il numero di entità in una classe di dati.

Questo evita di chiamare dataclass. all().length costruisce una selezione di entità sul server e carica completamente la prima entità sul client.

var $count : Integer

$count :=ds.Persons.getCount()

ora giocare con l’HDI e la demo di Summit 2020

Scaricate la demo della sessione HDI and the Summit 2020 per saperne di più!

Avatar
- Product Owner - Marie-Sophie Landrieu-Yvert è entrata a far parte del team 4D Product come Product Owner nel 2017. In qualità di Product Owner, è incaricata di scrivere le storie degli utenti e di tradurle in specifiche funzionali. Il suo ruolo è anche quello di assicurarsi che l'implementazione della funzionalità fornita soddisfi le esigenze del cliente.Marie-Sophie si è laureata presso la scuola di ingegneria ESIGELEC e ha iniziato la sua carriera come ingegnere presso IBM nel 1995. Ha partecipato a vari progetti (di manutenzione o di costruzione) e ha lavorato come sviluppatrice Cobol. In seguito ha lavorato come progettista UML e sviluppatore Java. Ultimamente i suoi ruoli principali erano l'analisi e la scrittura dei requisiti funzionali, il coordinamento dei team di business e di sviluppo.