CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[HELP] système de pagination serveur PHP

Pseudo supprimé
Pseudo supprimé 12 décembre 2018 à 16:53:12

Salut
J'ai un projet à faire et j'aurais besoin d'un petit coup de main.
Je dois développer une application client-serveur en PHP/Javascript et il me reste une fonctionnalité :
Pour faire court, disons qu'il y a un formulaire à remplir sur le client pour chercher des produits qui sont stockés sur le serveur: J'écris le nom du produit, je valide, le serveur cherche les produits qui correspondent à ce nom et renvoie une liste de produits qui sera affichée sur le client.
Sauf que le serveur peut renvoyer une très très longue liste de produis et ça pourrait causer des problèmes de performances de tout renvoyer d'un coup.
DONC, ce que je veux faire : le serveur ne doit renvoyer les résultats que par " partie " , par exemple: si y a 1000 résultats, il va en renvoyer 100 puis 100 puis 100 etc... du coté client, y aura plusieurs pages, à chaque fois que l'utilisateur change de page, le serveur envoie les 100 suivants.
J'espère que j'ai été assez clair.
Vous pourriez m'indiquer une piste à suivre pour réaliser ça ? N'importe quoi, juste pour mettre sur le bon chemin.
Je suis sûr que ça doit être un truc bête mais je suis novice et j'arrive pas à trouver ce qu'il faut :( .

merci d'avance.

blackapplex
blackapplex
Niveau 10
12 décembre 2018 à 17:35:02

En SQL : https://sql.sh/cours/limit
En PHP : Si t'as les données, tu peux les mettre en cache pour ce client un certain temps, et tu ne lis que les lignes que le client demande sur le cache qui contient tout. (le client fait une requête sur les 1 à 10e lignes, tu génères tout le fichier de 100k lignes, tu le mets en cache, tu fetch les 1 à 10e ligne)
En JS : Tu masques les données et tu les affiches en fonction de la page sélectionnée

Message édité le 12 décembre 2018 à 17:35:51 par blackapplex
Pseudo supprimé
Pseudo supprimé 13 décembre 2018 à 00:03:47

Sur le lien SQL :
" Certains développeur pensent à tort que l’utilisation de LIMIT permet de réduire le temps d’exécution d’une requête. Or, le temps d’exécution est sensiblement le même car la requête va permettre de récupérer toutes les lignes (donc temps d’exécution identique) PUIS seulement les résultats définit par LIMIT et OFFSET seront retournés. Au mieux, utiliser LIMIT permet de réduire le temps d’affichage car il y a moins de lignes à afficher. "

Bah du coup, ça sert à rien au fait ?

blackapplex
blackapplex
Niveau 10
13 décembre 2018 à 10:49:00

Le 13 décembre 2018 à 00:03:47 coorobizar a écrit :
Sur le lien SQL :
" Certains développeur pensent à tort que l’utilisation de LIMIT permet de réduire le temps d’exécution d’une requête. Or, le temps d’exécution est sensiblement le même car la requête va permettre de récupérer toutes les lignes (donc temps d’exécution identique) PUIS seulement les résultats définit par LIMIT et OFFSET seront retournés. Au mieux, utiliser LIMIT permet de réduire le temps d’affichage car il y a moins de lignes à afficher. "

Bah du coup, ça sert à rien au fait ?

Pas sûr que ça soit réellement à prendre en compte...
Mais je connais pas l'implémentation exacte. SQL a été fait pour pas qu'on ait à se soucier de ce genre de chose. De toute façon pour arriver à la 10e ligne faut que tu ais passé les 9 qui précèdent, t'auras une complexité en O(n) ou O(log(n)) si t'indexes les n° de ligne dans un arbre (mais dès que tu supprimes une entrée faut mettre à jour l'index).
Bref, tout ça c'est des considérations que j'évite quand on me laisse une fonction qui fait tout sauf si je remarque un problème dans la pratique. Sinon autant faire la version PHP

SatanasBee
SatanasBee
Niveau 8
15 décembre 2018 à 18:37:30

Le 13 décembre 2018 à 00:03:47 coorobizar a écrit :
Sur le lien SQL :
" Certains développeur pensent à tort que l’utilisation de LIMIT permet de réduire le temps d’exécution d’une requête. Or, le temps d’exécution est sensiblement le même car la requête va permettre de récupérer toutes les lignes (donc temps d’exécution identique) PUIS seulement les résultats définit par LIMIT et OFFSET seront retournés. Au mieux, utiliser LIMIT permet de réduire le temps d’affichage car il y a moins de lignes à afficher. "

Bah du coup, ça sert à rien au fait ?

Ca dépend des requêtes, parfois un LIMIT 1; est instantannée alors que la requête seule mettrais des minutes.

Après, sur 1000 produits ça me semble exploitable encore de jouer avec le LIMIT et l'OFFSET...

Si jamais tu veux la version "optimisé" réellement, je te conseil de suivre ce lien: http://mysql.rjweb.org/doc.php/pagination

Après voilà, je dirais que c'est selon le contexte, la requête et la taille du catalogue, car il y a la dualité entre optimisé ou faire simple... (appliquer les recommandation du lien que j'ai passé peut paraitre "overkill" dans certaines situations), car MySQL semble souffrir du "LIMIT/OFFSET" uniquement si il y a BEAUCOUP de page et que l'offset devient énorme...

Message édité le 15 décembre 2018 à 18:39:18 par SatanasBee
Sous forums
  • Aide à l'achat Mac
  • Internet
  • Macintosh
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware
La vidéo du moment