O IIS possui um recurso irritante para sites de baixo tráfego, onde recicla processos de trabalho não utilizados, fazendo com que o primeiro usuário do site, após algum tempo, obtenha um atraso extremamente longo (mais de 30 segundos).
Estive procurando uma solução para o problema e encontrei essas possíveis soluções.
A. Use o plug-in de inicialização do aplicativo
B. Use o arranque automático com o .NET 4
C. Desative o tempo limite ocioso (em Redefinição do IIS)
Gostaria de saber qual é o preferido e, mais importante, por que existem tantas soluções para o mesmo problema? (Meu palpite é que eles não são, e eu simplesmente não estou entendendo algo corretamente).
Editar
Executar C parece ser suficiente para manter meu site aquecido, mas descobri que a verdadeira raiz da lentidão do meu site tem a ver com o Entity Framework, que não consigo entender por que está ficando frio. Veja esta pergunta, que infelizmente ainda não foi respondida, ainda foi respondida!
Acabei precisando fazer um script de aquecimento para acessar meu site ocasionalmente para garantir que ele permanecesse rápido.
Respostas:
As opções A, B e D parecem estar na mesma categoria, uma vez que influenciam apenas a hora de início inicial; elas fazem o aquecimento do site, como compilação e carregamento de bibliotecas na memória.
O uso de C, configurando o tempo limite inativo, deve ser suficiente para que as solicitações subsequentes ao servidor sejam atendidas rapidamente (reiniciar o pool de aplicativos leva algum tempo - na ordem de segundos).
Tanto quanto sei, o tempo limite existe para economizar memória de que outros sites em execução paralelo nessa máquina possam precisar. O preço é que um tempo de carregamento lento.
Além do fato de o pool de aplicativos ser desligado em caso de inatividade do usuário, o pool de aplicativos também será reciclado por padrão a cada 1740 minutos (29 horas).
Do technet:
Desde que a reciclagem do pool de aplicativos permaneça ativada, isso deve ser suficiente. Mas se você realmente deseja um desempenho de alto nível para a maioria dos componentes, também deve usar algo como o Módulo de Inicialização de Aplicativos que você mencionou.
fonte
Desafio de hospedagem na web
Lembre-se de que nenhuma das opções de configuração da máquina estará disponível se você estiver hospedado em um servidor compartilhado, como muitos de nós (empresas e indivíduos menores).
Sobrecarga do ASP.NET MVC
Meu site leva pelo menos 30 segundos quando não é acessado em mais de 20 minutos (e o aplicativo Web foi interrompido). Isto é terrível.
Outra maneira de testar o desempenho
Há outra maneira de testar se é a inicialização do ASP.NET MVC ou outra coisa. Solte uma página HTML normal em seu site, onde você pode acessá-la diretamente.
Se o problema estiver relacionado à inicialização do ASP.NET MVC, a página HTML será renderizada quase imediatamente, mesmo quando o aplicativo Web não tiver sido iniciado.
Foi assim que reconheci que o problema estava na inicialização do ASP.NET MVC. Carreguei uma página HTML a qualquer momento e ela carregaria rapidamente. Depois de acessar a página HTML, eu atingia um dos meus URLs do ASP.NET MVC e recebia a mensagem do Chrome "Aguardando raddev.us ..."
Outro teste com script útil
Depois disso, escrevi um script LINQPad (confira http://linqpad.net para saber mais) que acessaria meu site a cada 8 minutos (menos do que o tempo para o aplicativo descarregar - que deve ser de 20 minutos) e deixei funciona por horas.
Enquanto o script estava sendo executado, eu acessava meu site e toda vez que ele aparecia rapidamente. Isso me dá uma boa idéia de que provavelmente a lentidão que eu estava enfrentando era devido aos tempos de inicialização do ASP.NET MVC.
Obtenha o LinqPad e você poderá executar o script a seguir - basta alterar o URL para seu próprio país, deixá-lo executar e você pode testar isso facilmente. Boa sorte.
NOTA : No LinqPad, você precisará pressionar F4 e adicionar uma referência ao System.Net para adicionar a biblioteca que recuperará sua página.
TAMBÉM : certifique-se de alterar a variável URL da String para apontar para uma URL que carregará uma rota do site ASP.NET MVC para que o mecanismo seja executado.
fonte
Escrever um serviço / script de ping para atingir seu site inativo é o melhor caminho a percorrer, porque você terá um controle completo. Outras opções que você mencionou estariam disponíveis se você alugou uma caixa de hospedagem dedicada.
Em um espaço de hospedagem compartilhada, os scripts de aquecimento são a melhor defesa de primeiro nível (a auto-ajuda é a melhor ajuda). Aqui está um artigo que compartilha uma idéia de como fazê-lo a partir de seu próprio aplicativo da web .
fonte
Eu usaria B porque, em conjunto com a reciclagem do processo do trabalhador, haveria apenas um atraso durante a reciclagem. Isso evita o atraso normalmente associado à inicialização em resposta à primeira solicitação após a ociosidade. Você também consegue manter os benefícios da reciclagem.
fonte
Uma boa opção para executar ping no site em uma programação é usar o Microsoft Flow, que é gratuito para até 750 "execuções" por mês. É muito fácil criar um fluxo que chegue ao seu site a cada hora para mantê-lo quente. Você pode até solucionar o limite de 750 criando um único fluxo com atrasos que separam vários hits do seu site.
https://flow.microsoft.com
fonte
Consulte este artigo para obter dicas sobre como ajudar a problemas de desempenho. Isso inclui os dois problemas de desempenho relacionados à inicialização, na seção "inicialização a frio". A maior parte disso será importante, independentemente do tipo de servidor que você estiver usando, localmente ou em produção.
http://blogs.msdn.com/b/mcsuksoldev/archive/2011/01/19/common-performance-issues-on-asp-net-web-sites.aspx
fonte
Eu estava recebendo um atraso consistente de 15 segundos na primeira solicitação após 4 minutos de inatividade. Meu problema era que meu aplicativo estava usando a autenticação integrada do Windows no SQL Server e o perfil do serviço estava em um domínio diferente do servidor. Isso causou uma autenticação entre domínios do IIS para SQL na inicialização do aplicativo - e essa foi a fonte real do meu atraso. Eu mudei para usar um logon SQL em vez de autenticação do Windows. O atraso se foi imediatamente. Ainda tenho todas as configurações de inicialização de aplicativos em funcionamento para ajudar a melhorar o desempenho, mas elas podem não ter sido necessárias no meu caso.
fonte