Turbinando sua aplicação ASP.NET no IIS

Toda aplicação ASP.NET requer um processo de compilação em memória no servidor e isto leva um tempo perceptível por nossos usuários. Aprenda como evitar esse comportamento.

Turbinando sua aplicação ASP.NET no IIS

Na minha vida de consultor eu sempre ouço a mesma pergunta dos meus clientes:
Meu site fica lento na primeira chamada toda vez que faço um deploy ou quando o pool do IIS recicla naturalmente.

Antes de tudo é importante deixar claro que não tem como fugir do processo de reciclagem do pool do IIS, ele pode ocorrer naturalmente por N fatores ou agendado conforme sua configuração.

A demora natural na primeira chamada de uma aplicação ASP.NET é o processo do IIS compilando o assembly da sua aplicação e disponibilizando ele num cache, esse cache é usado nas próximas chamadas e assim sua aplicação volta a responder normalmente sem nenhuma demora aparente. Toda vez que o pool do IIS recicla a memória esse cache é perdido.

Nós não queremos que nossos usuários sejam obrigados a esperar este tempo de compilação que pode chegar em cerca de 30 segundos dependendo do tamanho da aplicação, é por isso que o IIS possui uma feature pouco utilizada chamada de
IIS Auto-Start ou Application Initialization

Para habilitar esse comportamento no seu IIS é necessário instalar o módulo de Application Initialization no seu servidor e seguir alguns passos na configuração do IIS.

*A mesma configuração pode ser feita através da edição dos arquivos de configuração no servidor. Eu prefiro fazer no IIS diretamente, você encontrará esta outra abordagem no link de referência no final do post.

O resultado é muito satisfatório, ao invés da aplicação demorar mais de 10 segundos para responder ela passa a demorar 1 ou 2 segundos.

Para abordar todos os passos necessários em detalhes eu gravei um vídeo de 16 minutos mostrando todo o processo de configuração.

* Assine meu canal no Youtube 🙂

Referências


Se você estiver interessado em conhecer mais e aprender como desenvolver aplicações com uma arquitetura responsável utilizando DDD, TDD, BDD, aplicando os princípios SOLID, diversos Design Patterns e escrevendo testes de unidade conheça meus cursos:

Vamos continuar a troca de experiências, deixe seu comentário abaixo, se gostou e concorda com o artigo compartilhe com seus colegas para transmitirmos o conhecimento para o máximo de pessoas possíveis. ;)

12 pensou em “Turbinando sua aplicação ASP.NET no IIS

  1. Alguma dica para Azure WebSites? Há alguma configuração lá para que o request seja mais rápido?

    Show de video

  2. Eduardo
    Boa tarde

    Gostaria de saber se essas dicas podem ser aplicadas para WebApi?

    Excelente post!

  3. Parabéns, estava procurando isso.
    Preciso agora colocar isso em prática em cliente que está enfrentando lentidão.
    Obrigado

  4. Muito boa esta dica, estou enfrentando este problema.

    Mas preciso de saber qual solução os desenvolvedores usam para publicar as aplicações ASP.NET remotamente.
    Meu irmão está desenvolvendo um sistema e precisa ter acesso direto ao meu servidor para publicar e atualizar o BD (SQL), direto de seu Visual Studio.

    Obrigado

  5. Bom dia, pessoal!
    Gostaria de saber se o mesmo se aplica ao IIS com o ASP.NET Core?
    Não consegui os mesmos resultados.

  6. Bom dia, pessoal!
    Gostaria de saber se o mesmo se aplica ao IIS com ASP.NET Core.
    Não consegui os mesmos resultados.
    O pool de conexões cai todo momento.

  7. Fala galera!

    Para quem tem mais de um site (meu caso, rs) e esteja pensando em automatizar com appcmd, o caminho é esse:

    %windir%\System32\inetsrv\appcmd set config -section:system.applicationHost/applicationPools “/[name=’nome_do_app_pool’].autoStart:True” /commit:appHost
    %windir%\System32\inetsrv\appcmd set config -section:system.applicationHost/applicationPools “/[name=’nome_do_app_pool’].startMode:AlwaysRunning” /commit:appHost
    %windir%\System32\inetsrv\appcmd set config -section:system.applicationHost/sites “/[name=’nome_do_site’].[path=’/’].preloadEnabled:True” /commit:appHost
    %windir%\System32\inetsrv\appcmd set config -section:system.applicationHost/sites “/[name=’nome_do_site’].[path=’/’].serviceAutoStartEnabled:True” /commit:appHost

    Caso o ApplicationPool seja uma application dentro de um site (como no exemplo do Eduardo), só colocar o caminho dele ali em [path=’/’] (tem que ter a barra!). No exemplo do vídeo ficaria: [path=’/SmartShop’]

    Abs!

Os comentários estão fechados.