Using Script reference Profiler to Improve the Performance of an ASP.NET AJAX page

Posted by: Girish Dagdiya , on 6/14/2010, in Category ASP.NET AJAX
Views: 68592
Abstract: This article demonstrates how to use Script reference profiler to improve performance of an ASP.NET AJAX page.
This article demonstrates how to use script reference profiler to improve performance of an ASP.NET AJAX page. You can download the binary files (dll’s) of script reference profiler from here.
Note: The Script Reference Profiler enables you to combine scripts in order to reduce the number of downloaded files. You should be using ASP.NET 3.5 AJAX SP1 in order to use the Script reference Profiler.
After downloading this file on your computer > Open Visual Studio 2008/2010 > Go to the Toolbox > Right Click > click on choose items and select the .dll you have downloaded. Now you can see the script reference profiler added to the toolbox.
ScriptReference
We are going to use Firefox and Firebug to monitor and see how performance improves on page refresh.
In this article, we are going to use one calendar extender and one filtered textbox extender to show the performance improvement using script reference profiler.
Let us see how to use it:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
 
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
    <title>How to improve Ajax performance</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:ScriptManager ID="ScriptManager1" runat="server">
        </asp:ScriptManager>
        <br /><br />       
        <asp:Label ID="lblDate" runat="server" Text="Date"></asp:Label>
        <asp:TextBox ID="txtDate" runat="server" Width="200px"></asp:TextBox><br />
        <cc1:CalendarExtender ID="CalendarExtendertxtDate" runat="server" Format="dd/MM/yyyy" TargetControlID="txtDate">
        </cc1:CalendarExtender>
        <asp:Label ID="lblMobileNo" runat="server" Text="Mobile No"></asp:Label>
        <asp:TextBox ID="txtMobileNo" runat="server"></asp:TextBox>
        <cc1:FilteredTextBoxExtender ID="FilteredTextBoxExtenderMobileNo" runat="server" TargetControlID="txtMobileNo" FilterType="Numbers">
        </cc1:FilteredTextBoxExtender>
    </div>
    </form>
</body>
</html>
Shown above is the markup of a simple page where we have a textbox for entering date and another textbox for entering mobile numbers (numbers only). Now, browse this page in Firefox (with Firebug installed) and refresh it. You can see the number of request, KB’s downloaded and the time required for the download in the picture shown below:
Download
As seen in the picture, we can see there are 15 requests made for the page, 98.3KB of resources downloaded and the total time required was 4.3s.
Now, drag and drop the Script Reference profiler on page. The markup  will look like this:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
 
<%@ Register Assembly="ScriptReferenceProfiler" Namespace="ScriptReferenceProfiler"    TagPrefix="cc2" %>
 
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1" %>
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
    <title>How to improve Ajax performance</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:ScriptManager ID="ScriptManager1" runat="server"> 
        </asp:ScriptManager>
        <br /><br />
 
        <cc2:ScriptReferenceProfiler ID="ScriptReferenceProfiler1" runat="server" />
 
        <asp:Label ID="lblDate" runat="server" Text="Date"></asp:Label>
        <asp:TextBox ID="txtDate" runat="server"></asp:TextBox><br /><br /> 
        <cc1:CalendarExtender ID="CalendarExtendertxtDate" runat="server" Format="dd/MM/yyyy" TargetControlID="txtDate">
        </cc1:CalendarExtender>
        <asp:Label ID="lblMobileNo" runat="server" Text="Mobile No"></asp:Label>
        <asp:TextBox ID="txtMobileNo" runat="server"></asp:TextBox>
        <cc1:FilteredTextBoxExtender ID="FilteredTextBoxExtenderMobileNo" runat="server" TargetControlID="txtMobileNo" FilterType="Numbers">
        </cc1:FilteredTextBoxExtender>
    </div>
    </form>
</body>
</html>
 
Here the Script reference profiler will give a detailed list of the references of scripts as shown below:
Reference
We can see there are 12 JavaScript file references used in this page. The next step is to use these references in the ScriptManager. Copy those references and paste it under ScriptManager > CompositeScript > Scripts. Once you have discovered what scripts are being used in a page, remove the Script Reference profiler from the page as shown in the markup below:
...
        <asp:ScriptManager ID="ScriptManager1" runat="server">
            <CompositeScript>
                <Scripts>
                    <asp:ScriptReference Name="MicrosoftAjax.js" />
                    <asp:ScriptReference Name="MicrosoftAjaxWebForms.js" />
                    <asp:ScriptReference Name="AjaxControlToolkit.Common.Common.js" Assembly="AjaxControlToolkit, Version=3.0.20820.16598, Culture=neutral, PublicKeyToken=28f01b0e84b6d53e" />
                    <asp:ScriptReference Name="AjaxControlToolkit.Common.DateTime.js" Assembly="AjaxControlToolkit, Version=3.0.20820.16598, Culture=neutral, PublicKeyToken=28f01b0e84b6d53e" />
                    <asp:ScriptReference Name="AjaxControlToolkit.Compat.Timer.Timer.js" Assembly="AjaxControlToolkit, Version=3.0.20820.16598, Culture=neutral, PublicKeyToken=28f01b0e84b6d53e" />
                    <asp:ScriptReference Name="AjaxControlToolkit.Animation.Animations.js" Assembly="AjaxControlToolkit, Version=3.0.20820.16598, Culture=neutral, PublicKeyToken=28f01b0e84b6d53e" />
                    <asp:ScriptReference Name="AjaxControlToolkit.ExtenderBase.BaseScripts.js" Assembly="AjaxControlToolkit, Version=3.0.20820.16598, Culture=neutral, PublicKeyToken=28f01b0e84b6d53e" />
                    <asp:ScriptReference Name="AjaxControlToolkit.Animation.AnimationBehavior.js" Assembly="AjaxControlToolkit, Version=3.0.20820.16598, Culture=neutral, PublicKeyToken=28f01b0e84b6d53e" />
                    <asp:ScriptReference Name="AjaxControlToolkit.PopupExtender.PopupBehavior.js" Assembly="AjaxControlToolkit, Version=3.0.20820.16598, Culture=neutral, PublicKeyToken=28f01b0e84b6d53e" />
                    <asp:ScriptReference Name="AjaxControlToolkit.Common.Threading.js" Assembly="AjaxControlToolkit, Version=3.0.20820.16598, Culture=neutral, PublicKeyToken=28f01b0e84b6d53e" />
                    <asp:ScriptReference Name="AjaxControlToolkit.Calendar.CalendarBehavior.js" Assembly="AjaxControlToolkit, Version=3.0.20820.16598, Culture=neutral, PublicKeyToken=28f01b0e84b6d53e" />
                    <asp:ScriptReference Name="AjaxControlToolkit.FilteredTextBox.FilteredTextBoxBehavior.js"
                        Assembly="AjaxControlToolkit, Version=3.0.20820.16598, Culture=neutral, PublicKeyToken=28f01b0e84b6d53e" />
                </Scripts>
            </CompositeScript>
        </asp:ScriptManager>
    ...
 
    </div>
    </form>
Now browse this page in Firefox and refresh it and see the performance improvement using Firebug. In the picture shown below, you can see that the number of requests and the time required has reduced.
Request_Reduced
Here’s a quick performance comparison
Performance_Comparision
As you can see, there is a performance improvement in this simple page after using the Script reference profiler.
Thank you for viewing this article. The entire source code of this article can be downloaded here
Give a +1 to this article if you think it was well written. Thanks!
Recommended Articles


Page copy protected against web site content infringement by Copyscape


User Feedback
Comment posted by Lubic Gergi on Thursday, June 17, 2010 12:02 PM
thanks for the intro on script reference profiler. looks useful
Comment posted by Worawut Boontan(วรวุฒิ บุญตัน) on Wednesday, July 7, 2010 5:41 AM
Very nice article and good summary explain. I will try this solution with my next project.

Thanks you.
Comment posted by Keith on Wednesday, July 7, 2010 4:36 PM
Great Article, though it would be nice if it also had the option to pull in the js from the AJAX CDN for even better performance: http://www.asp.net/ajaxlibrary/CDN.ashx
Comment posted by ganesh on Thursday, September 23, 2010 9:06 AM
it's very super,but i want example for dataGrid and  gridview.i really  appreciate for free teaching.thank
regards
a.genash
Comment posted by mohammed on Thursday, March 24, 2011 4:52 AM
Very Nice Resourcses
Comment posted by S on Wednesday, March 6, 2013 8:35 AM
I've searched a lot but your post was the easiest to understand and implement.
Thanks!
Comment posted by Balaji on Friday, July 26, 2013 5:52 AM
Thanks ...

Post your comment
Name:  
E-mail: (Will not be displayed)
Comment:
Insert Cancel