Novidades do .NET 2.0: mudanças na infra-estrutura do ASP.NET 2.0


Além de vários novos controles adicionados, as principais mudanças do ASP.NET  2.0 foram introduzidas em sua infra-estrutura. Mudanças drásticas foram feitas:

  • no modelo de codificação, no qual anteriormente havia uma relação de herança entre a página ASPX e o arquivo de código (code-behind), e agora faz uso de classes partial, ou seja, tanto a página ASPX quanto o código fazem parte da mesma classe, que são combinados em tempo de execução; isso também faz com que o arquivo code-behind fique mais claro e menor do que o modelo antigo;
  • na compilação: agora, o padrão do ASP.NET é compilar a aplicação em tempo execução. Isso implica em copiar os arquivos code-behind para o servidor. Entretanto, por questões de segurança e/ou privacidade, nem sempre podemos ou queremos enviar o código com toda nossa lógica para o servidor. Nestes casos, podemos utilizar o que foi chamado de Precompilation for Deployment, que consiste em pré-compilar o site em assemblies, que então serão copiados para o servidor. Este tipo de pré-compilação faz com que nem mesmo o código fonte de páginas ASPX fique disponível. Também foi desenvolvido um outro tipo de pré-compilação chamado In-Place Precompilation, cujo objetivo, é ganhar performance, já que não será necessária a compilação das página na primeira vez em que ela for solicitada, que é o que ocorre se não for feita a pré-compilação. Ambos os tipos de pré-compilação são feitos com o utilitário de linha de comando aspnet_compiler.exe;

Também vale citar as mudanças na estrutura do ViewState. O ViewState é uma técnica utilizada pelo ASP.NET para manter o estado de controles de uma página. Isso é feito através de um campo HIDDEN (oculto) da página chamado __VIEWSTATE e, dependendo de como fosse utilizado, poderia causar um sério problema de performance, pois seu tamanho poderia aumentar significantemente, o que aumentaria também o tamanho da página. Foram feitas alterações no formato de serialização deste campo, o que proporcionou a redução do seu tamanho em quase 50%, em um dos testes feitos.

Referências:

ASP.NET 2.0 Internals
ASP.NET Web Site Precompilation Overview
ASP.NET Page Class Overview
Speed Up Your Site with the Improved View State in ASP.NET 2.0

Ricardo Oneda

Comments (6) -

  • Juliano Nunes

    11/4/2005 12:01:59 AM | Reply

    Adicionando ao que o Ricardo disse, o VS.Net 2005 utiliza um novo modelo, chamado Code-Separation, que consiste no uso das Partial Classes e possibilita que apenas um arquivo no seu site seja editado e enviado ao servidor, sem que tenha que recompilar toda aplicação (desculpe se tiver falado algo errado).

  • Ricardo Oneda

    11/4/2005 10:23:53 AM | Reply

    Juliano, na verdade existem dois tipos de codificação: a in-line (na qual o código está no mesmo arquivo que a página ASPX) e a code-behind, que agora faz uso de partial classes. Você pode ter a possibilidade de editar um arquivo ASPX no servidor sem a necessidade de recompilar o site todo, desde que você faça esta escolha no momento da compilação. Veja em msdn.microsoft.com/.../ms227430(VS.80).aspx

  • Juliano Nunes

    11/4/2005 7:38:20 PM | Reply

    Ricardo, não sei se você já viu os treinamentos de ASP.Net 2.0 da Microsoft E-Learning, mas lá eles citam esse esquema do code-separation.

    Pelo que entendi, funciona da seguinte forma, no VS.Net 2003 e ASP.Net 1.x você compila na IDE os arquivos .CS e .VB, e os arquivos .ASPX, .ASCX só são compilados depois.

    Agora com esse code-separation você pode enviar os arquivos .CS e .VB sem compilá-los no ambiente, deixando que a compilação poderá ser feita inteiramente no servidor.

    Desculpe se estiver enganado, mas foi isso que entendi. Vou verificar o treinamento novamente depois para confirmar isso.

    Valeu. Até mais.

  • Ricardo Oneda

    11/5/2005 3:43:44 PM | Reply

    Juliano, quando disse sobre in-line e code-behind, estava me referindo ao modelo de codificação. Pelo que você explicou, você está se referindo ao modelo de compilação. Realmente, este é o modelo padrão agora no ASP.NET 2.0, ou seja, enviar o código-fonte da aplicação para o servidor (isso também era possível na versão 1.X). Isso permite que o código seja alterado no servidor, como você disse. Se você não quiser enviar os fontes, então pode utilizar algum dos métodos de pré-compilação que eu citei acima. Dependendo do modelo de pré-compilação, você pode ou não alterar somente as páginas ASPX no servidor ou então nem isso, já que elas também pode ser compiladas em MSIL.

  • Juliano Nunes

    11/5/2005 8:30:20 PM | Reply

    Ricardo, o ASP.Net 1.x permitia enviar os arquivos .CS e .VB para compilar somente no servidor automaticamente?

  • Ricardo Oneda

    11/7/2005 10:36:03 PM | Reply

    Juliano, sim, no ASP.NET 1.X é possível utilizar code-behind sem pré-compilação, mas essa opção não é suportada pelo VS. Você tem que fazer na mão. Basta utilizar a propriedade Src da diretiva @Page da página ASPX. Ficaria mais ou menos assim:

    <%@ Page Language="C#" Inherits="NameSpace.NOME_DA_CLASSE"
    Src="NOME_DO_ARQUIVO_FONTE.cs"%>

    Veja:

    Src: Specifies the source file name of the code-behind class to dynamically compile when the page is requested. You can choose to include programming logic for your page either in a code-behind class or in a code declaration block in the .aspx file.
    Note: RAD designers, such as Visual Studio .NET, do not use this attribute. Instead, they precompile code-behind classes and then use the Inherits attribute.
    (msdn.microsoft.com/.../ydy4x04a(vs.71).aspx)

    E também:

    The code-behind model illustrated above is the model used by Visual Studio. The ASP.NET Framework supports a slightly different code-behind model for Web Forms pages. In the ASP.NET code-behind model, the visual elements are in an .aspx file and the code is in a separate code-only file, as in Visual Studio. However, there is no project, and the code is not pre-compiled. Instead, the code in the .vb or .cs file is compiled at run time, when the page is first requested by a user. (msdn.microsoft.com/.../015103yb(vs.71).aspx)

    E veja:

    msdn.microsoft.com/en-us/magazine/cc301556.aspx
    www.codeguru.com/.../

Loading