Souhaitez-vous participer à la création d'un jeu vidéo inspiré de Stardew Valley, ou le tester lorsque la version bêta sera disponible ? Remplissez notre sondage ou inscrivez-vous à notre lettre d'information (en bas de page)
1

Minimiser le temps d'exécution d'un script en php

le 19-08-2014 à 12:23 #
Bonjour à tous,
Je voudrais savoir comment minimiser le temps d'exécution d'une fonction, parce que le traitement arrive jusqu'à 40 min pour m'afficher le résultat final :s (j'ai une fonction qui fait un traitement sur les lignes d'un fichier, donc ça dépend du nombre de lignes !!)

Y'a t-il moyen d'exploiter les proxys ? si oui comment en php, sachant que je travaille sur un serveur pas en local !

merci d'avance :)

Re: Minimiser le temps d'exécution d'un script en php
le 19-08-2014 à 15:00 #
Salut,

Sans voir le code, difficile de dire quoi optimiser

On peut utiliser des proxys en PHP mais je ne vois pas à quel niveau cela interviendrait dans ton cas.

Peut-être une simple mise en cache des résultats ?

Ben
Re: Minimiser le temps d'exécution d'un script en php
le 19-08-2014 à 15:12 #
Salut,
désolée j'avais pas donnée plus de détails, mais bon voilà!

je travaille avec cette fonction verifyEmail() : https://github.com/hbattat/verifyEmail
et j'ai le tout connecté à un serveur FTP où l'utilisateur peut uploader un fichier et parcourir ses lignes pour tester les adresses qu'il contient et ceci avec ce bout de code:

$lignes=file('new.txt');
echo 'Validation de ses adresses emails : ';
echo '</br></br>';
for ($i=0; $i<count($lignes);$i++)
{
echo $lignes[$i].var_dump(verifyEmail(trim($lignes[$i]), 'testproweb2014@gmail.com')).'</br>';

}


le problème que j'ai c'est que le traitement ets vraiment long pour un fichier avec plusieurs adresses !!
Re: Minimiser le temps d'exécution d'un script en php
le 19-08-2014 à 15:20 #
Je pense que la lenteur vient du temps de réponse des serveurs de mails .


Re: Minimiser le temps d'exécution d'un script en php
le 19-08-2014 à 15:25 #
Comme tu te connectes à une série de serveurs, il n'y a pas vraiment de possibilité de réduire le temps qu'ils mettent à répondre.

Deux choses que tu peux faire: d'une part dans la fonction verifyEmail, tu pourrais mettre en cache les $mx_ip (p.ex si tu as plusieurs adresses gmail dans la liste, ça ne sert à rien de redemander les infos dns chaque fois, tu reprends celles que tu avais la dernière fois, tu éviteras ainsi pas mal d'appels de dns_get_record() et getmxrr())

Tu peux également lancer plusieurs opérations en même temps en faisant du multithread, comme ça pendant qu'une thread est bloquée à attendre une réponse d'un serveur mail, les autres continuent à travailler.
Re: Minimiser le temps d'exécution d'un script en php
le 19-08-2014 à 16:09 #
Merci bien pour vos réponses :)
pour ce qui est du multithread, j'avais cherché et tout mais j'ai trouvé que c'était assez compliqué et j'ai pas su comment y procéder du coup j'ai laissé tomber :s
sinon pour ton idée ben de mettre en cache j'ai trouvé que c intéressant mais cmnt faire ? si tu peux me montrer ça serait génial de ta part !

Ajout du 19-08-2014 à 18:15:

J'ai jeté un coup d'oeil sur le lien que tu m'as proposée sur le multithread mais c'est un peu avancé du coup je n'ai rien compris :s
Re: Minimiser le temps d'exécution d'un script en php
le 19-08-2014 à 19:53 #
le principe d'un cache:

- vérifier si la donnée se trouve dans le cache
-- si oui, récupérer la valeur
-- si non, générer la valeur et la placer dans le cache

En php ça se fait facilement avec un tableau associatif.

Par exemple:

$cache = array();

[...]

$valeur = $cache[$parametres];
if (!$valeur){ // le cache n'a rien retourné pour ces paramètres
$valeur = fonctionTresGourmande($parametres);
$cache[$parametres] = $valeur;
}
Re: Minimiser le temps d'exécution d'un script en php
le 20-08-2014 à 16:20 #
Bonjour !
dsl je me demande si ceci je dois le mettre après la fonction ou bien où exactement ?
Re: Minimiser le temps d'exécution d'un script en php
le 20-08-2014 à 16:27 #
Dans la fonction verifyEmail(), et faire en sorte de conserver le cache (p.ex le passer par référence dans la fonction)
Re: Minimiser le temps d'exécution d'un script en php
le 25-08-2014 à 16:36 #
Salut,
après qlq petites recherches et lectures, j'ai pas toujours réussi à mettre en cache , comme ça je ne demanderai pas les mêmes infos à chaque fois pour une liste des emails gmail!

J'ai pas tout compris certainement...
Si vous pouvez m'aider encore plus j'en serai très reconnaissante !

Ajout du 25-08-2014 à 17:16:

$cache = array();
[...]
$valeur = $cache[$parametres];
if (!$valeur){ // le cache n'a rien retourné pour ces paramètres
$valeur = fonctionTresGourmande($parametres);
$cache[$parametres] = $valeur;
}


Comment mettre ceci pour ma fonction verifyEmail ? ça serait quoi $valeur et $cache ?

(Modifié par Claire456 le 25-08-2014 à 18:09)
Re: Minimiser le temps d'exécution d'un script en php
le 25-08-2014 à 18:06 #
$cache c'est le cache (ici un tableau associatif) dans lequel tu conserves des résultats afin d'éviter de relancer une fonction qui prend du temps
$valeur, c'est la valeur dont tu as besoin, qui peut être déjà présente dans le cache ou pas

Dans la fonction verifyEmail tu as deux appels de fonctions qui prennent du temps et qu'on pourrait éviter lorsque le domaine est connu : getmxrr() et dns_get_record()

Tu peux les cacher séparément, ou cacher uniquement le résultat $mx_ip

J'ai l'impression que tu ne sais pas vraiment ce que tu fais, et que tu y vas à l'aveuglette. Il est important que tu prennes le temps d'étudier le langage, en partant des bases. Sinon tu dépendras toujours des autres. Il y a beaucoup de cours gratuits sur le net.

Tu pourrais par exemple modifier à partir de la ligne 14:

if (!isset($cache)) $cache = array();

$domain = strtolower($domain); // mettre en minuscules pour éviter d'avoir plusieurs formats différents dans le cache (p.ex gmail.com, GMAIL.com, Gmail.com, ...)

$mx_ip = $cache[$domain];
if (!$mx_ip){ // le cache n'a rien retourné pour ces paramètres

// ici, les lignes 15 à 40 de la fonction

$cache[$domain] = $mx_ip;
}

// on arrive à l'actuelle ligne 42 $connect = @fsockopen($mx_ip, 25); etc


Sauf que la variable $cache serait perdue à chaque appel de ta fonction, il faut donc utiliser un appel par référence. La fonction modifiée sera:

function verifyEmail($toemail, $fromemail, $getdetails = false, &$cache)

dans ton code tu appelles verifyEmail($toemail, $fromemail, true, $cache);

Le & indique l'appel par référence, $cache existe en dehors de verifyEmail et est modifié à chaque appel.

Tout ça est approximatif, j'ai pas testé.




Ces discussions pourraient vous intéresser également:


script pour affiche l'actualite en temps reel sur son site
Barre de progressement lors de l'exécution d'une fonction
Script php (help me)
script
script php news