Ter paginação diminui a carga do servidor? (teoria)


11

Eu queria saber qual é a razão por trás da paginação? Ele é usado porque diminui a carga sobre os servidores, já que tecnicamente limitamos a quantidade de linhas retornadas por página?

Eu queria fazer algo sem paginação, mas, como sou novo nisso (sou amador), comecei a me perguntar se tudo bem tecnicamente ou não.


Deseja realmente esperar que seu navegador faça o download e renderize milhares de linhas de perguntas que não lhe interessam quando clica em "Perguntas" neste site?
31411 Jeremy

3
paginação é mais para humanos do que DB.
Malfist 31/10

Respostas:


10

Existem várias razões para ter paginação, reduzindo a carga do servidor é apenas uma. No entanto, Stephen Orr levanta um ponto válido - você ainda precisa encontrar a quantidade de dados primeiro. Você precisa garantir que a consulta seja rápida e não carregue indevidamente o servidor.

Outras razões incluem:

  • Reduzir a quantidade de dados retornados ao cliente de uma só vez. Se você tiver muitos dados, isso poderá levar uma quantidade considerável de tempo e consumir muita memória.
  • O usuário geralmente não está interessado em todos os dados, mas apenas nos mais recentes (digamos). Ao retornar apenas algumas páginas de dados, você não está obtendo dados que o usuário nunca verá.

Em ambos os casos, você não deseja que o usuário espere - pelos dados que não serão visualizados ou por todos os dados em que poderiam obter um ao processar parte deles.


2
+1 Eu estava escrevendo algo semelhante, mas você era muito rápido. Deixe-me acrescentar que o conteúdo de paginação também é (ab) usado como uma maneira de mostrar mais adições.
yannis

Você também pode criar páginas sem precisar descobrir quantas páginas existem, sabendo que há mais dados do que a página atual é suficiente.
Carlo Kuip

3

Isso varia dependendo da implementação.

Isso acelerará a renderização de uma página, mas não reduzirá necessariamente a carga no servidor. Os algoritmos de paginação mais ingênuos precisam executar uma consulta primeiro para decidir quantas páginas devem existir e, em seguida, consultar novamente para obter o conjunto de resultados "paginado".


A maioria dos algoritmos de paginação ingênuos precisa executar uma consulta primeiro para decidir quantas páginas devem existir : Mas o estresse acumulado no banco de dados da consulta de contagem e da consulta de resultado paginado é quase sempre muito menor do que uma consulta de obter tudo em um cenário comum (com um banco de dados relacional bem estruturado)
yannis

@YannisRizos, absolutamente. Acabei de ver o lado obscuro disso, com um banco de dados relacional incrivelmente mal estruturado (muitas de nossas consultas JUNTAM-se a 7 ou 8 tabelas diferentes para obter um resultado).
31311 Steve Steve

@ YannisRizos: defina "estresse no banco de dados". Você ainda está empurrando duas consultas na linha. Você está paginando na consulta (uma super seleção selecionada de contagem de linhas) ou armazenando em cache os resultados em outra camada? Existem muitas variáveis ​​para dizer que há muito estresse no banco de dados. Eu sustentaria que, feito corretamente em um sentido transacional (você permite uma contagem inconsistente de leitura / inconsistente nas páginas?) Aumenta o db "stress" / load, mas simplifica a programação.
Jé Queue

@ Xepoch Eu não disse muito estresse, apenas que qualquer contagem mais uma seleção limitada <seleção completa. E isso é apenas para cenários comuns em dbs relacionais bem estruturados.
yannis

1

O maior valor que você ganha com a paginação é aumentar a velocidade do seu aplicativo:

1 - Limitar os dados transmitidos entre o cliente e o servidor. Não faz sentido ler 1000000 clientes se o usuário estiver procurando por 10 deles.

2- Acelerar significativamente o desempenho da consulta, recuperando apenas as linhas que podem caber na visualização do usuário. Não faz sentido ler 1000000 clientes se o usuário olhar para os 10 primeiros clientes.

3 - A paginação ajuda fornecendo mais dados atualizados. Se seu aplicativo mostrar muitas linhas de dados e o domínio do aplicativo exigir muita atualização nas linhas de dados na tabela exibida, é provável que, quando você vá para a página 20 da lista de páginas, os dados em algumas linhas tenham sido atualizados. mudou. Pense em um aplicativo que leia os preços das ações ou quartos disponíveis em um hotel. Recuperar dados antigos e colocá-los no cliente é inútil.

A paginação é uma estratégia que, combinada à filtragem e à sua compreensão de como o usuário final precisa de um cenário específico (que deve levar a um bom design para atender a essa necessidade), aprimorará bastante o aplicativo, especialmente quando vários usuários estiverem acessando o banco de dados. simultaneamente.

A paginação nem sempre é trivial para o programa. Em alguns casos, é simples, mas às vezes é muito complexo escrever, para que a consulta SQL seja executada sem executar uma verificação completa da tabela. Obviamente, isso depende dos seus índices, condição do filtro e da sua declaração Where.


-4

Paginação, na minha opinião, é a mãe de todas as otimizações prematuras. Não há problema em escrever seu site sem paginação.

Se você descobrir, após o lançamento, que está carregando muitos dados em uma chamada ou que seus usuários terão que esperar pelas informações que desejam, porque está ocupado carregando dados que não desejam, vá em frente e escreva uma solução Ajax que carrega a página apenas quando as pessoas rolam para baixo (consulte: Twitter, Tumblr, pesquisa de imagens do Google).

Edit: O segundo parágrafo acima foi escrito com o pressuposto de que seria uma resposta comum ", mas se você souber que vai paginar em algum momento, poderá fazê-lo mais cedo, em vez de perder tempo desenvolvendo algo que irá lançar. longe."

Além de ser a mãe de todas as otimizações prematuras, acho que a paginação é um pesadelo de UX e que existem soluções melhores que não exigiriam muito desenvolvimento extra no topo da página completa.

Apesar do número de votos negativos, deixo esta resposta aqui porque mantenho o sentimento, mesmo que não tenha sido minha melhor redação.


5
Discordo totalmente dessa afirmação: a paginação não é para otimizar o banco de dados, trata-se de fornecer dados em partes gerenciáveis ​​para humanos. Você seria capaz de ler Harry Potter se tudo estivesse em uma página? Você poderia registrar impostos se o Código tributário estivesse em uma página?
Malfist 31/10

@ Malfist: A única razão pela qual você não conseguiu lidar com essas coisas em uma página é porque a página em si seria muito grande. Este não é um problema nas páginas da web. Portanto, os sites que citei encontraram melhores soluções para paginação, enquanto o Lolcats atualmente possui quase 2.000 páginas que são impossíveis de serem paginadas de qualquer maneira sensata. Mas, é o seu voto negativo, use-o como quiser.
Pdr31

1
@ Malfist: Além disso, dividir as coisas em pedaços administráveis ​​é justo o suficiente se esses pedaços não mudarem. Se eu ler as páginas 1 a 4, desejo voltar na próxima vez e ler a página 5. Mas em muitos casos, os sites paginados são listas de itens, mais recentes primeiro. Então, quando volto à página 5 mais tarde, na verdade, ele mostra metade da página 3 e metade da página 4 da última vez que estive lá, porque há 1,5 páginas novas na lista.
Pdr31

2
-1 Como eu discordo totalmente disso também. Nem sei por onde começar a explicar o porquê.
Craige 31/10

@ Craig: Bem, ok então. Certamente não sou capaz de argumentar muito sobre isso.
Pdr31
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.