La pagination réduit-elle la charge du serveur? (théorie)

11

Je me demandais quelle est la raison de la pagination? Est-il utilisé parce qu'il réduit la charge des serveurs, car nous limiterions techniquement le nombre de lignes renvoyées par page?

Je voulais faire quelque chose sans pagination mais étant donné que je suis nouveau dans ce domaine (je suis un amateur), j'ai commencé à me demander si ça allait techniquement ou non.

Sam Khan
la source
Voulez-vous vraiment attendre que votre navigateur télécharge et affiche des milliers de lignes de questions qui ne vous intéressent pas lorsque vous cliquez sur "Questions" sur ce site?
Jeremy
3
la pagination est plus pour les humains que les DB.
Malfist

Réponses:

10

Il y a plusieurs raisons à la pagination, la réduction de la charge du serveur n'en est qu'une. Cependant, Stephen Orr soulève un point valable - vous devez toujours trouver la quantité de données en premier. Vous devez vous assurer que cette requête est rapide et ne charge pas indûment votre serveur.

D'autres raisons incluent:

  • Réduire la quantité de données retournées au client en une seule fois. Si vous avez beaucoup de données, cela peut prendre un temps considérable et occuper beaucoup de mémoire.
  • Souvent, l'utilisateur n'est pas intéressé par toutes les données, mais seulement par les plus récentes (disons). En ne renvoyant que quelques pages de données, vous n'obtenez pas de données que l'utilisateur ne verra jamais.

Dans les deux cas, vous ne voulez pas faire attendre l'utilisateur - soit pour les données qu'il ne va pas voir, soit pour toutes les données alors qu'il pourrait en obtenir une avec le traitement d'une partie.

ChrisF
la source
2
+1 J'écrivais quelque chose de similaire, mais vous étiez trop rapide. Permettez-moi d'ajouter que le contenu de pagination est également (ab) utilisé comme moyen d'afficher plus d'ajouts.
yannis
Vous pouvez également créer des pages sans avoir à savoir combien de pages il y a, sachant qu'il y a plus de données que la page actuelle ne suffit.
Carlo Kuip
3

Cela varie en fonction de la mise en œuvre.

Cela accélérera le rendu d'une page, mais ne réduira pas nécessairement la charge sur le serveur. La plupart des algorithmes de pagination naïfs doivent d'abord effectuer une requête pour décider du nombre de pages, puis interroger à nouveau pour obtenir le jeu de résultats "paginé".

Steve Hill
la source
La plupart des algorithmes de pagination naïfs doivent d'abord effectuer une requête pour décider du nombre de pages : mais le stress cumulé sur la base de données de la requête de comptage et la requête de résultat paginée est presque toujours bien inférieur à une requête tout obtenir dans un scénario courant (avec une base de données relationnelle bien structurée)
yannis
@YannisRizos, absolument. Je viens de voir le côté sombre de cela, avec une base de données relationnelle incroyablement mal structurée (beaucoup de nos requêtes JOIN 7 ou 8 tables différentes pour obtenir un résultat).
Steve Hill
@YannisRizos: définissez "stress sur la base de données". Vous êtes toujours en train de pousser deux requêtes sur la ligne. Êtes-vous en train de paginer dans la requête (une super-sélection de nombre de lignes) ou de mettre en cache les résultats dans un autre niveau? Il y a beaucoup trop de variables pour dire qu'il y a trop de stress DB. Je dirais que correctement fait dans un sens transactionnel (autorisez-vous un nombre de lectures incorrectes / incohérentes dans les pages?) Augmente la «charge» / charge de db mais simplifie la programmation.
Jé Queue
@Xepoch Je n'ai pas dit trop de stress, juste que n'importe quel nombre plus une sélection limitée <sélection complète. Et ce n'est que pour des scénarios courants sur des dbs relationnels bien structurés.
yannis
1

La plus grande valeur que vous tirez de la pagination améliore la vitesse de votre application en:

1 - Limitation des données transmises entre le client et le serveur. Il est inutile de lire 1000000 clients si l'utilisateur en recherche 10.

2- Accélérer considérablement les performances de la requête en récupérant uniquement les lignes pouvant tenir dans la vue d'un utilisateur. Il est inutile de lire 1000000 de clients si l'utilisateur regarde les 10 premiers clients.

3 - La pagination aide en fournissant des données plus récentes. Si votre application affiche de nombreuses lignes de données et que votre domaine d'application nécessite de nombreuses mises à jour des lignes de données dans le tableau affiché, il est probable qu'au moment où vous accédez à la page 20 de la liste des pages, les données de certaines des lignes auraient été modifié. Pensez à une application qui lit les cours des actions ou les chambres disponibles dans un hôtel. La récupération des anciennes données et leur placement sur le client est inutile.

La pagination est une stratégie qui, combinée au filtrage et à votre compréhension de la façon dont l'utilisateur final a besoin du scénario particulier (qui devrait conduire à une bonne conception pour répondre à ce besoin) améliorera considérablement l'application spécialement lorsque plusieurs utilisateurs atteignent la base de données simultanément.

La pagination n'est pas toujours triviale à programmer. Dans certains cas, il est simple mais il est parfois très complexe d'écrire de sorte que la requête SQL s'exécute sans effectuer une analyse complète de la table. Cela dépend bien sûr de vos index, de la condition du filtre et de votre instruction Where.

Aucune chance
la source
-4

La pagination, à mon avis, est la mère de toutes les optimisations prématurées. Il est absolument acceptable d'écrire votre site sans pagination.

Si vous trouvez, après la publication, que vous chargez trop de données en un seul appel, ou que vos utilisateurs doivent attendre les informations qu'ils veulent parce que c'est occupé à charger des données qu'ils ne veulent pas, allez-y et écrivez une solution Ajax qui ne charge la page que lorsque les gens défilent (voir: Twitter, Tumblr, recherche d'images Google).

Edit: Le deuxième paragraphe ci-dessus a été écrit avec l'hypothèse qu'une réponse commune serait "mais si vous savez que vous allez paginer à un moment donné, vous pouvez aussi bien le faire tôt, plutôt que de perdre du temps à développer quelque chose que vous allez jeter une façon."

En plus d'être la mère de toutes les optimisations prématurées, je pense que la pagination est un cauchemar UX et qu'il existe de meilleures solutions qui ne nécessiteraient pas beaucoup de développement supplémentaire en haut de la page complète.

Malgré le nombre de votes négatifs, je laisse cette réponse ici parce que je maintiens le sentiment, même si ce n'est peut-être pas ma meilleure écriture.

pdr
la source
5
Je suis fortement en désaccord avec cette affirmation, la pagination n'est pas pour optimiser la base de données, il s'agit de fournir des données en morceaux gérables aux humains. Seriez-vous capable de lire Harry Potter si tout était sur une seule page? Seriez-vous en mesure de déposer des taxes si le code des impôts était sur une seule page?
Malfist
@Malfist: La seule raison pour laquelle vous ne pouvez pas gérer ces choses sur une seule page est que la page elle-même serait trop grande. Ce n'est pas un problème dans les pages Web. Par conséquent, les sites que j'ai cités ont trouvé de meilleures solutions à la pagination, tandis que Lolcats compte actuellement près de 2000 pages qui sont impossibles à paginer de manière sensée. Mais c'est votre downvote, utilisez-le comme vous voulez.
pdr
1
@Malfist: En outre, la division des choses en morceaux gérables est assez juste si ces morceaux ne changent pas. Si je lis les pages 1 à 4, je veux revenir la prochaine fois et lire la page 5. Mais dans BEAUCOUP de cas, les sites Web paginés sont des listes d'articles, les plus récents en premier. Donc, quand je reviens à la page 5 plus tard, cela montre en fait la moitié de la page 3 et la moitié de la page 4 de la dernière fois que j'y étais parce qu'il y a une toute nouvelle 1,5 page dans la liste.
pdr
2
-1 Comme je suis fortement en désaccord avec cela également. Je ne sais même pas par où commencer pour expliquer pourquoi.
Craige
@Craige: Eh bien, d'accord. Je ne suis certainement pas en mesure de présenter une argumentation à ce sujet.
pdr