Ottimizzare il codice ORDA con la registrazione delle richieste

Tradotto automaticamente da Deepl

Avete mai avuto bisogno di analizzare il traffico delle vostre richieste ORDA tra un client e il server 4D? A volte ci vuole un po’ di tempo per ricevere una risposta dal server, il che può farvi chiedere se è dovuto al traffico di rete o a una richiesta non ottimizzata che avete scritto! Fortunatamente, 4D v17 R6 consente di determinare la probabile ragione di questa latenza con i nuovi metodi ORDA disponibili sull’oggetto ds dell’oggetto. Non sono solo funzioni di debug, ma consentono anche di ottimizzare il codice ORDA con una migliore comprensione delle richieste inviate.

Abilitare la registrazione delle richieste ORDA

Il metodo startRequestLog() è un metodo membro molto flessibile, in quanto può registrare le richieste ORDA su un file o in memoria.

registrare in un file

Per registrare in un file, è sufficiente chiamare startRequestLog() con un oggetto File che indica dove verranno registrate le richieste ORDA. Nell’esempio che segue, viene eseguita una query su un campo non indicizzato, che potrebbe richiedere del tempo. Grazie a questa nuova funzionalità, possiamo controllare la durata delle nostre richieste:

C_OBJECT($employees;$file)
$file :=File("/PACKAGE/Logs/ORDARequests.txt")
$file .delete()
ds .startRequestLog($file)
$employees :=ds.Employee.query("firstname = :1"; "abcd") //firstname is not indexed

ds .stopRequestLog()

Ogni richiesta viene registrata come rappresentazione JSON di un oggetto.

Ecco il contenuto del file ORDARequests.txt:

[
{
...
"startTime": "2019-07-02T12:33:25.922Z",
"endTime": "2019-07-02T12:33:27.681Z",
"duration":4200,
"response":{ ...}
.
..
}
]

log in memoria

Ogni richiesta può essere registrata come oggetto in un insieme che può essere recuperato con il metodo getRequestLog() membro.

Poiché restituisce un insieme, è possibile utilizzare tutti i metodi di raccolta disponibili.

C_OBJECT($first;$e)
C_COLLECTION (
$log)

ds .startRequestLog(10) // Only the last 10 requests will be kept in memory
$first :=ds.Persons.all().first()
$e :=ds.Persons.query("name=:1"; "Brown")
$log :=ds.getRequestLog()
ALERT ("La richiesta più lunga è durata: "+String($log.max("durata"))+" ms")
ds .stopRequestLog()

disabilitare la registrazione delle richieste ORDA

Per interrompere la registrazione delle richieste ORDA, è sufficiente richiamare il metodo stopRequestLog() come mostrato negli esempi precedenti.

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.