<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://weblogs.asp.net/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Search results matching tags 'Ajax', 'Atlas', and 'Script Loading'</title><link>http://weblogs.asp.net/search/SearchResults.aspx?q=&amp;tag=Ajax%2cAtlas%2cScript+Loading&amp;orTags=0&amp;o=DateDescending</link><description>Search results matching tags 'Ajax', 'Atlas', and 'Script Loading'</description><dc:language>en-US</dc:language><generator>CommunityServer 2007 SP1 (Build: 20510.895)</generator><item><title>ScriptManager.LoadScriptsBeforeUI Explained</title><link>http://weblogs.asp.net/infinitiesloop/archive/2007/03/03/scriptmanager-loadscriptsbeforeui-explained.aspx</link><pubDate>Sat, 03 Mar 2007 05:00:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:1889589</guid><dc:creator>InfinitiesLoop</dc:creator><author>InfinitiesLoop</author><description>&lt;p&gt;A typical &lt;a href="http://ajax.asp.net/" target="_blank"&gt;ASP.NET AJAX&lt;/a&gt; page will contain a fair amount of script references. Sometimes more than you realize, because components you use, such as server controls from the &lt;a href="http://www.codeplex.com/AtlasControlToolkit" target="_blank"&gt;ASP.NET AJAX Control Toolkit&lt;/a&gt;, automatically include library scripts that enable their client-side magic. Sometimes you include references explicitly through the ScriptManager&amp;#39;s &lt;a href="http://ajax.asp.net/docs/mref/P_System_Web_UI_ScriptManager_Scripts.aspx" target="_blank"&gt;ScriptReferences&lt;/a&gt; collection.&lt;/p&gt;&lt;p&gt;The &lt;a href="http://ajax.asp.net/docs/mref/P_System_Web_UI_ScriptManager_LoadScriptsBeforeUI.aspx" target="_blank"&gt;LoadScriptsBeforeUI&lt;/a&gt; property is all about performance tweaking. Normally you should leave it at its default value, true. But when should you set it to false, and what sort of implications does it have?&lt;/p&gt;&lt;p&gt;Whether scripts are included on your page because of server-side components requesting them, or because you explicitly listed them in the Scripts collection, they are rendered as script elements in your page. For example, the following script reference:&lt;/p&gt;&lt;div class="codeSample"&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: gray"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0080c1"&gt;asp&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #0080c1"&gt;ScriptManager&lt;/span&gt; &lt;span style="color: #dddddd"&gt;ID&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: aqua"&gt;&amp;quot;ScriptManager1&amp;quot;&lt;/span&gt; &lt;span style="color: #dddddd"&gt;runat&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: aqua"&gt;&amp;quot;server&amp;quot;&lt;/span&gt;&lt;span style="color: gray"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: gray"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0080c1"&gt;Scripts&lt;/span&gt;&lt;span style="color: gray"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: gray"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0080c1"&gt;asp&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #0080c1"&gt;ScriptReference&lt;/span&gt; &lt;span style="color: #dddddd"&gt;Path&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: aqua"&gt;&amp;quot;~/BigScript.ashx&amp;quot;&lt;/span&gt; &lt;span style="color: gray"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: gray"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #0080c1"&gt;Scripts&lt;/span&gt;&lt;span style="color: gray"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: gray"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #0080c1"&gt;asp&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #0080c1"&gt;ScriptManager&lt;/span&gt;&lt;span style="color: gray"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: gray"&gt;&lt;font color="#000000"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Will render into your page&amp;#39;s HTML as:&lt;/p&gt;&lt;div class="codeSample"&gt;&amp;lt;script src=&amp;quot;BigScript.ashx&amp;quot; type=&amp;quot;text/javascript&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;/div&gt;&lt;p&gt;The question is -- should this script reference be before, or after the rest of the page&amp;#39;s HTML?&lt;/p&gt;&lt;p&gt;When the browser encounters a script tag with a &amp;quot;src&amp;quot; attribute, it will pause the rendering of the page, download the script, execute the contents, and then proceed with rendering the page. By default, script references are placed at the top of the page (the beginning of the form element, actually), which is usually before all the rest of the HTML of the page. &lt;/p&gt;&lt;p&gt;Normally scripts load very quickly and are cached (they are similar to having images on your page, which the browser loads separately) so this is not an issue. But if the scripts you are referencing are numerous, large, or for whatever reason take a long time to download, the UI of your page will be on hold for a noticeable amount of time. From the end user perspective, the page will take longer to load than if there were no script references.&lt;/p&gt;&lt;p&gt;If you set LoadScriptsBeforeUI to false, then the script tags will render at the &lt;em&gt;bottom&lt;/em&gt; of the form, AFTER all the UI of the page. Since the browser is able to render all the HTML before downloading the script references, the page will display and become interactive much sooner. It will still take just as long for the scripts to download, but they download while the UI has already been rendered, so there is an increase in the &amp;quot;perceived performance&amp;quot; of the page. The time between when the user clicks on a link to when they see UI and can interact with it no longer includes the time it takes to download external scripts.&lt;/p&gt;&lt;p&gt;To illustrate, lets create a page to measure how long it takes for certain events to happen, and see how the setting affects things. First of all, we will create an HttpHandler to serve as a slow loading script. To simulate a slow loading script, we use Thread.Sleep. The script itself calls a function declared on the page so we will know when it has loaded.&lt;/p&gt;&lt;div class="codeSample"&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: yellow"&gt;&amp;lt;%&lt;/span&gt;&lt;span style="color: gray"&gt;@&lt;/span&gt; &lt;span style="color: #0080c1"&gt;WebHandler&lt;/span&gt; &lt;span style="color: #dddddd"&gt;Language&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: aqua"&gt;&amp;quot;C#&amp;quot;&lt;/span&gt; &lt;span style="color: #dddddd"&gt;Class&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: aqua"&gt;&amp;quot;BigScript&amp;quot;&lt;/span&gt; &lt;span style="color: yellow"&gt;%&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #0080c0"&gt;using&lt;/span&gt; System;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #0080c0"&gt;using&lt;/span&gt; System&lt;span style="color: aqua"&gt;.&lt;/span&gt;Threading;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #0080c0"&gt;using&lt;/span&gt; System&lt;span style="color: aqua"&gt;.&lt;/span&gt;Web;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: #0080c0"&gt;public&lt;/span&gt; &lt;span style="color: #0080c0"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af"&gt;BigScript&lt;/span&gt; : &lt;span style="color: #2b91af"&gt;IHttpHandler&lt;/span&gt; {&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0080c0"&gt;public&lt;/span&gt; &lt;span style="color: #0080c0"&gt;void&lt;/span&gt; ProcessRequest (&lt;span style="color: #2b91af"&gt;HttpContext&lt;/span&gt; context) {&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green"&gt;// simulate a slow-loading script&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af"&gt;Thread&lt;/span&gt;&lt;span style="color: aqua"&gt;.&lt;/span&gt;Sleep(&lt;span style="color: yellow"&gt;3000&lt;/span&gt;);&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; context&lt;span style="color: aqua"&gt;.&lt;/span&gt;Response&lt;span style="color: aqua"&gt;.&lt;/span&gt;ContentType &lt;span style="color: aqua"&gt;=&lt;/span&gt; &lt;span style="color: #0080c1"&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; context&lt;span style="color: aqua"&gt;.&lt;/span&gt;Response&lt;span style="color: aqua"&gt;.&lt;/span&gt;Write(&lt;span style="color: #0080c1"&gt;&amp;quot;var scriptVariable = true;\r\n&amp;quot;&lt;/span&gt;);&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; context&lt;span style="color: aqua"&gt;.&lt;/span&gt;Response&lt;span style="color: aqua"&gt;.&lt;/span&gt;Write(&lt;span style="color: #0080c1"&gt;&amp;quot;logTimer(&amp;#39;Script Loaded&amp;#39;);&amp;quot;&lt;/span&gt;);&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0080c0"&gt;public&lt;/span&gt; &lt;span style="color: #0080c0"&gt;bool&lt;/span&gt; IsReusable {&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0080c0"&gt;get&lt;/span&gt; { &lt;span style="color: #0080c0"&gt;return&lt;/span&gt; &lt;span style="color: #0080c0"&gt;false&lt;/span&gt;; }&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;If we just include this in BigScript.ashx, we can now reference it like it were an actual javascript file (you may also use this kind of technique to reference dynamically created javascript libraries). We&amp;#39;ll also include some javascript on our page to log when certain events happen. We&amp;#39;ll use an ASP Button to toggle the LoadScriptsBeforeUI setting so we can play with each scenario easily. And just for a more real-world feel, we&amp;#39;ll include tons of content in the page -- in this case, we&amp;#39;ll insert a UserControl five times, where that user control&amp;nbsp;simply contains the contents of the ScriptManager summary documentation page from the ajax site. Then finally once the page has finally loaded, we alert a report showing us what happened.&lt;/p&gt;&lt;p&gt;Here is a complete listing of the page:&lt;/p&gt;&lt;div class="codeSample"&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: yellow"&gt;&amp;lt;%&lt;/span&gt;&lt;span style="color: gray"&gt;@&lt;/span&gt; &lt;span style="color: #0080c1"&gt;Page&lt;/span&gt; &lt;span style="color: #dddddd"&gt;Language&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: aqua"&gt;&amp;quot;C#&amp;quot;&lt;/span&gt; &lt;span style="color: yellow"&gt;%&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: yellow"&gt;&amp;lt;%&lt;/span&gt;&lt;span style="color: gray"&gt;@&lt;/span&gt; &lt;span style="color: #0080c1"&gt;Register&lt;/span&gt; &lt;span style="color: #dddddd"&gt;Src&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: aqua"&gt;&amp;quot;HugeContent.ascx&amp;quot;&lt;/span&gt; &lt;span style="color: #dddddd"&gt;TagName&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: aqua"&gt;&amp;quot;HugeContent&amp;quot;&lt;/span&gt; &lt;span style="color: #dddddd"&gt;TagPrefix&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: aqua"&gt;&amp;quot;uc1&amp;quot;&lt;/span&gt; &lt;span style="color: yellow"&gt;%&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: gray"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0080c1"&gt;script&lt;/span&gt; &lt;span style="color: #dddddd"&gt;runat&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: aqua"&gt;&amp;quot;server&amp;quot;&lt;/span&gt;&lt;span style="color: gray"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0080c0"&gt;public&lt;/span&gt; &lt;span style="color: #0080c0"&gt;void&lt;/span&gt; cmdBeforeUI_Click(&lt;span style="color: #0080c0"&gt;object&lt;/span&gt; sender, &lt;span style="color: #2b91af"&gt;EventArgs&lt;/span&gt; args) {&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0080c0"&gt;this&lt;/span&gt;&lt;span style="color: aqua"&gt;.&lt;/span&gt;ScriptManager1&lt;span style="color: aqua"&gt;.&lt;/span&gt;LoadScriptsBeforeUI &lt;span style="color: aqua"&gt;=&lt;/span&gt; &lt;span style="color: #0080c0"&gt;true&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0080c0"&gt;public&lt;/span&gt; &lt;span style="color: #0080c0"&gt;void&lt;/span&gt; cmdAfterUI_Click(&lt;span style="color: #0080c0"&gt;object&lt;/span&gt; sender, &lt;span style="color: #2b91af"&gt;EventArgs&lt;/span&gt; args) {&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0080c0"&gt;this&lt;/span&gt;&lt;span style="color: aqua"&gt;.&lt;/span&gt;ScriptManager1&lt;span style="color: aqua"&gt;.&lt;/span&gt;LoadScriptsBeforeUI &lt;span style="color: aqua"&gt;=&lt;/span&gt; &lt;span style="color: #0080c0"&gt;false&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0080c0"&gt;protected&lt;/span&gt; &lt;span style="color: #0080c0"&gt;override&lt;/span&gt; &lt;span style="color: #0080c0"&gt;void&lt;/span&gt; Render(&lt;span style="color: #2b91af"&gt;HtmlTextWriter&lt;/span&gt; writer)&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0080c0"&gt;if&lt;/span&gt;(&lt;span style="color: #0080c0"&gt;this&lt;/span&gt;&lt;span style="color: aqua"&gt;.&lt;/span&gt;ScriptManager1&lt;span style="color: aqua"&gt;.&lt;/span&gt;LoadScriptsBeforeUI) {&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0080c0"&gt;this&lt;/span&gt;&lt;span style="color: aqua"&gt;.&lt;/span&gt;Page&lt;span style="color: aqua"&gt;.&lt;/span&gt;Title &lt;span style="color: aqua"&gt;=&lt;/span&gt; &lt;span style="color: #0080c1"&gt;&amp;quot;Scripts Loaded BEFORE UI&amp;quot;&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0080c0"&gt;else&lt;/span&gt; {&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0080c0"&gt;this&lt;/span&gt;&lt;span style="color: aqua"&gt;.&lt;/span&gt;Page&lt;span style="color: aqua"&gt;.&lt;/span&gt;Title &lt;span style="color: aqua"&gt;=&lt;/span&gt; &lt;span style="color: #0080c1"&gt;&amp;quot;Scripts Loaded AFTER UI&amp;quot;&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0080c0"&gt;base&lt;/span&gt;&lt;span style="color: aqua"&gt;.&lt;/span&gt;Render(writer);&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: gray"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #0080c1"&gt;script&lt;/span&gt;&lt;span style="color: gray"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: gray"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0080c1"&gt;html&lt;/span&gt; &lt;span style="color: #dddddd"&gt;xmlns&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: aqua"&gt;&amp;quot;http://www.w3.org/1999/xhtml&amp;quot;&lt;/span&gt;&lt;span style="color: gray"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: gray"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0080c1"&gt;head&lt;/span&gt; &lt;span style="color: #dddddd"&gt;runat&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: aqua"&gt;&amp;quot;server&amp;quot;&lt;/span&gt;&lt;span style="color: gray"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: gray"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0080c1"&gt;title&lt;/span&gt;&lt;span style="color: gray"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #0080c1"&gt;title&lt;/span&gt;&lt;span style="color: gray"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: gray"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0080c1"&gt;script&lt;/span&gt; &lt;span style="color: #dddddd"&gt;type&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: aqua"&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt;&lt;span style="color: gray"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0080c0"&gt;var&lt;/span&gt; startTime &lt;span style="color: aqua"&gt;=&lt;/span&gt; &lt;span style="color: #0080c0"&gt;new&lt;/span&gt; Date();&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0080c0"&gt;var&lt;/span&gt; log &lt;span style="color: aqua"&gt;=&lt;/span&gt; &lt;span style="color: #0080c1"&gt;&amp;#39;&amp;#39;&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0080c0"&gt;function&lt;/span&gt; logTimer(msg) {&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0080c0"&gt;var&lt;/span&gt; time &lt;span style="color: aqua"&gt;=&lt;/span&gt; (&lt;span style="color: #0080c0"&gt;new&lt;/span&gt; Date() &lt;span style="color: aqua"&gt;-&lt;/span&gt; startTime);&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; log &lt;span style="color: aqua"&gt;+=&lt;/span&gt; time &lt;span style="color: aqua"&gt;+&lt;/span&gt; &lt;span style="color: #0080c1"&gt;&amp;#39;: &amp;#39;&lt;/span&gt; &lt;span style="color: aqua"&gt;+&lt;/span&gt; msg &lt;span style="color: aqua"&gt;+&lt;/span&gt; &lt;span style="color: #0080c1"&gt;&amp;#39;\r\n&amp;#39;&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0080c0"&gt;function&lt;/span&gt; pageLoad(sender&lt;span style="color: aqua"&gt;,&lt;/span&gt; args) {&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; logTimer(&lt;span style="color: #0080c1"&gt;&amp;quot;pageLoad&amp;quot;&lt;/span&gt;);&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; alert(log);&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: gray"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #0080c1"&gt;script&lt;/span&gt;&lt;span style="color: gray"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: gray"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #0080c1"&gt;head&lt;/span&gt;&lt;span style="color: gray"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: gray"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0080c1"&gt;body&lt;/span&gt;&lt;span style="color: gray"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: gray"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0080c1"&gt;form&lt;/span&gt; &lt;span style="color: #dddddd"&gt;id&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: aqua"&gt;&amp;quot;form1&amp;quot;&lt;/span&gt; &lt;span style="color: #dddddd"&gt;runat&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: aqua"&gt;&amp;quot;server&amp;quot;&lt;/span&gt;&lt;span style="color: gray"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: gray"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0080c1"&gt;script&lt;/span&gt; &lt;span style="color: #dddddd"&gt;type&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: aqua"&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt;&lt;span style="color: gray"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; logTimer(&lt;span style="color: #0080c1"&gt;&amp;quot;Start of Form&amp;quot;&lt;/span&gt;);&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; logTimer(&lt;span style="color: #0080c1"&gt;&amp;quot;scriptVariable defined? &amp;quot;&lt;/span&gt; &lt;span style="color: aqua"&gt;+&lt;/span&gt; (&lt;span style="color: #0080c0"&gt;typeof&lt;/span&gt;(scriptVariable) &lt;span style="color: aqua"&gt;!==&lt;/span&gt; &lt;span style="color: #0080c1"&gt;&amp;#39;undefined&amp;#39;&lt;/span&gt;));&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: gray"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #0080c1"&gt;script&lt;/span&gt;&lt;span style="color: gray"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: gray"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0080c1"&gt;asp&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #0080c1"&gt;ScriptManager&lt;/span&gt; &lt;span style="color: #dddddd"&gt;ID&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: aqua"&gt;&amp;quot;ScriptManager1&amp;quot;&lt;/span&gt; &lt;span style="color: #dddddd"&gt;runat&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: aqua"&gt;&amp;quot;server&amp;quot;&lt;/span&gt;&lt;span style="color: gray"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: gray"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0080c1"&gt;Scripts&lt;/span&gt;&lt;span style="color: gray"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: gray"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0080c1"&gt;asp&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #0080c1"&gt;ScriptReference&lt;/span&gt; &lt;span style="color: #dddddd"&gt;Path&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: aqua"&gt;&amp;quot;~/BigScript.ashx&amp;quot;&lt;/span&gt; &lt;span style="color: gray"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: gray"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #0080c1"&gt;Scripts&lt;/span&gt;&lt;span style="color: gray"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: gray"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #0080c1"&gt;asp&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #0080c1"&gt;ScriptManager&lt;/span&gt;&lt;span style="color: gray"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: gray"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0080c1"&gt;div&lt;/span&gt;&lt;span style="color: gray"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: gray"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0080c1"&gt;asp&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #0080c1"&gt;Button&lt;/span&gt; &lt;span style="color: #dddddd"&gt;ID&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: aqua"&gt;&amp;quot;cmdBeforeUI&amp;quot;&lt;/span&gt; &lt;span style="color: #dddddd"&gt;runat&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: aqua"&gt;&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color: #dddddd"&gt;Text&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: aqua"&gt;&amp;quot;Before UI&amp;quot;&lt;/span&gt; &lt;span style="color: #dddddd"&gt;OnClick&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: aqua"&gt;&amp;quot;cmdBeforeUI_Click&amp;quot;&lt;/span&gt; &lt;span style="color: gray"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: gray"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0080c1"&gt;asp&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #0080c1"&gt;Button&lt;/span&gt; &lt;span style="color: #dddddd"&gt;ID&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: aqua"&gt;&amp;quot;cmdAfterUI&amp;quot;&lt;/span&gt; &lt;span style="color: #dddddd"&gt;runat&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: aqua"&gt;&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color: #dddddd"&gt;Text&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: aqua"&gt;&amp;quot;After UI&amp;quot;&lt;/span&gt; &lt;span style="color: #dddddd"&gt;OnClick&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: aqua"&gt;&amp;quot;cmdAfterUI_Click&amp;quot;&lt;/span&gt; &lt;span style="color: gray"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: gray"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0080c1"&gt;uc1&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #0080c1"&gt;HugeContent&lt;/span&gt; &lt;span style="color: #dddddd"&gt;ID&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: aqua"&gt;&amp;quot;HugeContent1&amp;quot;&lt;/span&gt; &lt;span style="color: #dddddd"&gt;runat&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: aqua"&gt;&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color: gray"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: gray"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0080c1"&gt;uc1&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #0080c1"&gt;HugeContent&lt;/span&gt; &lt;span style="color: #dddddd"&gt;ID&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: aqua"&gt;&amp;quot;HugeContent2&amp;quot;&lt;/span&gt; &lt;span style="color: #dddddd"&gt;runat&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: aqua"&gt;&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color: gray"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: gray"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0080c1"&gt;uc1&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #0080c1"&gt;HugeContent&lt;/span&gt; &lt;span style="color: #dddddd"&gt;ID&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: aqua"&gt;&amp;quot;HugeContent3&amp;quot;&lt;/span&gt; &lt;span style="color: #dddddd"&gt;runat&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: aqua"&gt;&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color: gray"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: gray"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0080c1"&gt;uc1&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #0080c1"&gt;HugeContent&lt;/span&gt; &lt;span style="color: #dddddd"&gt;ID&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: aqua"&gt;&amp;quot;HugeContent4&amp;quot;&lt;/span&gt; &lt;span style="color: #dddddd"&gt;runat&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: aqua"&gt;&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color: gray"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: gray"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #0080c1"&gt;div&lt;/span&gt;&lt;span style="color: gray"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: gray"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0080c1"&gt;script&lt;/span&gt; &lt;span style="color: #dddddd"&gt;type&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: aqua"&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt;&lt;span style="color: gray"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; logTimer(&lt;span style="color: #0080c1"&gt;&amp;quot;End of Form&amp;quot;&lt;/span&gt;);&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: gray"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #0080c1"&gt;script&lt;/span&gt;&lt;span style="color: gray"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: gray"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #0080c1"&gt;form&lt;/span&gt;&lt;span style="color: gray"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: gray"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #0080c1"&gt;body&lt;/span&gt;&lt;span style="color: gray"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: gray"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #0080c1"&gt;html&lt;/span&gt;&lt;span style="color: gray"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The logTimer() function will make a note of how long it has been since the page first starts to render each time it is called. Our dynamic ASHX script will call the function when it loads. We also call it at the beginning of the form, and at the end of the form after all the content. We call it from pageLoad(), the event ASP.NET AJAX fires when the ajax library has initialized all the components on the page, and then report the accumulated log entries.&lt;/p&gt;&lt;p&gt;When you run it, you get this:&lt;/p&gt;&lt;p&gt;&lt;img alt="Loading scripts before UI..." border="0" height="212" src="http://www.infinity88.com/images/blog/LoadScriptsBeforeUI.gif" title="Loading scripts before UI..." width="293" /&gt;&lt;/p&gt;&lt;p&gt;These numbers are in milliseconds. The dynamic script we are loading sleeps for 3 seconds before responding. So you can see here that the script loaded (and executed) after about 3.5 seconds. Then in just 2 tenths of a second later, the page was completely finished loading. So obviously, we the user spent most of those 3 seconds staring at a white page while the page loaded. The form didn&amp;#39;t even START loading into view until 3.6 seconds after I navigated to the page.&lt;/p&gt;&lt;p&gt;Notice this &amp;quot;scriptVariable defined?&amp;quot; entry in the log. It says true. The script we load not only calls the logTimer function, it defines a variable. We attempt to read the value of that variable from inline script in our page:&lt;/p&gt;&lt;div class="codeSample"&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: gray"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0080c1"&gt;form&lt;/span&gt; &lt;span style="color: #dddddd"&gt;id&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: aqua"&gt;&amp;quot;form1&amp;quot;&lt;/span&gt; &lt;span style="color: #dddddd"&gt;runat&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: aqua"&gt;&amp;quot;server&amp;quot;&lt;/span&gt;&lt;span style="color: gray"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: gray"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0080c1"&gt;script&lt;/span&gt; &lt;span style="color: #dddddd"&gt;type&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: aqua"&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt;&lt;span style="color: gray"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; logTimer(&lt;span style="color: #0080c1"&gt;&amp;quot;Start of Form&amp;quot;&lt;/span&gt;);&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; logTimer(&lt;span style="color: #0080c1"&gt;&amp;quot;scriptVariable defined? &amp;quot;&lt;/span&gt; &lt;span style="color: aqua"&gt;+&lt;/span&gt; (&lt;span style="color: #0080c0"&gt;typeof&lt;/span&gt;(scriptVariable) &lt;span style="color: aqua"&gt;!==&lt;/span&gt; &lt;span style="color: #0080c1"&gt;&amp;#39;undefined&amp;#39;&lt;/span&gt;));&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: gray"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #0080c1"&gt;script&lt;/span&gt;&lt;span style="color: gray"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Since the script is loaded &amp;quot;before UI&amp;quot;, by the time our inline script executes, the script is loaded and all its libraries, variables, functions, or what have you will be available to us.&lt;/p&gt;&lt;p&gt;Now lets click the &amp;quot;AFTER UI&amp;quot; button...&lt;/p&gt;&lt;p&gt;&lt;img alt="Loading scripts after the UI..." height="212" src="http://www.infinity88.com/images/blog/loadscriptsafterui.gif" title="Loading scripts after the UI..." width="284" /&gt;&lt;/p&gt;&lt;p&gt;There&amp;#39;s a big difference here as you can see!&lt;/p&gt;&lt;p&gt;The beginning of the form loaded after just &lt;em&gt;89 milliseconds&lt;/em&gt;. The end of the form after only &lt;em&gt;122 milliseconds&lt;/em&gt;! That&amp;#39;s about a tenth of a second. From an end users point of view, that is nearly instantaneous with only a very brief &amp;quot;flash&amp;quot;. Because the browser renders UI as it encounters it, the page will not only display, but will be completely interactive by this point in time.&lt;/p&gt;&lt;p&gt;Then notice that our script loaded log still says about 3 seconds. It still takes 3 seconds to load, it&amp;#39;s just delayed until later. The pageLoad ASP.NET AJAX event does not fire until all script references have loaded and all the components on the page are initialized, so it too waits for 3 seconds, waiting until that script finally downloads.&lt;/p&gt;&lt;p&gt;However... take another look at our &amp;quot;scriptVariable defined?&amp;quot; entry... this time, it&amp;#39;s false.&lt;/p&gt;&lt;p&gt;It may seem obvious why that is now, but you need to be keenly aware of the consequences of this when you write real pages and decide to turn LoadScriptsBeforeUI off. The variable isn&amp;#39;t defined because the script that defines it&amp;nbsp;has not loaded yet when the form renders.&lt;/p&gt;&lt;p&gt;In a real world scenario this is a very important difference. The script may contain libraries that you may be depending on via inline script. If you want to delay loading it until after the UI, you will have to consequently delay your usage of that library until after the pageLoad event. No problem you might say, it&amp;#39;s worth the perceived performance right?&lt;/p&gt;&lt;p&gt;Remember that the UI is interactive while the scripts are downloading. So let&amp;#39;s say you have an AJAX Toolkit &lt;a href="http://ajax.asp.net/ajaxtoolkit/ConfirmButton/ConfirmButton.aspx" target="_blank"&gt;ConfirmButton&lt;/a&gt; on your page. The button will be usable by the user before this component has a chance to initialize -- so by delay loading the script, you are very much increasing the chance that the user clicks on it before the confirm behavior has been initialized, by passing your component entirely.&lt;/p&gt;&lt;p&gt;Another pitfall is if you hookup event handler declaratively. Perhaps you want to do some validation when a user clicks on a button, and you&amp;#39;ve referenced some validation library that makes it easy on you. A typical way to wire up the event is declaratively by calling a javascript function like so:&lt;/p&gt;&lt;div class="codeSample"&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: gray"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0080c1"&gt;script&lt;/span&gt; &lt;span style="color: #dddddd"&gt;type&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: aqua"&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt;&lt;span style="color: gray"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0080c0"&gt;function&lt;/span&gt; DoValidation() {&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; SomeExternalValidationLibrary.ValidateZipCode($get(&lt;span style="color: #0080c1"&gt;&amp;#39;zipCode&amp;#39;&lt;/span&gt;));&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: gray"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #0080c1"&gt;script&lt;/span&gt;&lt;span style="color: gray"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: gray"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0080c1"&gt;input&lt;/span&gt; &lt;span style="color: #dddddd"&gt;type&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: aqua"&gt;&amp;quot;button&amp;quot;&lt;/span&gt; &lt;span style="color: #dddddd"&gt;onclick&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: aqua"&gt;&amp;quot;DoValidation()&amp;quot;&lt;/span&gt; &lt;span style="color: #dddddd"&gt;value&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: aqua"&gt;&amp;quot;Validate&amp;quot;&lt;/span&gt; &lt;span style="color: gray"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;If &amp;quot;SomeExternalValidationLibrary&amp;quot; is a type that a script reference defines, and you have opted into loading that script &amp;quot;after&amp;quot; the UI, &lt;em&gt;and&lt;/em&gt; the user clicks on the button &lt;em&gt;before&lt;/em&gt; the script has actually finished loading -- guess what, you&amp;#39;re referring to a type which does not exist, and the user is going to get a script error.&lt;/p&gt;&lt;p&gt;There are a couple of ways you can deal with that but they all have disadvantages. Generally it&amp;#39;s best to keep things in the pageLoad event, so hookup the event there:&lt;/p&gt;&lt;div class="codeSample"&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: gray"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0080c1"&gt;script&lt;/span&gt; &lt;span style="color: #dddddd"&gt;type&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: aqua"&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt;&lt;span style="color: gray"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0080c0"&gt;function&lt;/span&gt; pageLoad(sender&lt;span style="color: aqua"&gt;,&lt;/span&gt; args) {&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; $get(&lt;span style="color: #0080c1"&gt;&amp;#39;cmdValidate&amp;#39;&lt;/span&gt;).onclick &lt;span style="color: aqua"&gt;=&lt;/span&gt; DoValidation;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0080c0"&gt;function&lt;/span&gt; DoValidation() {&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; SomeExternalValidationLibrary.ValidateZipCode($get(&lt;span style="color: #0080c1"&gt;&amp;#39;zipCode&amp;#39;&lt;/span&gt;));&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: gray"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #0080c1"&gt;script&lt;/span&gt;&lt;span style="color: gray"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: gray"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0080c1"&gt;input&lt;/span&gt; &lt;span style="color: #dddddd"&gt;id&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: aqua"&gt;&amp;quot;cmdValidate&amp;quot;&lt;/span&gt; &lt;span style="color: #dddddd"&gt;type&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: aqua"&gt;&amp;quot;button&amp;quot;&lt;/span&gt; &lt;span style="color: #dddddd"&gt;value&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: aqua"&gt;&amp;quot;Validate&amp;quot;&lt;/span&gt; &lt;span style="color: gray"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This will prevent the script error if the user happens to click on it before the scripts have loaded, but&amp;nbsp;it simply won&amp;#39;t do anything, which isn&amp;#39;t the greatest experience either. If this were an actual submit button, not only would the validation not occur, but the form would be posted (note: you shouldn&amp;#39;t be relying purely on client-side validation anyway).&lt;/p&gt;&lt;p&gt;Now, just to keep the record straight, in general you should avoid &amp;quot;inline&amp;quot; script when using AJAX components. Components are not initialized until pageLoad, so you shouldn&amp;#39;t expect things like $find() to find anything, or for behaviors or client side controls to be available yet. Sometimes though you only need to refer to a type or function defined by an included script, and in those cases you can get away with inline script (unless you turn off LoadBeforeUI!), so I&amp;#39;m not saying you should &amp;quot;never&amp;quot; have it.&lt;/p&gt;&lt;p&gt;So there you have it. Basically if you definitely do not depend on inline script referencing included script, and you don&amp;#39;t necessarily mind if the page is interactive before components (like the ConfirmButton) have been initialized, and you are concerned about the fastest possible performance (whether &amp;#39;perceived&amp;#39; or actual), then LoadScriptsBeforeUI=false is something you should seriously consider taking advantage of. But it&amp;#39;s an advanced feature, so be sure you know what the consequences are :)&lt;/p&gt;&lt;p&gt;Oh and by the way, while my example page did it programmatically, you can of course set the property declaratively.&lt;/p&gt;&lt;div class="codeSample"&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: gray"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0080c1"&gt;asp&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #0080c1"&gt;ScriptManager&lt;/span&gt; &lt;span style="color: #dddddd"&gt;ID&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: aqua"&gt;&amp;quot;ScriptManager1&amp;quot;&lt;/span&gt; &lt;span style="color: #dddddd"&gt;runat&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: aqua"&gt;&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color: #dddddd"&gt;LoadScriptsBeforeUI&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: aqua"&gt;&amp;quot;false&amp;quot;&lt;/span&gt;&lt;span style="color: gray"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: gray"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0080c1"&gt;Scripts&lt;/span&gt;&lt;span style="color: gray"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: gray"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0080c1"&gt;asp&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #0080c1"&gt;ScriptReference&lt;/span&gt; &lt;span style="color: #dddddd"&gt;Path&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: aqua"&gt;&amp;quot;~/BigScript.ashx&amp;quot;&lt;/span&gt; &lt;span style="color: gray"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: gray"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #0080c1"&gt;Scripts&lt;/span&gt;&lt;span style="color: gray"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: gray"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #0080c1"&gt;asp&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #0080c1"&gt;ScriptManager&lt;/span&gt;&lt;span style="color: gray"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;em&gt;Happy coding!&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description></item></channel></rss>