Pré-Compilando Web Application Projects


Uma das grandes vantagens que o ASP.NET trouxe em relação ao ASP Clássico é que as páginas não são mais interpretadas, mas sim compiladas. Quando compiladas, não me refiro apenas ao código VB.NET/C# que escrevemos no CodeBehind, mas sim a aplicação como um todo, inclusive (e principalmente) os markups (conteúdo HTML da página ASPX).

Quando utilizamos projetos do tipo Web Application Project, há uma característica do ASP.NET que é um retardo no processamento da primeira requisição. Isso se dá pelo fato de que o ASP.NET precisa fazer o parser das páginas ASPX e transformá-las em código MSIL e, se irmos mais a fundo, notaremos que essa versão compilada estará armazenada dentro do diretório Temporary ASP.NET Files, que é criado dentro em %windir%Microsoft.NETFrameworkVersao quando instalamos o .NET Framework na máquina.

Podemos apagar todo o conteúdo deste diretório para um exemplo. Ao fazer o deploy de uma aplicação baseada em uma template do tipo Web Application Project, nada terá dentro do diretório Temporary ASP.NET Files até a primeira requisição para essa aplicação. Assim que, qualquer página for chamada, já iremos notar uma pasta com o mesmo nome do diretório virtual criada por esse processo. Isso é mostrado a partir da imagem abaixo:

Para o exemplo, temos uma página simples com um TextBox, um Label e um Button. Ao clicar no botão, o conteúdo digitado no TextBox (propriedade Text) é atributo a propriedade Text do Label.

Se abrirmos a DLL no Reflector, podemos comprovar a compilação em código MSIL, pois todo o markup foi totalmente compilado. Na verdade teremos dois Assemblies: um contendo classes (herdando diretamente da classe Page) que representam as páginas ASPX e, dentro delas, o código que colocamos no CodeBehind juntamente com a declaração dos controles; já dentro do segundo Assembly, teremos o código responsável pelo criação e montagem da hierarquia de controles da página e, por sua vez, essa classe herdará da sua correspondente que estará definida no Assembly anterior. A imagem abaixo ilustra esse processo:

O método FrameworkInitialize é chamado pelo próprio runtime do ASP.NET e, dentro dele, há a chamada para o método BuildControlTree que tem o importante papel de criar a hierarquia de controles dentro da respectiva página.

Os projetos do tipo Web Site já possuem (maiores informações aqui), ao fazer a publicação do mesmo, uma possibilidade para efetuar a pré-compilação. Até mesmo em tempo de desenvolvimento, esses tipos de projetos são pré-compilados. Já para os projetos do tipo Web Application Project, voce pode também adiantar esse processo, evitando que o primeiro usuário pague o preço pela demora. Para isso, basta voce recorrer ao utilitário chamado aspnet_compiler.exe que, em uma de suas opções, voce poderá especificar um diretório virtual, para que o mesmo crie a versão compilado do mesmo. A sintaxe para isso (utilizando a partir do prompt do Visual Studio .NET) é:

C:>aspnet_compiler -v /WebAppTest

Anúncios

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s