This is a migrated thread and some comments may be shown as answers.

Prometheus Getting Slower

7 Answers 235 Views
General Discussions
This is a migrated thread and some comments may be shown as answers.
Stuart
Top achievements
Rank 1
Stuart asked on 25 Apr 2008, 02:27 PM
Hi to all, I have been building cms websites for now well over a year using your controls, prometheus was built on the concept of sleek, fast and responsive controls. One website in particular I have been keeping up to date with your controls and completely rewrote it at a stage to build it on the prometheus suite, initially the speed tests were very good and I saw a nice performance boost,

At that time I was using the asp.net panelbar for nav and the rotator on 2 other pages that will be nested in a iframe in my page. then I used this up onto the Prometheus 2007 Q3 sp2 version then came the release of 2008 Q1 prometheus I built it in recoded the panelbar and what happened this added a 4+ second load time to my website.

Then Coded the same site page back to 2007 Q3 sp2 and it was slightly faster, but then i found that the there is a very long time the browser waits before it transfers data.

The I took that website, stripped all the prometheus stuff from the front end page used asp.net ajax, and panelbar remove the telerik script manager and took out the Telerik.web.ui.webresource.axd from the web.config file . My admin app for the site still uses the prometheus stuff witout a hitch but I found that the front application loads faster than ever, even though the document size is bigger.

Here are the tests so you can see for yourself, clear your cache before each check.

http://www.nwcf.com <- built on 2008 Q1 Prometheus
http://speedup.nwcf.pcwnewmedia.co.za/default.aspx <- built on 2007 Q3 sp2 prometheus
http://speedup.nwcf.pcwnewmedia.co.za/default2.aspx <-Built entirely on 2007 Q3 sp2 Controls for Asp.net

7 Answers, 1 is accepted

Sort by
0
Guy
Top achievements
Rank 1
answered on 25 Apr 2008, 03:34 PM
i am also finding these types of issues.

i have added a tabstrip, radwindowmanager and radcombobox to a page and it has become very "heavy".

Once i remove these items and replace with standard asp.net controls it is much much quicker.

are there any techniques we can use to minimize all the overhead?
0
Piyush Bhatt
Top achievements
Rank 2
answered on 25 Apr 2008, 05:28 PM
Check this post:

http://www.telerik.com/community/forums/thread/b311D-bdccec.aspx

And try this - put following script in your pages
<script>
var stdt = new Date();
function pageLoad()
{
 var endt = new Date();
 alert(endt-stdt);
}
</script>

You would see how long it takes to load the page after it's render.
-Piyush
0
Todd Anglin
Top achievements
Rank 2
answered on 25 Apr 2008, 09:30 PM
Stuart-

I ran your test sites through the online stopwatch and didn't observe a significant different in the load times of your page across the versions. Please see the results of my tests below in both IE7 and FF2 with primed and unprimed cache:

Firefox
Q1 2008 - 3.785 unprimed, 0.902 primed
Q3 Prometheus - 3.778 unprimed, 1.15 primed
Q3 Classic - 3.890 unprimed, 0.901 primed

IE
Q1 2008 - 0.510 unprimed, 0.219 primed
Q3 Prometheus - 0.220 unprimed, 0.259 primed
Q3 Classic - 0.215 unprimed, 0.232 primed

Clearly IE shows a big advantage for rendering your page, which is largely due to FireFox's widely accepted slower rendering performance. Still, the key is that for each browser the version of the controls you're using isn't making much difference, which I'd generally attribute to the fact you're not using many controls the test page. Do you have a version of this test page that doesn't use any Telerik controls I can run through the same timer?

In the mean time, I am beginning work on a new "Tips & Tricks" paper for optimizing ASP.NET AJAX apps, so stay tuned for that soon to help you squeeze every last bit of performance out of your app.

-Todd
0
Stuart
Top achievements
Rank 1
answered on 26 Apr 2008, 06:26 AM
Yes but our clients wont be using online stopwatch to load their pages, their results will be the actual time in seconds they will be waiting for a web page to load on a broadband connection.

Now for my code I run a code profiler through to catch any potential performance bottlenecks, then run through a optimisation service , to see which files are too large

now here is the code behind file , its pretty well documented and if you have and questions ask me
using System; 
using System.Data; 
using System.Configuration; 
using System.Collections; 
using System.Web; 
using System.Web.Security; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Web.UI.WebControls.WebParts; 
using System.Web.UI.HtmlControls; 
using Telerik.WebControls; 
using Telerik.Web.UI; 
using System.Data.SqlClient; 
using cyScape.BrowserHawk; 
using System.IO; 
 
public partial class Default : System.Web.UI.Page 
{     
    bool jsActive = false
    FrontCode frontCode; 
    ArrayList mainMenuIDs = new ArrayList(); 
    Tombstones tombstones; 
    public string newsShow = "'true'"
    public string tombstone = "'true'"
 
    protected void Page_Load(object sender, EventArgs e) 
    { 
        if (Session["FrontCode"] == null
        { 
            frontCode = new FrontCode(Server.MapPath("~/App_Data")); 
            Session["FrontCode"] = frontCode; 
        } 
        else 
        { 
            frontCode = (FrontCode)Session["FrontCode"]; 
        } 
        tombstones = new Tombstones(frontCode.getConnection()); 
     
        if (!IsPostBack) 
        { 
            if (Session["Page"] == null
            { 
                if (Request.QueryString["PageID"] != null
                { 
                    Session["Page"] = Request.QueryString["PageID"].ToString(); 
                } 
            } 
            else if (Request.QueryString["PageID"] != null
            { 
                Session["Page"] = Request.QueryString["PageID"].ToString(); 
            } 
            if (Session["JSActive"] == null
            { 
                BrowserObj bhObj = BrowserObj.GetBrowser(); 
                ExtendedOptions options = new ExtendedOptions(); 
                options.AddProperties("JavaScriptEnabled"); 
                options.CacheToken = "bhresults"
                options.PageMessage = "&nbsp;"
                options.PageTitle = "Please wait"
                options.BodyTag = "BGCOLOR=#3F6B8C"
                options.RequestType = 3; 
                ExtendedBrowserObj brow = BrowserObj.GetExtendedBrowser(options); 
                Session["JSActive"] = brow.JavaScriptEnabled; 
            } 
            frontCode.OpenConnection(); 
            jsActive = bool.Parse(Session["JsActive"].ToString()); 
            SetContent(true); 
            frontCode.CloseConnection(); 
            if (jsActive) 
            { 
                menuPanel.Visible = true
                qmenu.Style["visibility"] = "hidden"
            } 
            else 
            { 
                menuPanel.Visible = false
                qmenu.Style["Visibility"] = "show"
            } 
        }    
    }    
    private void checkAdmin() 
    { 
        if (Session["AdminName"] != null
        { 
            adminContainer.Style["Display"] = "block"
            adminContainer.Style["Position"] = "absolute"
            adminContainer.Style["top"] = "1px"
            adminContainer.Style["left"] = "1px"
            //Set Links 
            adminAlt.HRef = "JavaScript:ALTEdit('"+getPage()+"','"+getLang()+"')"
            adminEdit.HRef = "JavaScript:ContentEdit('" + getPage() + "','" + getLang() + "')"
            adminSEO.HRef = "JavaScript:SEOEdit('" + getPage() + "','" + getLang() + "')"
        } 
    } 
    protected void homeImg_Click(object sender, ImageClickEventArgs e) 
    { 
        frontCode.OpenConnection(); 
        foreach (RadPanelItem it in menuPanel.Items) 
        { 
            it.Expanded = false
            it.Selected = false
        } 
        Session["Page"] = 1; 
        jsActive = bool.Parse(Session["JsActive"].ToString()); 
        SetContent(true); 
        frontCode.CloseConnection(); 
    }   
    public void setLayout(bool showNews) 
    { 
        if (showNews) 
        { 
              newsShow = "'true'"
        } 
        else 
        { 
              newsShow = "'false'"
        }   
    } 
    private void SetContent(bool isajaxRueqest) 
    { 
        try 
        { 
            bool showContent = MemberLoginCheck(getPage()); 
            string query = "SELECT * FROM [Lang/Page] Where (PageID = " + getPage() + ") AND (LangID = " + getLang() + ");"
            SqlConnection conn = frontCode.getConnection(); 
 
            SqlCommand comm = conn.CreateCommand(); 
            comm.CommandText = query; 
            SqlDataReader reader = comm.ExecuteReader(); 
            if (reader.Read()) 
            { 
                //SEO// 
                if (!reader.IsDBNull(4)) 
                { 
                    Title = reader.GetString(4); 
                } 
                else 
                { 
                    Title = "||No Title||"
                } 
                if (!reader.IsDBNull(5)) 
                { 
                    metaDesc.Content = reader.GetString(5); 
                } 
                if (!reader.IsDBNull(6)) 
                { 
                    metaKeyWords.Content = reader.GetString(6); 
                } 
                if (!reader.IsDBNull(7)) 
                { 
                    metaFeatures.Content = reader.GetString(7); 
                } 
                if (!reader.IsDBNull(8)) 
                { 
                    h1Tag.InnerHtml = reader.GetString(8); 
                } 
                if (!reader.IsDBNull(9)) 
                { 
                    h2Tag.InnerHtml = reader.GetString(9); 
                } 
                if (!jsActive) 
                { 
                    noscriptTags.InnerHtml = frontCode.getNoscriptLinks(); 
                } 
                //Wysiwyg// 
                if (!reader.IsDBNull(10)) 
                { 
                    if (showContent) 
                    { 
                        string content = reader.GetString(10); 
                        contentDiv.InnerHtml = content; 
                    } 
                    else 
                    { 
                        contentDiv.InnerHtml = "<div class='Header'>Membership Required</div><br/><div class='Content'>Membership Login Required <a id='memberBut' href='JavaScript:loadWindow()'>click</a> here to sign up or log in</div>"
                    } 
                } 
                //Alt Tags// 
                if (!reader.IsDBNull(11)) 
                { 
                    img2.AlternateText = reader.GetString(11); 
                    if (!reader.IsDBNull(15))  
                    { 
                        if (reader.GetString(15).Equals("0"))//Default 
                        { 
                            img2.ImageUrl = "~/images/transp.gif"
                        } 
                        else if (reader.GetString(15).Equals("1"))//Leisure and Trav 
                        { 
                            img2.ImageUrl = "~/images/lts.jpg"
                        } 
                        else if (reader.GetString(15).Equals("2"))//Consumer and Ret 
                        { 
                            img2.ImageUrl = "~/images/crs.jpg"
                        } 
                        else if (reader.GetString(15).Equals("3"))//Financial 
                        { 
                            img2.ImageUrl = "~/images/fs.jpg"
                        } 
                        else if (reader.GetString(15).Equals("4"))//other 
                        { 
                            img2.ImageUrl = "~/images/os.jpg"
                        } 
                    } 
                } 
                //Layout 
                setLayout(reader.GetBoolean(14)); 
            } 
            
            reader.Close(); 
 
            contentDiv.InnerHtml = frontCode.SetSitemapData(contentDiv.InnerHtml, getLang()); 
            contentDiv.InnerHtml = frontCode.GetContentListData(contentDiv.InnerHtml, getLang()); 
            footNote.InnerHtml = frontCode.GetFootNote(); 
            if (!jsActive) 
            {                 
                contentDiv.InnerHtml = frontCode.rewritetoNonJS(contentDiv.InnerHtml); 
                footNote.InnerHtml = frontCode.rewritetoNonJS(footNote.InnerHtml); 
                 
            } 
            bool containsTombstone = false
            if (contentDiv.InnerHtml.Contains("||FITombGrid||")) 
            { 
                contentDiv.InnerHtml = contentDiv.InnerHtml.Replace("||FITombGrid||",tombstones.getTombstones(0,0)); 
                containsTombstone = true
            } 
            if (contentDiv.InnerHtml.Contains("||TLTombGrid||")) 
            { 
                contentDiv.InnerHtml = contentDiv.InnerHtml.Replace("||TLTombGrid||", tombstones.getTombstones(1, 0)); 
                containsTombstone = true
            } 
            if (contentDiv.InnerHtml.Contains("||CRTombGrid||")) 
            { 
                contentDiv.InnerHtml = contentDiv.InnerHtml.Replace("||CRTombGrid||", tombstones.getTombstones(2, 0)); 
                containsTombstone = true
            } 
            if (contentDiv.InnerHtml.Contains("||OSTombGrid||")) 
            { 
                contentDiv.InnerHtml = contentDiv.InnerHtml.Replace("||OSTombGrid||", tombstones.getTombstones(3, 0)); 
                containsTombstone = true
            } 
            if (containsTombstone) 
            { 
                setLayout(false); 
                tombstone = "'true'"
                 
            } 
            else 
            { 
                tombstone = "'false'"
            } 
            checkAdmin(); 
            conn.Close(); 
        } 
        catch (Exception) 
        { 
        } 
        finally 
        { 
            frontCode.CloseConnection(); 
        }                        
    } 
    private int getLang() 
    { 
        int lang = 1; 
         
        return lang; 
    } 
    private int getPage() 
    { 
        int page = 0; 
        if (Session["Page"] != null
        { 
            page = int.Parse(Session["Page"].ToString()); 
        } 
        if (!frontCode.checkPageExists(page)) 
        { 
            page = frontCode.getDefaultPage(); 
        } 
        Session["Page"] = page; 
        return page; 
    }      
    protected void pAjaxMan_AjaxRequest(object sender, Telerik.Web.UI.AjaxRequestEventArgs e) 
    { 
        if (Session["JSActive"] != null
        { 
            jsActive = bool.Parse(Session["JsActive"].ToString()); 
        } 
        else 
        { 
            Session["JSActive"] = true
            jsActive = true
        } 
        string argument = e.Argument.ToString(); 
        frontCode.OpenConnection(); 
 
        if (argument.Contains("AjaxRequest")) 
        { 
            Session["JSActive"] = true
            jsActive = true
             
        } 
        else if(argument.Contains("refresh")) 
        { 
        } 
        else 
        { 
            Session["Page"] = argument; 
            foreach (RadPanelItem it in menuPanel.Items) 
            { 
                it.Expanded = false
                it.Selected = false
            } 
            try 
            { 
                menuPanel.FindItemByValue(argument).ExpandParentItems(); 
                menuPanel.FindItemByValue(argument).Selected = true;             
            } 
            catch (Exception){}         
        } 
        jsActive = bool.Parse(Session["JsActive"].ToString()); 
        SetContent(true); 
 
        frontCode.CloseConnection(); 
    } 
    private bool MemberLoginCheck(int pageID) 
    { 
        bool showContent = false
        if (frontCode.IsMemberPage(pageID)) 
        { 
            if (Session["AfriMember"] == null
            { 
                showContent = false
            } 
            else 
            { 
                showContent = true
            } 
        } 
        else 
        { 
            showContent = true
        } 
        return showContent; 
    } 
    protected void menuPanel_Load(object sender, EventArgs e) 
    { 
        if (!IsPostBack) 
        { 
            menuPanel.LoadContentFile("/App_Data/PanelMenu.xml");    
        }         
    } 
 
protected void  menuPanel_ItemClick(object sender, RadPanelbarEventArgs e) 
    string argument = e.Item.Value; 
        if (Session["JSActive"] != null
        { 
            jsActive = bool.Parse(Session["JsActive"].ToString()); 
        } 
        else 
        { 
            Session["JSActive"] = true
            jsActive = true
        } 
        frontCode.OpenConnection(); 
        if (!argument.Equals("")) 
        { 
            Session["Page"] = argument; 
            foreach (RadPanelItem it in menuPanel.Items) 
            { 
                it.Expanded = false
                it.Selected = false
            } 
            try 
            { 
                menuPanel.FindItemByValue(argument).ExpandParentItems(); 
                menuPanel.FindItemByValue(argument).Selected = true
            } 
            catch (Exception) { } 
        } 
        jsActive = bool.Parse(Session["JsActive"].ToString()); 
        SetContent(false); 
 
        frontCode.CloseConnection(); 
 
Also here is the front code class that get called

using System; 
using System.Data; 
using System.Configuration; 
using System.Web; 
using System.Web.Security; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Web.UI.WebControls.WebParts; 
using System.Web.UI.HtmlControls; 
using System.Data.SqlClient; 
using System.Collections; 
 
/// <summary> 
/// Code that handles some database communication for the CMS frontEnd App 
/// </summary> 
public class FrontCode 
    ArrayList langList; 
    ArrayList pageList; 
    ArrayList loginCatPages; 
    DataSet linkData = new DataSet(); 
    DataSet catData = new DataSet(); 
    BusinessResource br; 
    SqlConnection conn; 
 
    public FrontCode(string setupPath) 
    { 
        conn = new SqlConnection(ConfigurationManager.ConnectionStrings[1].ToString()); 
        br = new BusinessResource(setupPath); 
        conn.Open(); 
        setLinkData(); 
        conn.Close(); 
    } 
    public void OpenConnection() 
    { 
        if (conn.State == ConnectionState.Closed) 
        { 
            conn.Open(); 
        } 
         
    } 
    public void CloseConnection() 
    { 
        conn.Close(); 
    } 
    public SqlConnection getConnection() 
    { 
        return conn; 
    } 
    public int getDefaultLang() 
    { 
        int i = 0
        i = int.Parse(br.getDefaultLang()); 
        if (!checkLangExists(i)) 
        { 
            i = int.Parse(langList[0].ToString()); 
        } 
        return i; 
    } 
    public int getDefaultPage() 
    { 
        int i = 0
        i = int.Parse(br.getHomePage()); 
        if (!checkPageExists(i)) 
        { 
            i = int.Parse(pageList[0].ToString()); 
        } 
        return i; 
    } 
    public bool checkLangExists(int lang) 
    { 
        bool flag = false
        if (langList == null) 
        { 
            langList = new ArrayList(); 
            SqlCommand comm = conn.CreateCommand(); 
            comm.CommandText = "SELECT LangID FROM Languages;"
            SqlDataReader reader = comm.ExecuteReader(); 
            while (reader.Read()) 
            { 
                langList.Add(reader.GetInt32(0)); 
            } 
            reader.Close(); 
        } 
        for (int i = 0; i < langList.Count; i++) 
        { 
            if (lang == int.Parse(langList[i].ToString())) 
            { 
                flag = true
                i = langList.Count; 
            }             
        } 
        return flag;         
    } 
    public bool checkPageExists(int page) 
    { 
        bool flag = false
        if (pageList == null) 
        { 
            pageList = new ArrayList(); 
            SqlCommand comm = conn.CreateCommand(); 
            comm.CommandText = "SELECT PageID FROM Pages;"
            SqlDataReader reader = comm.ExecuteReader(); 
            while (reader.Read()) 
            { 
                pageList.Add(reader.GetInt32(0)); 
            } 
            reader.Close(); 
        } 
        for (int i = 0; i < pageList.Count; i++) 
        { 
            if (page == int.Parse(pageList[i].ToString())) 
            { 
                flag = true
                i = pageList.Count; 
            } 
        } 
        return flag;   
    } 
    public string rewritetoNonJS(string code) 
    { 
        string codecoderet = code; 
        if (linkData.Tables.Count < 1
        { 
            setLinkData(); 
        } 
        int i; 
        for (i = 0; i < linkData.Tables[0].Rows.Count; i++) 
        { 
            string ajaxlink = "JavaScript:gotopage(" + linkData.Tables[0].Rows[i][0].ToString() + ")"; 
            string ajaxlink2 = "JavaScript:gotoPage(" + linkData.Tables[0].Rows[i][0].ToString() + ")"; 
            string ajaxlink3 = "javascript:gotoPage(" + linkData.Tables[0].Rows[i][0].ToString() + ")"; 
             
            string isapiLink = linkData.Tables[0].Rows[i][2].ToString()+"_"+linkData.Tables[0].Rows[i][0].ToString()+".html"; 
            coderetcoderet = coderet.Replace(ajaxlink, isapiLink); 
            coderetcoderet = coderet.Replace(ajaxlink2, isapiLink); 
            coderetcoderet = coderet.Replace(ajaxlink3, isapiLink); 
        } 
        return coderet; 
    } 
    public string getNoscriptLinks() 
    { 
        string links = ""
        if (linkData.Tables.Count < 1
        { 
            setLinkData(); 
        } 
        for (int i = 0; i < linkData.Tables[0].Rows.Count; i++) 
        { 
            links += "<href='" + linkData.Tables[0].Rows[i][2].ToString() + "_" + linkData.Tables[0].Rows[i][0].ToString() + ".html'>" + linkData.Tables[0].Rows[i][1].ToString() + "</a>&nbsp;&nbsp;|&nbsp;&nbsp;"; 
        } 
         
        return links; 
    } 
    private void setLinkData() 
    { 
        SqlDataAdapter adapter = new SqlDataAdapter("SELECT PageID, LinkText, ISAPIText FROM [Lang/Page];", conn); 
        linkData = new DataSet(); 
        adapter.Fill(linkData); 
    } 
    private void setLoginCatPagesList() 
    { 
        loginCatPages = new ArrayList(); 
        SqlCommand comm = conn.CreateCommand(); 
        comm.CommandText = "SELECT PageID FROM Pages WHERE CategoryID = 3;"
        SqlDataReader reader = comm.ExecuteReader(); 
        while (reader.Read()) 
        { 
            loginCatPages.Add(reader.GetInt32(0)); 
        } 
        reader.Close(); 
    } 
    public bool IsMemberPage(int pageID) 
    { 
        bool flag = false
        if (loginCatPages == null) 
        { 
             
            setLoginCatPagesList(); 
        } 
        for (int i = 0; i < loginCatPages.Count; i++) 
        { 
            if(pageID == int.Parse(loginCatPages[i].ToString())) 
            { 
                flag = true
            } 
        } 
        return flag; 
    } 
    public string GetFootNote() 
    { 
        string s = ""
        SqlCommand comm = conn.CreateCommand(); 
        comm.CommandText = "SELECT Top(1) FootCode FROM Footers ORDER BY NewID()"
        SqlDataReader reader = comm.ExecuteReader(); 
        if (reader.Read()) 
        { 
            s = reader.GetString(0); 
        } 
        reader.Close(); 
        return s; 
    } 
    public string SetSitemapData(string code, int langId) 
    { 
        string codecodeRet = code; 
        if (catData.Tables.Count < 1
        { 
            GetCategories(); 
        } 
        for (int i = 0; i < catData.Tables[0].Rows.Count; i++) 
        { 
            if (codeRet.Contains("||SiteMap" +  catData.Tables[0].Rows[i][0].ToString() + "||")) 
            { 
                codeRetcodeRet = codeRet.Replace("||SiteMap" + catData.Tables[0].Rows[i][0].ToString() + "||", GetLinksList(int.Parse(catData.Tables[0].Rows[i][0].ToString()), langId)); 
            } 
        } 
        return codeRet; 
    } 
    private void GetCategories() 
    { 
        string query = "SELECT * FROM Categories;"
        SqlDataAdapter adapter = new SqlDataAdapter(query, conn); 
        adapter.Fill(catData); 
    } 
    private string GetLinksList(int category, int lang) 
    { 
        string s = ""
        string query = "SELECT [Lang/Page].PageID, [Lang/Page].LinkText, Pages.CategoryID, [Lang/Page].LangID FROM [Lang/Page] INNER JOIN Pages ON [Lang/Page].PageID = Pages.PageID WHERE ([Lang/Page].LangID = " + lang + ") AND (Pages.CategoryID = "+category+");"; 
        SqlDataAdapter adapter = new SqlDataAdapter(query, conn); 
        DataSet data = new DataSet(); 
        adapter.Fill(data); 
        for (int j = 0; j < data.Tables[0].Rows.Count; j++) 
        { 
            s += "<href='JavaScript:gotoPage("+data.Tables[0].Rows[j][0].ToString()+")'>" + data.Tables[0].Rows[j][1].ToString()+ "<br/>"; 
        } 
        return s; 
    } 
    public string GetContentListData(string code, int langId) 
    { 
        string content = code
        for (int i = 0; i < catData.Tables[0].Rows.Count; i++) 
        { 
            if (content.Contains("||ContentList" + catData.Tables[0].Rows[i][0].ToString() + "||")) 
            { 
                contentcontent = content.Replace("||ContentList" + catData.Tables[0].Rows[i][0].ToString() + "||", ListCodeByCategory(int.Parse(catData.Tables[0].Rows[i][0].ToString()), langId)); 
            } 
        } 
        return content; 
    } 
    private string ListCodeByCategory(int catId, int langId) 
    { 
        string code = ""
        SqlDataAdapter adapter = new SqlDataAdapter("SELECT [Lang/Page].WYSIWYG FROM [Lang/Page] INNER JOIN Pages ON [Lang/Page].PageID = Pages.PageID WHERE (Pages.CategoryID = "+catId+") AND ([Lang/Page].LangID = "+langId+")", conn); 
        DataSet data = new DataSet(); 
        adapter.Fill(data); 
        if (data.Tables.Count > 0) 
        { 
            for (int i = 0; i < data.Tables[0].Rows.Count; i++) 
            { 
                code += "<br/>" + data.Tables[0].Rows[i][0].ToString()+"<br/>"; 
            } 
        } 
        return code; 
    } 
 

and here is the code for the default.aspx file that uses Q3 2007

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="Default" %> 
 
<%@ Register Assembly="RadPanelbar.Net2" Namespace="Telerik.WebControls" TagPrefix="rad" %> 
 
<%@ Register Src="QuickMenu.ascx" TagName="QuickMenu" TagPrefix="uc1" %> 
<%@ Register Assembly="RadRotator.Net2" Namespace="Telerik.WebControls" TagPrefix="rad" %> 
<%@ Register Assembly="Telerik.Web.UI" Namespace="Telerik.Web.UI" TagPrefix="telerik" %> 
<!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 runat="server"
    <title></title
    <meta name="verify-v1" content="fImTSBuEhPmzGtOhOGPVUQXu0BIt6Jp5Tu9DYlf/RuY=" /> 
    <meta id="metaDesc" name="Description" runat="server" content="" /> 
    <meta name="Author" content="PCW New Media" /> 
    <meta name="Robots" content="All" /> 
    <meta id="metaKeyWords" name="Keywords" runat="server" content="" /> 
    <meta id="metaFeatures" name="Features" runat="server" content="" /> 
    <link rel="Stylesheet" type="text/css" href="../Styles/ContentStyles.css" /> 
    <link rel="Stylesheet" type="text/css" href="../Styles/LayoutStyles.css" />     
    <script language="javascript" type="text/javascript" src="Scripts/AdminWindowsnew.js"></script> 
 
</head> 
<body onload="restore();" onresize="restore();" style="text-align: center"
    <h1 runat="server" id="h1Tag" class="headTags" enableviewstate="false" /> 
    <h2 runat="server" id="h2Tag" class="headTags" enableviewstate="false" /> 
    <noscript id="noscriptTags" class="headTags" runat="server" enableviewstate="false"
    </noscript> 
    <form id="mainForm" runat="server"
        <asp:ScriptManager ID="ScriptManager1" runat="server"
        </asp:ScriptManager> 
        <telerik:RadAjaxManager ID="pAjaxMan" runat="server" OnAjaxRequest="pAjaxMan_AjaxRequest" 
            EnablePageHeadUpdate="False" EnableHistory="True" EnableTheming="False"
            <AjaxSettings> 
                <telerik:AjaxSetting AjaxControlID="menuPanel"
                    <UpdatedControls>    
                        <telerik:AjaxUpdatedControl ControlID="menuPanel" />                      
                        <telerik:AjaxUpdatedControl ControlID="homeImg" /> 
                        <telerik:AjaxUpdatedControl ControlID="img2" /> 
                        <telerik:AjaxUpdatedControl ControlID="scrollPanel" LoadingPanelID="ajaxLoader" />                         
                        <telerik:AjaxUpdatedControl ControlID="adminContainer" /> 
                        <telerik:AjaxUpdatedControl ControlID="showHideBlock" /> 
                    </UpdatedControls> 
                </telerik:AjaxSetting> 
                <telerik:AjaxSetting AjaxControlID="pAjaxMan"
                    <UpdatedControls>    
                        <telerik:AjaxUpdatedControl ControlID="menuPanel" />                      
                        <telerik:AjaxUpdatedControl ControlID="homeImg" /> 
                        <telerik:AjaxUpdatedControl ControlID="img2" /> 
                        <telerik:AjaxUpdatedControl ControlID="scrollPanel" LoadingPanelID="ajaxLoader" />                         
                        <telerik:AjaxUpdatedControl ControlID="adminContainer" /> 
                        <telerik:AjaxUpdatedControl ControlID="showHideBlock" /> 
                    </UpdatedControls> 
                </telerik:AjaxSetting> 
                <telerik:AjaxSetting AjaxControlID="homeImg"
                    <UpdatedControls>    
                        <telerik:AjaxUpdatedControl ControlID="menuPanel" />                      
                        <telerik:AjaxUpdatedControl ControlID="homeImg" /> 
                        <telerik:AjaxUpdatedControl ControlID="img2" /> 
                        <telerik:AjaxUpdatedControl ControlID="scrollPanel" LoadingPanelID="ajaxLoader" />                         
                        <telerik:AjaxUpdatedControl ControlID="adminContainer" /> 
                        <telerik:AjaxUpdatedControl ControlID="showHideBlock" /> 
                    </UpdatedControls> 
                </telerik:AjaxSetting> 
            </AjaxSettings> 
            <ClientEvents OnResponseEnd="ajaxEnd()" /> 
        </telerik:RadAjaxManager> 
        <br /> 
        <br /> 
        <table id="containerTab" style="background-color: #3F6B8C;" align="center" border="0" 
            cellpadding="0" cellspacing="0"
            <tr> 
                <td valign="bottom"
                    <div id="mainContainer" class="mainContainer" align="center"
                        <div id="mainSection" class="mainSection" align="center"
                            <div id="headSection" class="headSection" align="center"
                                <div style="vertical-align: top" id="ccsss"
                                    <table id="ptable" border="0" cellpadding="0" cellspacing="0" class="headTableCo"
                                        <tr> 
                                            <td style="width: 241px"
                                                <asp:ImageButton ID="homeImg" runat="server" BorderStyle="None" Height="147px" ImageUrl="~/Images/transp.gif" 
                                                    OnClick="homeImg_Click" Width="100%" BorderWidth="0px" ToolTip="Home" /></td
                                            <td valign="top" style="text-align: left"
                                                <asp:Image ID="img2" runat="server" Height="147px" ImageUrl="~/Images/transp.gif" 
                                                    Width="720px" BorderWidth="0px" /> 
                                            </td> 
                                        </tr> 
                                    </table> 
                                </div> 
                            </div> 
                            <div id="midSection" class="midSection" runat="server"
                                <table border="0" cellpadding="0" cellspacing="0" class="midContentTable" 
                                    style="background-color: white"
                                    <tr> 
                                        <td class="menuCell"
                                            &nbsp;<rad:RadPanelbar ID="menuPanel" runat="server" OnLoad="menuPanel_Load" Skin="Aruba" 
                                                OnItemClick="menuPanel_ItemClick" CausesValidation="False" ExpandMode="SingleExpandedItem"
                                                <CollapseAnimation Duration="100" /> 
                                                <ExpandAnimation Duration="100" /> 
                                            </rad:RadPanelbar> 
                                            <div id="qmenu" runat="server"></div> 
                                        </td> 
                                        <td class="contentCell" id="contentCell" style="width:775px; padding-left:5px; padding-right:5px; border-right-style:none"
                                            <asp:Panel ID="scrollPanel" runat="server" Height="480px" ScrollBars="Auto" Width="100%" 
                                                BackColor="White" Direction="LeftToRight" HorizontalAlign="Left"
                                                <div id="contentDiv" runat="server" class="contentDiv"
                                                </div> 
                                            </asp:Panel> 
                                        </td> 
                                        <td class="newsCell" id="newsCell" style="display:none"
                                            <div id="NewsContainer" class="NewsContainer"
                                                <div class="newsBarHead"
                                                    &nbsp;Client Quotes</div> 
                                                <div class="ClientQuotesDiv" id="clientQuoteDiv"
                                                </div> 
                                                <div class="NewsFeedHeader"
                                                    &nbsp;News</div> 
                                                <div class="NewsFeedCont" id="NewsFeedCont"
                                                </div> 
                                                <href="mailto:stephaniev@nwcf.com"
                                                    <div class="NewsBottom" style="cursor: hand; background-image: url(../Images/NewsBottom1.gif); 
                                                        background-repeat: no-repeat; width: 224px; background-color: White; height: 81px; 
                                                        padding: 3px 5px 0px 5px;"> 
                                                    </div> 
                                                </a> 
                                            </div> 
                                        </td> 
                                    </tr> 
                                    <tr> 
                                        <td colspan="3"
                                            <div class="footSection" id="pageFoot"
                                            </div> 
                                        </td> 
                                    </tr> 
                                </table> 
                            </div> 
                        </div> 
                    </div> 
                </td> 
            </tr> 
            <tr> 
                <td valign="top" align="center"
                    <br /> 
                    <div class="footerLink" id="footNote" runat="server"
                    </div> 
                    <br /> 
                    <br /> 
                    <br /> 
                </td> 
            </tr> 
        </table> 
        <telerik:RadAjaxLoadingPanel ID="ajaxLoader" runat="server" Height="75px" Width="75px" 
            Transparency="5"
            <img alt="Loading..." src='RadControls/Ajax/Skins/Default/NWCFLoad.gif' style="border: 0px;" /> 
        </telerik:RadAjaxLoadingPanel> 
        <div id="adminContainer" class="adminContainer" runat="server"
            <table border="0" cellpadding="0" cellspacing="0" class="adminTable"
                <tr> 
                    <td colspan="2"
                        <strong><span style="text-decoration: underline">Administrator Tools</span></strong
                    </td> 
                </tr> 
                <tr> 
                    <td> 
                        Search Engine Optimisation 
                    </td> 
                    <td> 
                        <id="adminSEO" runat="server" href=""
                            <img alt="Search Engine Optimisation" class="admimg" src="Admin/AdminStyles/Images/SEOIco.gif" /></a
                    </td> 
                </tr> 
                <tr> 
                    <td> 
                        Alt Tags 
                    </td> 
                    <td> 
                        <id="adminAlt" runat="server" href=""
                            <img alt="Alt Tag Manager" class="admimg" src="Admin/AdminStyles/Images/wcag1-a.gif" /> 
                        </a> 
                    </td> 
                </tr> 
                <tr> 
                    <td> 
                        Editor 
                    </td> 
                    <td> 
                        <id="adminEdit" runat="server" href=""
                            <img alt="Content Editor" class="admimg" src="Admin/AdminStyles/Images/editor.gif" /> 
                        </a> 
                    </td> 
                </tr> 
                <tr> 
                    <td> 
                        Refresh Content 
                    </td> 
                    <td> 
                        <href="JavaScript:gotoPage('refresh')"
                            <img alt="Refresh Content" class="admimg" src="Admin/AdminStyles/Images/Update.gif" /> 
                        </a> 
                    </td> 
                </tr> 
                <tr> 
                    <td colspan="2"
                        <asp:Button ToolTip="Return to Admin" ID="returnToAdmin" runat="server" PostBackUrl="~/Admin/Welcome.aspx" 
                            Text="Back to Admin" Width="150px" /> 
                    </td> 
                </tr> 
            </table> 
        </div> 
        <script language="javascript" type="text/javascript"
        <!-- 
         function shownews(showNews, showTombstone) 
                { 
                    if(showNews){ 
                    document.getElementById('newsCell').style.display = "block"
                     document.getElementById('contentCell').style.width = "517px"
                     document.getElementById('contentCell').style.borderRightStyle="solid"
                     document.getElementById('pageFoot').style.backgroundImage = "url(Images/nwcf_bottom_line.gif)"
                     document.getElementById('NewsFeedCont').innerHTML = "<iframe id='newsiFrame' src='NewsRotate.aspx' frameborder='0' scrolling='no' width='225px' height= '100%' style='padding: 0px 0px 0px 0px; margin:0px 0px 0px 0px'></iframe>"
                     document.getElementById('clientQuoteDiv').innerHTML = "<iframe allowtransparency='no' frameborder='0' scrolling='no' src='Rotator.aspx' style='width: 100%; height: 100%; background-color: transparent'></iframe>"
                    }else{ 
                    document.getElementById('newsCell').style.display = "none"
                    document.getElementById('contentCell').style.width = "750px"
                    document.getElementById('contentCell').style.borderRightStyle"none"
                    document.getElementById('pageFoot').style.backgroundImage = "url(Images/nwcf_bottom_noline.gif)"
                    } 
                    if(showTombstone){ 
                    document.getElementById('contentCell').style.width = "775px"
                    document.getElementById('contentCell').style.paddingLeft = "5px"
                    document.getElementById('contentCell').style.paddingRight = "5px"
                    }else{ 
                    document.getElementById('contentCell').style.paddingLeft = "28px"
                    document.getElementById('contentCell').style.paddingRight = "8px"
                    } 
                }        
        --> 
        </script> 
        <telerik:RadScriptBlock runat="server" ID="showHideBlock"
            <script language="javascript" type="text/javascript"
            <!-- 
            function newsbar() 
            { 
                var showNews = false
                var showtomb = false
                if(<%= newsShow %> == 'true') 
                {     
                    showNews = true;                 
                } 
                if(<%=tombstone %> == 'true') 
                { 
                    showtomb = true
                }        
                shownews(showNews, showtomb)         
            } 
            function gotoPage(page) 
                { 
                    var ajaxMan = <%= pAjaxMan.ClientID %>
                    ajaxMan.AjaxRequest(page);                     
                } 
                 
                --> 
            </script> 
        </telerik:RadScriptBlock> 
    </form> 
 
    <script language="javascript" type="text/javascript"
    <!-- 
        window.onload = ajaxLoad;   
        function restore()  
        { 
         if( typeof( window.innerWidth ) == 'number' )  
            {             
                myWidth = window.innerWidth; 
                myHeight = window.innerHeight; 
                document.getElementById('footNote').style.paddingTop = '25px'
            } 
       }       
                function ajaxLoad() 
                { 
                restore();                    
                }                 
                function ajaxEnd() 
                { 
                    newsbar();                     
                    if( typeof( window.innerWidth ) == 'number' )  
                    {           
                    document.getElementById('footNote').style.paddingTop = '25px'
                    } 
                }                 
          newsbar(); 
        --> 
    </script> 
 
</body> 
</html> 
 

I have been observing the behavoiur of these sites for a full week now, and I found that with prometheus at sum point it seems to be waiting for the server to do something, I ran the firefox developers addon on the brwoser and checked in specific the document sizes , on Q1 2008 the webresources seems to be compressed, might this be the thing the client browser is waiting for ? for the app to finish the compression?

Compression is great in certain scenarios, but where you run a very active web server , with mutiple websites each running off sql server , doing mirror backups and log shipping every 1 to 2 hours the processor might be a little too occupied to be doing a high end porcess like compression.

Now compression might help the average 56k modem dial up guy but we have to admit if you are still running 56k connection you are pretty used to waiting by nowon your test i would just like to point out something

IE
Q1 2008 - 0.510 unprimed, 0.219 primed
Q3 Prometheus - 0.220 unprimed, 0.259 primed
Q3 Classic - 0.215 unprimed, 0.232 primed


look at the unprimed diference between Q1 2008 and Q3 classic, not the load time but the difference between the load 0.510 / 0.215
Q3 classic seems to run more than twice as fast unprimed than the Q1 2008

It will be very good if you bring out the optimisation tricks and tips, because we aim to build proper functional websites that loads at tremendous speed for our clients.
0
Todd Anglin
Top achievements
Rank 2
answered on 26 Apr 2008, 11:21 PM
Stuart-

You make some fair points about the results I posted. I will definitely bring the optimization articles online soon. I'll ask the product developers to look in to the scenario you're presenting to see if we can better define this "waiting" time you're observing.

In the mean time, even with the differences we're talking about, are your customers unhappy with sub-second loading times on an unprimed cache? By most standards- with UI controls or not- that's tremendously fast. No excuse not to explore these issues deeper, but I want to make sure I clearly understand your load time targets so that we're not chasing an impossible number.

Thanks-
Todd
0
Stuart
Top achievements
Rank 1
answered on 28 Apr 2008, 08:39 AM
Hi Todd

Yes I understand that there is a limit to how fast these tools can run, but prometheus is built on the concept of unsurpassed loading speeds and when the classic's toolkits speed is going faster it is cause for concern because me like many of your clients have switched over to using prometheus instead of classic. I am still using prometheus for a intranet I am building so speed is not so much a problem.

But all in the people who will be using our sites are looking at 5-6 second loading times in the UK on broadband.

Kind Regards

Stu
0
Todd Anglin
Top achievements
Rank 2
answered on 28 Apr 2008, 02:47 PM
Stu-

I definitely understand your concerns and will do everything I can to help you be successful with the new generation of ASP.NET AJAX controls. In almost all side-by-side comparisons I've seen so far, the RadControls for ASP.NET AJAX perform far and away better than their "classic" ASP.NET counterparts, so I am surprised you're seeing otherwise.

If you have the time, try constructing a simple application that uses roughly the same controls as your current app and see if you notice the speed delta between ASP.NET AJAX and the classic controls. If you do, send the demos to our support staff so they can examine your setup and perhaps identify a script that is causing your issues.

Thanks again for all of the good feedback and stay tuned for more optimization help.

-Todd
Tags
General Discussions
Asked by
Stuart
Top achievements
Rank 1
Answers by
Guy
Top achievements
Rank 1
Piyush Bhatt
Top achievements
Rank 2
Todd Anglin
Top achievements
Rank 2
Stuart
Top achievements
Rank 1
Share this question
or