Exibir grandes volumes de dados no site
-
20-08-2019 - |
Pergunta
Eu tenho algumas tabelas no meu banco de dados com cerca de 7K linhas e eu preciso fazer um relatório sobre o web site (asp.net) com formatação personalizada, tabela dinâmica como detalhes.
O que é a melhor solução para isso, porque quando eu processar por exemplo repetidor com esta quantidade de dados it`s muito lento.
Obrigado por conselhos
Solução
Se você não quer paginação, então você provavelmente vai precisar de algum AJAX para buscar linhas como você rolar e, possivelmente, remover linhas como eles deslocar para fora de vista, se você precisa de memória conserva.
Outras dicas
Desligue o viewstate
A menos que você precisar dele
Page.EnableViewState = false;
Split da mesa
Se você não quiser ir abaixo da rota de paginação você também pode tentar dividir um grande <table>
em várias <table>
s menores. (Ela costumava ser o caso que o navegador só poderia tornar uma tabela depois de ter visto o </table>
final. Eu não sei se isso ainda é verdade, mas definitivamente um tiro pena sou)
Se livrar do lixo
Certifique-se de que você está usando css e não usar coisas como
<td width="40" valign="top"> 50 </td>
<td class="a"> 50 </td> <!-- better -->
<td>50</td> <!-- best -->
<!-- if you need to specify a width, you only need to do it in one row -->
Lembre-se crap * 7000 = alot of crap
Reduzir o tamanho da página a todo custo
Às vezes o problema não está prestando da página, mas é o download que causa o problema, de modo a verificar isso.
As tabelas aninhadas vai realmente feri-lo
Nuff disse
Gostaria de sugerir o uso de paginação.
Considerando uma linha típica como esta:
<tr><td>ID</td><td>Some data</td><td>More and more data</td></tr>
Cada linha tem 66 personagens, assim que ter 7k linhas resumiria quase 500k no valor de dados. E isso é muito para uma exibição na web.
Então, se você realmente deseja tudo de exibição em uma página, mantê-la mínima:
- Não desperdice espaços
- atributos não use a menos que completamente inevitável
- Não use class = "" Se você não tem classes diferentes para diferentes linhas (aplicar a mesma classe para todas as linhas em vez)
De qualquer forma, dependendo alvo computador + o navegador, isso pode ficar realmente slooow se suas linhas são maiores.
Você não menciona qual a linguagem que você está usando, mas a menção de um repetidor sugere ASP.Net? Na minha experiência, a ligação de dados a um DataGrid é mais rápido em conjuntos de dados maiores.
Mas, eu tenho que perguntar por que você iria querer mostrar a parte de dados em uma página da web. Nenhum usuário em seu perfeito juízo iria sentar e percorrer que muitos dados e achar que é útil. Limitar os seus dados para dados pertinentes que serão úteis para o usuário -. Geralmente filtradas para menos de 100 linhas
IMO, um relatório com esta quantidade de dados é inútil, não importa o formato, mas se você absolutamente tem que ter tudo para um relatório impresso ou tal, considere gerar um documento PDF no servidor em vez.
pode querer tentar uma ferramenta de relatório personalizado para que a quantidade de dados. Minha empresa fazer uma ferramenta chamada RSinteract (plug descarado). Esse relatório usa SQL Server serviços.
Se você quiser apenas para despejar os dados. Eu presumo que o navegador está travando ao mesmo tempo que torna isso ou enquanto a consulta está sendo executado. Se você sabe qual é o seu navegador de destino ... você poderia usar um link "More ..." para obter o próximo conjunto de dados e tem um limite de 1.000 linha. No entanto, esta teria um impacto Ctrl + F procura. Semelhante a paginação, mas colocar a responsabilidade nas mãos do usuário, eu acho.
Se você está realmente procurando a solução "melhor" para uma "aplicação web", eu descaradamente sugerimos que você use Flash / Flex para a prestação eficiente que muitas linhas. Se estiver usando nada além de HTML básico não é uma opção, então eu sugiro buscar dinamicamente novas linhas como o usuário rola como @mbeckish sugeridas ...
Eu costumava grades DevExpress para um cliente para lidar com relatórios e eles adoram (embora eu teria sim ter rolado meu próprio!)