[Tips] Desactivar EnablePartialRendering en ScriptManager cuando no utilices UpdatePanels (WebForm no Dead)
Hola que tal?, si bien hay personas que se han puesto una bandera de lucha en contra de los webforms (no comparto esta postura, luego escribiré sobre eso), existen muchas aplicaciones construidas bajo la modalidad de WebForms que utilizan ASP.NET Ajax, y sin duda, se seguirán creando.
Uno de los elementos que utilizamos cuando ocupamos ASP.NET Ajax es el ScriptManager, que muchos desarrolladores lo utilizan sin mayor configuración. Es aquí en donde quiero detenerme un momento, y es que si no estas ocupando un UpdatePanel en la página, y tienes un ScriptManager en la página, ahorras generación y carga de Scripts seteando la propiedad EnablePartialRedering en false.
Ahora bien, por mail me preguntaron, “de que sirve un ScriptManager sin un UpdatePanel!”, y la respuesta es “de mucho”, por ejemplo, podemos utilizar algunos controles del Ajax Control Toolkit que no necesitan un UpdatePanel, sin ir más lejos el control Color Picker junto a un ToolkitScripManager (que hereda de Script Manager)
Caso Ejemplo 1
<asp:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server">
</asp:ToolkitScriptManager>
<br />
Color:<br />
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:ColorPickerExtender
ID="TextBox1_ColorPickerExtender"
runat="server" Enabled="True"
TargetControlID="TextBox1">
</asp:ColorPickerExtender>
Lo que resulta en:

Caso Ejemplo 2
Como vez, sin UpdatePanel, otro escenario es por ejemplo la llamada asíncrona a un Webservice o a un WebMethod mediante el ScriptManager y Javascript, para el ejemplo veremos el primer caso:
Vamos a tener un WebService que se exponga un WebMethod que se llame cuadrado, que simplemente y para efectos del demo, calculará y devolverá el cuadrado de un número.
Public Class wsmartes
Inherits System.Web.Services.WebService
<WebMethod()> _
Public Function Cuadrado(numero As Integer) As Integer
Return numero * numero
End Function
End Class
Luego desde una página haremos la llamada, primero a configurar el ScriptManager para que pueda acceder al servicio:
<asp:ScriptManager ID="ScriptManager1" runat="server">
<Services>
<asp:ServiceReference Path="~/wsmartes.asmx" />
</Services>
</asp:ScriptManager>
Luego el javascript para la llamada Async al Servicio Web.
<script type="text/javascript">
function Calcula() {
demo1.wsmartes.Cuadrado(document.getElementById("Text1").value, ResultoBien, Falla);
}
function ResultoBien(args) {
alert("El Cuadrado es: " + args);
}
function Falla(error) {
alert("Error:" + error.get_message());
}
</script>
En la página tengo solo un un input text y un boton html, al momento de ejecutar:

Pero que pasa si no tenemos desactivada la propiedad EnablePartialRedering:

Tenemos aprox 464KB descargados a la página por la generación de Script (obviamente no contamos el WebForm1.aspx, que es la pagina propiamente tal) desde el ScriptManager, sin embargo si desactivamos la propiedad en cuestión:

Ahora tenemos 349Kb , es decir 115Kb aprox menos en la carga de pagina sin contar que no tenemos la propiedad ScriptMode en Release.
Ahora si agregamos esta propiedad, ScriptMode en Release:

Ahora disminuimos a 85kb aprox, es decir, logramos reducir el tamaño de los Script Considerablemente!

Como vez, con pequeños cambios podemos lograr optimizar nuestras aplicaciones existentes
, espero que te sirva!.
Saludos,
Gonzalo