Lenteur cmd::byId

Hello,

J’ai remarqué quelques lenteurs lorsque j’essaye de récupérer un commande par son identifiant:

LogLightGroup::debug('Start construct sensor - get cmdId ' . microtime());
$cmd = cmd::byId($cmdId);
LogLightGroup::debug('Start construct sensor - got cmd ' . microtime());

Voici les logs que j’obtiens:

Start construct sensor - get cmdId 0.11846100 1704199639
Start construct sensor - got cmd 0.54253000 1704199639

cela prend grosso modo 0.4s pour récupérer la cmd.
Je suis étonné car en regardant le core jeedom cela paraît être une bête requete SQL derrière.
Quelqu’un aurait une idée de comment je pourrais optimiser cela ?

Merci pour l’aide :slight_smile:

Bonjour
Si tu le fais sur une commande d’un autre plugin tu as le même soucis ?

Avant j’attaiquais une cmd du plugin ZigbeeLinker.
Je viens de tester avec une commande du plugin Z-Waze

Start construct sensor - get cmdId 0.77796200 1704201041
Start construct sensor - got cmd 0.81175500 1704201041

C’est effectivement plus rapide …
Une idée de ce qui pourrais causer cela ?

Bien à toi et merci pour l’aide

Peut être une fonction pré/post quelques part dans ta classe

Hello,

Dans tests, tu LOGes les réponses, et ça, ça peut fausser le résultat.

Etant donné que ça m’inquiétait, j’ai aussi fais des tests en SSH sur mon Jeedom de dev (VM) :
CPU : 2 vCPU (i5-10500T CPU @ 2.30GHz)
Charge : 0.04 - 0.09 - 0.07
Mémoire disponible : 18 % (Total 1971 Mo)
Version PHP : 7.4.33

bad@jeedev:~$ php -a
Interactive mode enabled
php > require_once '/var/www/html/core/php/core.inc.php';
php > $t=microtime(true); $cmd=cmd::byId(44); echo 1000*(microtime(true)-$t);
12.547969818115
php > $t=microtime(true); $cmd=cmd::byId(44); echo 1000*(microtime(true)-$t);
0.15687942504883
php > $t=microtime(true); $cmd=cmd::byId(44); echo 1000*(microtime(true)-$t);
0.22697448730469
php > $t=microtime(true); $cmd=cmd::byId('44'); echo 1000*(microtime(true)-$t);
0.1990795135498
php > $t=microtime(true); $cmd=cmd::byId('9130'); echo 1000*(microtime(true)-$t);
1.3549327850342
php > $t=microtime(true); $cmd=cmd::byId(7754); echo 1000*(microtime(true)-$t);
2.1939277648926
php > $t=microtime(true); $cmd=cmd::byId(7755); echo 1000*(microtime(true)-$t);
0.45204162597656
php > $t=microtime(true); $cmd=cmd::byId(9134); echo 1000*(microtime(true)-$t);
0.17309188842773
php > $t=microtime(true); $cmd=cmd::byId(9137); echo 1000*(microtime(true)-$t);
0.21100044250488
php > $t=microtime(true); cmd::byId(9136); echo 1000*(microtime(true)-$t);
0.19598007202148

Comme tu le vois, au pire (toute première requête) j’ai obtenu 12ms, c’est très loin de tes ~400ms :open_mouth:

Je pense qu’il faut que tu nous en dises plus sur le système que lequel tu fais tes tests.

Bad