Acelerando um site ou aplicativo ASP.Net
-
08-06-2019 - |
Pergunta
Eu tenho um site ASP.Net 2.0 habilitado para Ajax.Net.A hospedagem do site e do banco de dados está fora do meu controle, assim como o esquema do banco de dados.Nos testes de hardware eu controlo o desempenho do site, porém no hardware do cliente, há atrasos perceptíveis ao recarregar ou alterar páginas.
O que eu gostaria de fazer é tornar meu aplicativo o mais compacto e rápido possível ao entregá-lo.Uma ideia é definir datas de expiração para todos os recursos estáticos do site para que eles não sejam recuperados no carregamento da página.Por recursos quero dizer imagens, folhas de estilo vinculadas e arquivos de origem JavaScript.Existe uma maneira fácil de fazer isso?
Que outras maneiras existem de otimizar um site .Net?
ATUALIZAR:Executei o YSlow no site e as áreas em que estou sendo mais atingido são o número de JavaScript e folhas de estilo sendo carregadas (23 arquivos JS e 5 folhas de estilo).Todos, exceto um (a folha de estilo principal), foram inseridos pelo Ajax.net e Asp.Por que tantos?
Solução
- Combinação de scripts em .net 3.5 SP1
- Melhores práticas para sites rápidos
- Compressão HTTP (gzip)
- Compactar JS/CSS (diferente da compactação http, minificar javascript)
Meu melhor conselho é verificar o Conteúdo YUI.Eles têm ótimos artigos que falam sobre coisas como Sprites CSS e ter alguns ótimas bibliotecas javascript para ajudar a reduzir o número de solicitações o navegador está fazendo.
Outras dicas
Se você estiver usando o Firefox para testar seu site, você pode tentar uma extensão bacana do Firefox do Yahoo!chamado YLento.
Ele analisa suas páginas da web e fornece notas de A a F (A sendo o melhor e F o pior) para cada uma das melhores práticas, para sites de alto desempenho.Isso o ajudará a rastrear os elementos do seu site que você pode otimizar para ganhar velocidade.
Desative o viewstate por padrão; será uma diferença diurna e noturna até mesmo nas páginas mais simples.
Eu escrevi um postagem no blog sobre como melhorar o desempenho da página ASP.NET há alguns meses.Aqui estão algumas maneiras rápidas e fáceis -
- Desativar estado de visualização
- Desative a validação de eventos
- Implemente a compactação HTTP gzip/deflate para reduzir o tamanho da resposta (número de bytes que o servidor deve enviar de volta ao cliente)
- Tente otimizar/minimizar suas chamadas de banco de dados para cada solicitação
Acho que você realmente precisa obter alguns dados/telemetria reais do PerfMon do aplicativo durante a execução em produção para poder tomar uma decisão esclarecida sobre o que otimizar.
Como dica descartável, eu garantiria que seu aplicativo fosse implantado como um Liberar build e defina debug="false" no 'compilação'seção do seu web.config.
Você parece estar começando assumindo que o seu problema é o tamanho do download - esse pode não ser necessariamente o caso.Você deve fazer algumas experiências com seu site ASP.NET para determinar se há áreas em seu código que estão causando atrasos indevidos.Se descobrir que o tamanho do download não é o seu problema, você precisará encontrar maneiras de armazenar seus resultados em cache (examine o cache de saída, que é um recurso do ASP.NET) ou otimizar seu código.
De qualquer forma, o primeiro passo ao analisar um problema de desempenho é sempre para verificar suas suposições primeiro e depois decidir sobre um curso de ação.
Você já experimentou essas dicas?
http://weblogs.asp.net/haroonwaheed/archive/2008/06/30/ASP.NET-Performance-Tips.aspx
Você poderia começar a analisar estratégias de cache.Arquivos estáticos como CSS (mesmo os compactados) e imagens (mesmo os otimizados) só devem precisar ser baixados uma vez pelo navegador por um período de tempo.
A combinação de Scirpt para AJAX já foi mencionada, mas não notei referência ao ScriptReferenceProfiler que a MS lançou no codeplex para ajudar a descobrir o que combinar.Mike Ormond tem um bom ponto de partida sobre isso.
Outra dica se você estiver fazendo muitos INSERTs em seu banco de dados é verificar novamente se o cache de disco do seu servidor está ativado.Caso em questão, tive um importador de dados fazendo 1,2 milhão de inserções durante uma execução.Demorou 4 horas e mudou sem cache.Demorou 16 minutos com ele ligado.
Uma coisa geral ao usar ASP.NET e Ajax (qualquer biblioteca Ajax) juntos é evitar aumentar suas coisas Page_Load e Page_Init (e suas contrapartes de método), uma vez que elas serão executadas em cada solicitação Ajax.
Quando isso for dito, eu abandonaria seriamente o ASP.NET AJAX e usaria qualquer coisa outro...
Anthem.NET, AjaxPRO.NET, jQuery ou qualquer outra coisa que não seja ASP.NET AJAX...
Claro que eu usaria Ra-Ajax eu mesmo, já que esse é o meu projeto.Mas, novamente, sou tendencioso...
Você pode ativar a compactação com base no suporte do seu cliente.Veja este artigo: Texto do link
Os recursos estáticos não devem ser reenviados, a menos que sejam alterados.O IIS enviará um código de resposta que instrui o navegador a usar a versão em cache.
Você também pode observar o cache de saída do ASP.NET, que pode ser aplicado de maneira bastante granular a diferentes partes da sua página:
http://msdn.microsoft.com/en-us/library/xsbfdd8c(VS.71).aspx