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

jQuery Discussion :

plugin DataTables, je cherche un moyen pour alléger mes requêtes


Sujet :

jQuery

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2006
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 14
    Points : 13
    Points
    13
    Par défaut plugin DataTables, je cherche un moyen pour alléger mes requêtes
    Bonjour à tous,

    Voilà j'utilise sur mon site un script Data Tables ( ref : http://www.datatables.net/examples/ )

    Avec une simple configuration comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $(document).ready(function(){
    	$('#liste').dataTable({
    		"bProcessing": true,
    		"sPaginationType": "full_numbers"
    	});
    });
    Mon problème ou plutôt mon inquiétude est la suivante :

    Ayant une liste de + de 10 000 résultats une Data Table met du temps à se charger et j'ai peur qu'une trop grande utilisation de celle-ci par les visiteurs ne ralentisse mon serveur ou ma base MYSQL. Qu'en pensez-vous ?

    Je cherche un moyen d'alléger mes requêtes mais sans succès ! J'ai vu sur le site de Data Tables que l'on pouvait procéder de plusieurs façons avec un "Server-side processing" mais je ne comprend pas l'utilisation de cette fonction.

    Quelqu'un aurait-il une idée pour m'aider ou une explication sur la mise en place d'un "Server-side processing" ?

    Merci d'avance.

  2. #2
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 093
    Points : 6 754
    Points
    6 754
    Par défaut
    Bonjour,
    si tu dois envoyer plus de 1000 entrées de ta base de données au client, il y a certainement un mauvais choix de conception au départ.

    Si j’ai bien compris (http://www.datatables.net/usage/server-side) le principe du serveur-side processing c’est que c’est à toi de faire le traitement, côté serveur, qui va alléger la quantité de données à envoyer au client.

    Le truc que je comprends pas dans ton code, c’est que tu initialises ton DataTable sans lui donner l’adresse de ton serveur. Est-ce que tu remplis ton tableau à l’avance ?
    De plus, si tu utilises MySQL, il est évident qu’il faudra alléger les données avant de les envoyer. Le server-side processing est donc la seule solution adaptée.
    Par exemple, pour paginer :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT * FROM uneTable LIMIT 400, 50
    -- sélectionne 50 entrées à partir de la 400-ième
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2006
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 14
    Points : 13
    Points
    13
    Par défaut
    Salut Watilin,

    Merci pour ta réponse !

    si tu dois envoyer plus de 1000 entrées de ta base de données au client, il y a certainement un mauvais choix de conception au départ.
    Je comprend pas pourquoi tu pense cela, mes requetes MYSl affichent des listes de jeux donc un MYSQL pour lister le tout.

    SELECT * FROM uneTable LIMIT 400, 50
    -- sélectionne 50 entrées à partir de la 400-ième
    J'utilise déjà des paginations manuelles avec une telle manip ( nb d'affichages, pagination 1 à 1 ou +, etc... )

    Mais l'avantage d'utiliser un script tel que Data Tables justement c'est qu'une fois la page avec la liste chargée le visiteur n'est plus redirigé sur aucune page, les pages défilent sans recharger la page. Je trouve cela pas trop mal !

    c’est que tu initialises ton DataTable sans lui donner l’adresse de ton serveur.
    ? Ma liste se charge avec une requête mysql et du php simple tel que par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    SELECT Nom, Jeu, Lien FROM machin ORDER BY patati;
     
    et une boucle qui affiche la liste
     
    for (i=0;i<total_requete;i++) {
     
    ma liste
     
    }
    Sinon j'ai allégé un peu ma requête et installé un script de chargement qui fait patienter le visiteur. Pour une liste de 4000 resultats la page met environ 5sec à se charger.

  4. #4
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Citation Envoyé par zubaran
    Je comprend pas pourquoi tu pense cela
    Peut-être à cause de :
    Citation Envoyé par zubaran
    une Data Table met du temps à se charger et j'ai peur qu'une trop grande utilisation de celle-ci par les visiteurs ne ralentisse mon serveur ou ma base MYSQL. Qu'en pensez-vous ?
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2008
    Messages : 59
    Points : 58
    Points
    58
    Par défaut
    Salut!

    Mais l'avantage d'utiliser un script tel que Data Tables justement c'est qu'une fois la page avec la liste chargée le visiteur n'est plus redirigé sur aucune page, les pages défilent sans recharger la page. Je trouve cela pas trop mal !
    L'utilisation du server-side processing ne modifie pas l'aspect AJAX offert par le plugin datatables (pas de rechargement de la page). L'unique différence réside dans la quantité de données envoyée au tableau qui est moindre et qui permet un chargement beaucoup plus rapide (tu peux choisir le nombre de résultat affichés par page (par ex 25, 50, 100...)

    Si tu as des boutons de pagination (page précédente, page suivante), le plugin va générer automatiquement la requête SQL en modifiant les paramètres du LIMIT comme tu l'as déja fait.

    Ayant une liste de + de 10 000 résultats une Data Table met du temps à se charger et j'ai peur qu'une trop grande utilisation de celle-ci par les visiteurs ne ralentisse mon serveur ou ma base MYSQL. Qu'en pensez-vous ?
    Datatable est un plugin javascript: ce n'est pas ton serveur web qui risque de morfler si tu affiche 10 000 résultats mais plutôt le navigateur du visiteur:
    Tu parles d'un temps de chargement de 5s, mais sur ces 5s, il n'y a à mon avis que quelques secondes de réponses du serveur, le reste étant du à ton navigateur qui doit bosser dur pour tout afficher...

    Pour implémenter ça:
    tu crées un fichier toto.php qui contient ça:
    http://www.datatables.net/developmen...side/php_mysql

    Seule la partie ci-dessous est à modifier:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    /* Array of database columns which should be read and sent back to DataTables. Use a space where
    /* you want to insert a non-database field (for example a counter or static image)
    	 */
    	$aColumns = array( 'engine', 'browser', 'platform', 'version', 'grade' );
     
    	/* Indexed column (used for fast and accurate table cardinality) */
    	$sIndexColumn = "id";
     
    	/* DB table to use */
    	$sTable = "ajax";
     
    	/* Database connection information */
    	$gaSql['user']       = "";
    	$gaSql['password']   = "";
    	$gaSql['db']         = "";
    	$gaSql['server']     = "localhost";
    Tu modifie ton code javascript comme ceci (en ajoutant d'autre paramètre si besoin, comme le nombre de résultat par page, la pagination, les colonnes à trier ou à rechercher, etc...)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $(document).ready(function(){
    	$('#liste').dataTable({
    		"bProcessing": true,
    		"sPaginationType": "full_numbers",
    		"bServerSide": true,
    		"sAjaxSource": "toto.php"
    	});
    });
    Bon courage...

Discussions similaires

  1. Cherche un moyen de stockage de 10To pour partage
    Par Zwiter dans le forum Achat et Conseils
    Réponses: 3
    Dernier message: 23/10/2013, 17h54
  2. Réponses: 3
    Dernier message: 13/01/2012, 16h38
  3. Réponses: 1
    Dernier message: 05/09/2010, 21h00
  4. Meilleur moyen pour réussir mes workflows
    Par MOSSpichu dans le forum Développement Sharepoint
    Réponses: 6
    Dernier message: 25/05/2010, 17h23
  5. Réponses: 9
    Dernier message: 24/05/2003, 10h25

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