Soutenez-nous
Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 7 sur 7
  1. #1
    Invité de passage
    Inscrit en
    mai 2011
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : mai 2011
    Messages : 2
    Points : 0
    Points
    0

    Par défaut Gros callback : blocage navigateur

    Bonjour,

    J'ai réalisé un script de crible d’Ératosthène en PHP (renvoie tout les nombres premiers de 0 a n).

    A la fin du traitement, ma requête Ajax renvoie un tableau 'jsonp' des nombres premiers en callback pour ensuite l'afficher dans une div.

    Cependant lorsque le tableau de retour est très gros (environ >= 100000 nombres) le navigateur se bloque le temps du callback et du remplissage de ma div (ce qui peut sembler logique).

    Du coup je me demande si il est possible par n'importe quel méthode d'éviter ce blocage de navigateur pour les gros callback. Ma requête Ajax est bien asynchrone et ce n'est pas le traitement mais l'envoie de la réponse qui bloc le navigateur.

    Quelqu'un aurait t-il une idée ? Existe t-il d'autres méthodes moins traditionnelles pour les grosses requêtes Ajax ?

  2. #2
    Modérateur

    Inscrit en
    septembre 2004
    Messages
    8 953
    Détails du profil
    Informations forums :
    Inscription : septembre 2004
    Messages : 8 953
    Points : 13 399
    Points
    13 399

    Par défaut

    Citation Envoyé par maxtheirish Voir le message
    Ma requête Ajax est bien asynchrone et ce n'est pas le traitement mais l'envoie de la réponse qui bloc le navigateur.
    Euh... Soit c'est asynchrone, soit l'envoi de la réponse bloque le navigateur. C'est l'un ou c'est l'autre. (Et si effectivement l'envoi de la réponse bloque le navigateur, la solution est bel et bien de rendre la requête asynchrone.)
    Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher du poisson, il videra le lac et au bout de deux ans son village ne mangera plus jamais.
    Partagez vos connaissances, mais aussi comment s'en servir.

  3. #3
    Futur Membre du Club
    Inscrit en
    juin 2008
    Messages
    29
    Détails du profil
    Informations personnelles :
    Âge : 28

    Informations forums :
    Inscription : juin 2008
    Messages : 29
    Points : 17
    Points
    17

    Par défaut

    C'est certainement au moment d'écrire dans le DOM que le navigateur bloque, tu n'y peut pas grand chose, sinon comme le dit maxtheirish c'est que tu es pas en asynchrone.
    Après je sais pas avec quoi, ni comment tu remplis ton <div> mais remplir ta page en javascript est souvent une action coûteuse.

  4. #4
    Membre éprouvé Avatar de tse_jc
    Homme Profil pro Jean-Christophe THOMAS
    Ingénieur développement logiciels
    Inscrit en
    août 2010
    Messages
    245
    Détails du profil
    Informations personnelles :
    Nom : Homme Jean-Christophe THOMAS
    Âge : 42
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : août 2010
    Messages : 245
    Points : 439
    Points
    439

    Par défaut

    C'est certainement au moment d'écrire dans le DOM que le navigateur bloque
    Oui il ne peut y avoir d'autres possibilités.
    Peux-tu nous dire comment l'insertion est-elle réalisée dans le DOM?

    Souvent l'erreur qui est commise est de réaliser l'insertion donnée par donnée, ou dit différemment si j'ai 10 nodes à insérer dans le DOM (un lien hypertexte dans une div par exemple) 10 insertions sont effectuées, et par conséquent 10 mises à jour du DOM sont faites.

    Ceci est evidemment une très mauvaise pratique surtout pour l'insertion de grandes quantités de données comme dans ton cas de figure, qui de plus consiste ici à insérer toute cette volumétrie en un seul point du DOM.

    La bonne méthode consiste à créer un node et à le peupler comme bon te semble, et ensuite insérer le node dans le DOM en une seule insertion (toutes les insertions dans le DOM qui se respectent devraient être implémentées ainsi). Peux-tu donc vérifier si cela a été fait comme cela, et si ce n'est pas le cas, faire les modifs et nous remonter les nouvelles performances de ton insert? ça m'interesse.

    ++
    _______________________________________
    POO PHP+Ajax en MVC avec PDO et Bases de données épaisses : What else?

  5. #5
    Expert Confirmé
    Avatar de christele_r
    Femme Profil pro Christele Rubneau
    Responsable de service informatique
    Inscrit en
    novembre 2009
    Messages
    1 320
    Détails du profil
    Informations personnelles :
    Nom : Femme Christele Rubneau
    Âge : 41
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : novembre 2009
    Messages : 1 320
    Points : 2 743
    Points
    2 743

    Par défaut

    Tout est dit, le PHP appelé par AJAX ne doit renvoyer qu'un seul "echo"
    quelque soit son poid !
    Contrairement a ce que tu crois c'est le (a mon aviss) PHP appelé qui dépasse son temps d'exécution.
    Donc je te conseils vivement de mettre dans la boucle de traitement
    de ce PHP
    Code :
    1
    2
    3
    4
     
    <?php
    set_time_limit(10); 
    ?>
    Tu verras alors que c'était là le probléme
    A++
    Christele

  6. #6
    Futur Membre du Club
    Inscrit en
    juin 2008
    Messages
    29
    Détails du profil
    Informations personnelles :
    Âge : 28

    Informations forums :
    Inscription : juin 2008
    Messages : 29
    Points : 17
    Points
    17

    Par défaut

    Si il est en asynchrone c'est pas le php qui bloque le navigateur, y a plus de chance que ce soit l'insertion dans le DOM qui fasse ramer le tout.

  7. #7
    Expert Confirmé
    Avatar de christele_r
    Femme Profil pro Christele Rubneau
    Responsable de service informatique
    Inscrit en
    novembre 2009
    Messages
    1 320
    Détails du profil
    Informations personnelles :
    Nom : Femme Christele Rubneau
    Âge : 41
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : novembre 2009
    Messages : 1 320
    Points : 2 743
    Points
    2 743

    Par défaut

    Citation Envoyé par benjyyyyy Voir le message
    Si il est en asynchrone c'est pas le php qui bloque le navigateur, y a plus de chance que ce soit l'insertion dans le DOM qui fasse ramer le tout.
    Évidemment
    Mais cela permet de cumuler (concatener) les données et ne faire qu'un écho final
    A++
    Christele

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •