Aidez-moi svp à corriger la LENTEUR du temps d'exécution de ma boucle while avec la Librairie LIBPHONENUMBER-FOR-PHP

Eléphant du PHP | 137 Messages

26 mai 2020, 20:35

BONSOIR.

Je ne sais pas si c'est moi qui code mal mais vraiment la lenteur de mon la code avec la Librairie Libphonenumber-For-PHP (https://github.com/giggsey/libphonenumber-for-php) + le formatage de mes numéros selon le pays est d'un casse-tête qui ne dit même pas son nom.

En fait, j'essaie de générer une liste de numéro parsés avec la Libphonenumber-For-PHP (https://github.com/giggsey/libphonenumber-for-php) en me servant de la boucle while.

Avec une simple boucle while de génération de Numéros sans inclure la Librairie Libphonenumber-For-PHP (https://github.com/giggsey/libphonenumber-for-php) tel que le code ci-dessous, il prend avec succès, seulement quelques Millisecondes pour générer une liste de 1000000 de Numéros sans problème.

Code : Tout sélectionner

$i = 900000000; $iEnd = $i + 1000000; $string = ''; while ($i <= $iEnd) { $string .= "+225". $i."\r\n"; $i++; } file_put_contents('generated.txt', $string);

Mais LE PLUS GROS SOUCI, c'est lorsque j'inclus la Librairie Libphonenumber-For-PHP (https://github.com/giggsey/libphonenumber-for-php) exactement comme dans le code suivant, cela fait une éternité avant de se générer:

Code : Tout sélectionner

// chargement de la librairie require_once("vendor/autoload.php"); // instanciation de la class PhoneNumberUtil $phoneUtil = \libphonenumber\PhoneNumberUtil::getInstance(); $i = 03000000; $iEnd = $i + 1000000; $string = ''; while ($i <= $iEnd) { $string .= $i."\r\n"; $parse = $phoneUtil-]parse($string, "CI"); $isValid = $phoneUtil-]format($parse, \libphonenumber\PhoneNumberFormat::E164); // Format E164 $i++; } file_put_contents('generated.txt', $isValid);

Vraiment, j'implore votre clémence, aidez-moi s'il vous plaît à corriger ma boucle while de sorte à ce qu'elle genère TRES RAPIDEMENT les 1000000 Numéros parsés avec la Librairie Libphonenumber-For-PHP (https://github.com/giggsey/libphonenumber-for-php).

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

26 mai 2020, 21:51

Tu prend une librairie PHP composée de 1107 fichiers et qui pèse 17 Mo, tu y fais appel 1 million de fois et tu trouves ça beaucoup plus lent qu'une simple boucle while... bah... c'est normal :-D

Soit tu essaye d'optimiser la librairie concernée, mais bon courage pour ça.
Soit tu recodes la partie de cette librairie qui t'intéresse pour ne garder que le strict nécessaire.
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphant du PHP | 137 Messages

26 mai 2020, 22:37

Ça ne m'aide en rien. En fait, je ne comprends pas. J'ai besoin d'aide

Avatar du membre
Mammouth du PHP | 1609 Messages

26 mai 2020, 22:46

Tu ne peux pas faire aller la librairie plus vite qu'elle ne va, c'est comme ça, sauf à réécrire son code ou à écrire le tien.

En revanche j'ai l'impression qu'il y a un problème de logique dans ton code.
Tu passes une chaine toujours plus longue à la méthode parse. ($string .= $i."\r\n";). Tu as peut être ici une source à cette lenteur, ça dépend de ce que fait la méthode avec la chaine que tu lui passes.
Et tu enregistres $isValid avec le file_put_contents alors que la variable ne contient que le dernier numéro...
De plus je ne connais pas la syntaxe -] chez moi c'est -> mais j'ai peut être raté une innovation php avec mes vieilles habitudes. ^^
Développeur web depuis + de 20 ans

Eléphant du PHP | 137 Messages

27 mai 2020, 09:29

Le code chez moi c'est avec > et non ]. Et il marche très bien sauf que le problème de lenteur se pose toujours. Je ne sais pas à quel moment cette erreur est survenue.

Code : Tout sélectionner

// chargement de la librairie require_once("vendor/autoload.php"); // instanciation de la class PhoneNumberUtil $phoneUtil = \libphonenumber\PhoneNumberUtil::getInstance(); $i = 03000000; $iEnd = $i + 1000000; $string = ''; while ($i <= $iEnd) { $string .= $i."\r\n"; $parse = $phoneUtil->parse($string, "CI"); $isValid = $phoneUtil->format($parse, \libphonenumber\PhoneNumberFormat::E164); // Format E164 $i++; } file_put_contents('generated.txt', $isValid);

Déjà je me demande pourquoi c'est seulement le dernier numéro qui est pris en compte dans la variable isValid ???
Comment traiter tous les numéros De la variable $i inférieurs ou égaux à $iEnd avec le formatage en E164 via la librairie LIBPHONENUMBER-FOR-PHP ???

Aidez-moi à revoir totalement le code svp avec bien sûr un nouvel exemple de code.

Merci d'avance

Mammouth du PHP | 1967 Messages

27 mai 2020, 13:50

On ne connait pas ta librairie, il faut que tu regarde sa doc.

mais a priori essaye ceci
while ($i <= $iEnd) {
$parse = $phoneUtil->parse($i, "CI");
$isValid = $phoneUtil->format($parse, \libphonenumber\PhoneNumberFormat::E164); // Format E164
$string .= $isValid."\r\n";
$i++;
}
c'est ce que souligne Saian
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube