L’utilizzo di ORDA per accedere a tabelle di grandi dimensioni (in particolare quelle con relazioni) in modalità Client/Server è stato notevolmente migliorato. Con 4D v17 R5, le prestazioni della LAN sono migliorate di 2-3 volte e quelle della WAN fino a 30 volte. E soprattutto non c’è bisogno di modificare nulla nel codice, è tutto automatico. Interessante, vero? Bene, entriamo nei dettagli.
In genere, quando si carica un record in un’applicazione client, tutti i campi del record vengono trasferiti dal server. Anche quelli che non servono. Pertanto, le prestazioni dipendono dalla progettazione dell’applicazione, dalla struttura del database e dalle capacità della rete… soprattutto quando si utilizzano tabelle di grandi dimensioni con campi multipli o di grandi dimensioni. Ad esempio, su una WAN lenta, utilizzando solo pochi campi in caselle di riepilogo basate sulla selezione (di tabelle con decine di campi con molte relazioni/campi e testo/immagini di grandi dimensioni), l’applicazione sarà presto fuori servizio.
Le richieste ORDA in precedenza utilizzavano lo stesso principio di caricamento dei campi… fino ad ora! Con la versione 17 R5, il server analizza gli attributi necessari in ogni classe di dati e identifica gli attributi correlati, in modo da trasferire tra il server e il client solo i dati richiesti.
STUDIO DI CASO
Per illustrare questi miglioramenti, utilizziamo un semplice database:
La tabella Libro ha 1.000 record. Il suo campo riassunto contiene da 100 a 2.000 caratteri e il campo miniature contiene circa 10KB di immagini. Nella tabella Author, il campo biografia contiene 10.000 caratteri per ogni record.
Utilizzando questo database, abbiamo creato due caselle di riepilogo basate sulla selezione: una che utilizza una selezione di entità ORDA e l’altra che utilizza una selezione classica. In ogni casella di riepilogo, abbiamo scelto di visualizzare il titolo del libro insieme all’autore, per attivare le relazioni. Abbiamo anche aggiunto un’azione per far scorrere automaticamente la casella di riepilogo, in modo che nessuna azione umana possa disturbare i risultati:
Le misure riportate nella tabella sottostante mostrano i frame TCP trasmessi tra il server e il client (comprese tutte le risposte di riconoscimento) dell’esempio riportato nel video. La connessione di rete del client è di tipo Wi-Fi “802.11ac” (250Mbps in download, 100Mbps in upload, con 1ms di ritardo):
Mode | Frames | Overall size (bytes) | Durata (ms) |
Classico | 4,070 | 473,924 | 5,747 |
ORDA | 46 | 6,744 | 692 |
Come si può notare, l’utilizzo di ORDA comporta il trasferimento di pochi fotogrammi! E la durata? Più la rete è lenta, maggiore è la differenza tra ORDA e l’approccio classico.
Un nuovo concetto: contesto di OTTIMIZZAZIONE
Questo permette di registrare ciò che il sistema ha appreso e di riutilizzarlo in seguito. Per farlo, è sufficiente creare un oggetto opzione contenente un attributo“contesto” e specificare il valore desiderato prima di impostare l’oggetto come parametro:
Se (Form.currentContext=Null)
Form .currentContext:=New object("context"; "contextListboxBookAndAuthor")
End if
Form .books:=ds.Book.all(Form.currentContext)
Questo oggetto opzione può ora essere utilizzato con il comando Create entity selection e i seguenti metodi membri: dataClass. query (), entitySelection. query (), dataClass. fromCollection () e ClasseDati . all().
N.B.: Nella tabella delle misure, non abbiamo attivato la funzione di contesto per essere il più precisi possibile.
Per concludere:
ORDA semplifica i vostri sviluppi:
- Accelera il trasferimento delle informazioni, senza modifiche al codice.
- Non è necessario spostare campi di grandi dimensioni da una tabella e memorizzarli in una tabella correlata 1-1 per evitare impatti sulla modalità Client/Server.
- Quando si desidera accedere al server al di fuori della LAN, è ora possibile collegare direttamente il client… senza utilizzare tecnologie di desktop remoto.