クライアントと4Dサーバー間のORDAリクエストのトラフィックを分析する必要があることはありませんか?時々、サーバーから応答を受け取るのに時間がかかることがあり、それがネットワークトラフィックのせいなのか、それともあなたが書いた最適化されていないリクエストのせいなのか、疑問に思うことがあるかもしれません。ありがたいことに、4D v17 R6 では、この遅延の原因を、新しい ORDA メソッドで判断することができます。 dsオブジェクトで利用できる新しいORDAメソッドで、この遅延の原因と思われるものを特定することができます。これらはデバッグ機能だけでなく、送信されたリクエストをよりよく理解することで、ORDAコードを最適化することができます。
ORDAリクエストのログを有効にする
この startRequestLog()メンバーメソッドは非常に柔軟で、ORDA リクエストをファイルまたはメモリにログ記録することができます。
ファイルにログを記録する
ファイルにログを記録するには、単に startRequestLog()を呼び出します。 Fileオブジェクトを使用して呼び出すだけで、 ORDA リクエストがどこに記録されるかがわかります。以下の例では、インデックスがないフィールドに対してクエリを実行していますが、これには時間がかかる可能性があります。この新しい機能のおかげで、リクエストの持続時間をチェックすることができます。
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()
各リクエストは、オブジェクトのJSON表現としてログに記録されます。
以下は、ORDARequests.txtファイルの内容である。
[
….
{
...
"startTime": "2019-07-02T12:33:25.922Z",
"endTime": "2019-07-02T12:33:27.681Z",
"duration":4200,
"response":{ ...}
となります。
}
]
ログからメモリへ
各リクエストはコレクション内のオブジェクトとして記録され、 それを getRequestLog()member メソッドで取得できます。
コレクションを返すので、利用可能なすべてのコレクションメソッドを使用することができます。
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 ("The longest request lasted: "+String($log.max("duration"))+" ms")
ds (
最長
リクエスト時間)。stopRequestLog()
ORDAリクエストのロギングを無効にする
ORDA リクエストのログを停止するには、上記の例のように stopRequestLog()member メソッドを呼び出すだけです。