IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Optimisation script php


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Inscrit en
    Août 2009
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 39
    Points : 30
    Points
    30
    Par défaut Optimisation script php
    Bonjour!

    J'ai un petit soucis afin d'optimiser mon code php, jvais partir du début:
    Un client de ma boite souhaite me transférer une grosse partie de sa bdd mais pour des raisons un peu compliquées (et vu que c'est pas le but de raconter ma vie ici ) me les transfer via des pages html en json.
    C'est à dire que quand j'appelle sa page ca ressemble à ceci:

    url: http://www.xxx.com/data/50000/
    Contenu:
    [{"creation":"","mode":"Classique","type":"pointer","Suivi":0,"log":[{"date":null,"time":"00:01:42 05/03/2013","type":null,"sent_to":"Admin","message":"Warning in E202 - pointer", ETC ETC ETC.
    Je n'ai accès qu'à ces pages html, qui sont trèèèèèèès nombreuses (de l'ordre des 5-6 millions).
    Via mon code, j'éxécute de cette façon:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    @$recept = file("http://www.xxx/data/COUNTRY_ID/$j/"); // Get the Json form
    $_JsonParsedFile = json_decode($recept[0]);
    Néanmoins, rien que cette partie prend environ 2-3 secondes à s’exécuter.
    Et pour les 5.000.000 d'url que j'ai à fouiller j'ai calculé que ca me prendrait le mois
    La question que j'ai: Existe t-il une fonction beaucoup plus rapide afin d'attraper ces données?
    Le reste de mon code ne pose aucun soucis vu qu'il met moins de 0.1 seconde pour traiter une centaine de cas (testé et approuvé ).
    Néanmoins, ce sont vraiment ces 2-3 secondes qui me plombent entièrement tout le script

    Si quelqu'un a une idée de comment faire je le remercie d'avance

  2. #2
    Membre expérimenté Avatar de Lorenzo77
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    1 472
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 472
    Points : 1 537
    Points
    1 537
    Par défaut
    salut,

    pour ce genre de problème, je lancerais un max de script en parallèle !
    tu ne peux pas utiliser une client FTP pour DL les fichiers et seulement ensuite les traiter ?
    mais je pense que tu es parti dans la mauvaise direction, s'il peut mettre de l'HTML sur son serveur, il peut aussi proposer la BD en binaire, pourquoi faire simple ...
    normalement pour renvoyer une chaine d'un fichier, faut utiliser file_get_contents mais je suis pas sur que ca fasse une enorme diff au niveau des perfs

  3. #3
    Expert confirmé
    Avatar de N1bus
    Homme Profil pro
    Dev. Web & OpenERP
    Inscrit en
    Janvier 2003
    Messages
    2 827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Dev. Web & OpenERP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 827
    Points : 5 673
    Points
    5 673
    Par défaut
    C'est clair.
    Il devrait au moins pouvoir t'exporter ça en CSV , même en plusieurs fois.

  4. #4
    Nouveau membre du Club
    Inscrit en
    Août 2009
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 39
    Points : 30
    Points
    30
    Par défaut
    Salut!

    Merci pour les réponses déjà!
    C'est ce que j'ai commencé à faire, j'utilise 3 pc et je fais tourner un max de scripts en même temps
    Et non, je n'ai malheureusement pas de ftp/ssh et le client (pour résumé) est un radin, qui a uniquement la solution du json en place et qui souhaite:

    ne pas perdre de temps sur des futilités


    Je vais tester en remplacant file_get_contents, si ca peut me faire gagner ne serait-ce qu'un dixième de seconde c'est déjà ca ^^

  5. #5
    Expert confirmé
    Avatar de N1bus
    Homme Profil pro
    Dev. Web & OpenERP
    Inscrit en
    Janvier 2003
    Messages
    2 827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Dev. Web & OpenERP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 827
    Points : 5 673
    Points
    5 673
    Par défaut
    Même radin , exporter en Json ou en CSV, c'est pas la mort non plus. et pour toi, ça change tout.

  6. #6
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Donc tu veux faire du reverse-engeneering sur le site de quelqu'un et tout ce que t'as ce sont des pages HTML.

    J'ai bien une solution mais elle va carrément pas te plaire: va faloir paralléliser ! Par au niveau des machines mais au niveau des thread. Bref, on va faire du vrai multithreading avec PHP, youpi !

    Avant de commencer, mets toi un environement PHP 5.4 et surtout, fais ton script en mode CLI (ça ira 20x plus vite qu'avec Apache).

    Donc l'idée c'est de créer un processus qui va regarder quelles tâches effectuer, les découper en segments (ou blocs) qu'il délègue à des processus fils. Les fils, une fois qu'ils ont fini un bloc notifient le parent et celui-ci en démare alors de nouveaux. Tu peux par exemple créer 64 threads qui s'occupent de blocs de 100 items par exemple. Attention à la limite mémoire et aux goulots d'étranglement par contre !

    Sinon, tu peux envisager de le faire en Java ou .Net, ce sera sûrement plus rapide.

  7. #7
    Nouveau membre du Club
    Inscrit en
    Août 2009
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 39
    Points : 30
    Points
    30
    Par défaut
    Merci beaucoup pour les réponses apportées!
    Je vais tester les thread avec PHP 5.4. C'est clair que ca devrait être beaucoup plus rapide
    J'utilise php uniquement en ligne de commande de base sur linux (centOS).

    Concernant le java/.net ca serait effectivement de bonnes options si... je connaissais ces langages
    Va falloir que je me renseigne la dessus, si effectivement c'est plus rapide je demande à tester!
    En tout cas merci pour les thread, j'y avais tout simplement pas pensé (j'ai pas l'habitude de les utiliser avec PHP )
    C'est parti

Discussions similaires

  1. [SQL-Server] Optimisation Script PHP
    Par JmL40 dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 06/05/2014, 18h40
  2. [MySQL] Optimisation de scripts PHP/MySQL
    Par DgG dans le forum PHP & Base de données
    Réponses: 368
    Dernier message: 20/11/2013, 18h59
  3. [MySQL] Optimisation script PHP et Mysql
    Par Invité dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 25/06/2013, 09h39
  4. [Débutant] Accélérer et optimiser ses scripts PHP
    Par Metallic-84s dans le forum Langage
    Réponses: 6
    Dernier message: 24/03/2006, 12h37
  5. [MySQL] [Script]Optimisation de scripts Php/MySQL (2)
    Par copy dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 27/08/2004, 08h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo