Précédent   Forum du club des développeurs et IT Pro > Webmasters - Développement Web > AJAX
AJAX Forum sur la programmation AJAX. Avant de poster : Cours AJAX, FAQ AJAX, Toutes les FAQ JavaScript
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 04/11/2012, 21h13   #1
maxtheirish
Invité de passage
 
Inscription : 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 ?
maxtheirish est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/11/2012, 11h39   #2
thelvin
Modérateur
 
Inscription : septembre 2004
Messages : 7 072
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 7 072
Points : 10 287
Points : 10 287
Envoyer un message via Skype™ à thelvin
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.
thelvin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2012, 13h51   #3
benjyyyyy
Futur Membre du Club
 
Inscription : juin 2008
Messages : 29
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : juin 2008
Messages : 29
Points : 17
Points : 17
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.
benjyyyyy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2012, 14h43   #4
tse_jc
Membre confirmé
 
Avatar de tse_jc
 
Homme Jean-Christophe THOMAS
Ingénieur développement logiciels
Inscription : août 2010
Messages : 162
Détails du profil
Informations personnelles :
Nom : Homme Jean-Christophe THOMAS
Âge : 41
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 : 162
Points : 291
Points : 291
Envoyer un message via MSN à tse_jc Envoyer un message via Skype™ à tse_jc
Citation:
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?
tse_jc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2012, 17h28   #5
christele_r
Membre Expert
 
Avatar de christele_r
 
Femme Christele Rubneau
Inscription : novembre 2009
Messages : 1 050
Détails du profil
Informations personnelles :
Nom : Femme Christele Rubneau
Âge : 40
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : novembre 2009
Messages : 1 050
Points : 1 426
Points : 1 426
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
christele_r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/11/2012, 09h00   #6
benjyyyyy
Futur Membre du Club
 
Inscription : juin 2008
Messages : 29
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : juin 2008
Messages : 29
Points : 17
Points : 17
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.
benjyyyyy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/11/2012, 10h13   #7
christele_r
Membre Expert
 
Avatar de christele_r
 
Femme Christele Rubneau
Inscription : novembre 2009
Messages : 1 050
Détails du profil
Informations personnelles :
Nom : Femme Christele Rubneau
Âge : 40
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : novembre 2009
Messages : 1 050
Points : 1 426
Points : 1 426
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
christele_r est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 11h39.


 
 
 
 
Partenaires

Hébergement Web