+1-888-365-2779
Try Now
More in this section

Forums / Developing with Sitefinity / Sitemenu performance issues

Sitemenu performance issues

12 posts, 0 answered
  1. Olivier
    Olivier avatar
    57 posts
    Registered:
    09 Jul 2010
    29 Sep 2010
    Link to this post
    Hi,

    We're using Sitefinity for a website with a large amount of pages (1500+) and documents in libraries...

    We've been having performance issues since everything was imported into it. Like 6-7 seconds minimum per page, before its cached.

    I've been looking for improvements and searching where the slowness comes from and it seems the Sitemenu control, which is present in every pages, it taking a few seconds to build. We're only showing 3 levels of the sitemap, but since we have a lot of pages and a complex system of roles and security, I'm not surprised.

    Any advice for us on how to improve it ?

    Thank you,

    Olivier
  2. Radoslav Georgiev
    Radoslav Georgiev avatar
    3370 posts
    Registered:
    01 Feb 2016
    29 Sep 2010
    Link to this post
    Hi Olivier,

    Thank you for using our services.

    The main issues with the performance of this control is that it loads the whole menu at once and the site map uses security trimming in order to get the pages which should be viewed by the current user. The navigation controls use caching, so the control should perform much better once it has been loaded.

    To alleviate the performance problem you can use Load on Demand. This feature will let you bind only the first level of pages and then populate the menu only with child items when they are requested.. This blog post will guide you through the process of creating such control. I can also suggest that instead of getting the pages using the CmsManager and performing the security checks you use the SiteMap and get the pages from there:
    var siteMapNode = SiteMap.Provider.FindSiteMapNodeFromKey(item.Value);
    var nodes = SiteMap.Provider.GetChildNodes(siteMapNode);


    Best wishes,
    Radoslav Georgiev
    the Telerik team
    Do you want to have your say when we set our development plans? Do you want to know when a feature you care about is added or when a bug fixed? Explore the Telerik Public Issue Tracking system and vote to affect the priority of the items
  3. Olivier
    Olivier avatar
    57 posts
    Registered:
    09 Jul 2010
    06 Oct 2010
    Link to this post
    Hi Radoslav,

    Thanks for the solution, I implemented it (with the sitemap) and it works well!

    In Firefox, but not under IE6...

    I need the first 3 levels of the sitemap in the menu; the first level is automatically databound, the second is loaded fine, on demand via ajax, but the third wont charge and cause a javascript error.

    "Object doesn't support this property or method"

    I didnt really looked into it yet, but I simply wanted to ask if you were aware and if you had a solution or something.

    I know it's not really a Sitefinity issue and probably more about the RadMenu, but any hints are welcome.

    EDIT: Is it possible that my problem is the same as this one here ?
    http://www.telerik.com/community/forums/aspnet-ajax/menu/ie6-nested-menu-not-showing-in-2010-q2.aspx

    Thank you,

    Olivier
  4. Radoslav Georgiev
    Radoslav Georgiev avatar
    3370 posts
    Registered:
    01 Feb 2016
    06 Oct 2010
    Link to this post
    Hello Olivier,

    I have not encountered such a problem. You can take a look at my sample project attached to my reply.

    All the best,
    Radoslav Georgiev
    the Telerik team
    Do you want to have your say when we set our development plans? Do you want to know when a feature you care about is added or when a bug fixed? Explore the Telerik Public Issue Tracking system and vote to affect the priority of the items
  5. Olivier
    Olivier avatar
    57 posts
    Registered:
    09 Jul 2010
    07 Oct 2010
    Link to this post
    Hi Radoslav,

    Thanks for the project, but I tried your UserControl and your Service and I still have the same problem: javascript error and missing submenu after level 2 in Internet Explorer 6...

    I feel like it could be this issue:
    http://www.telerik.com/community/forums/aspnet-ajax/menu/ie6-nested-menu-not-showing-in-2010-q2.aspx
    or
    http://www.telerik.com/community/forums/aspnet-ajax/menu/ie6-sub-menu-flyouts.aspx

    So I wonder, is the RadMenu control, available with the last version of Sifinity,  version 2010.Q2 SP2 ?

    I would really like to fix this problem, it's the only thing that keeps me from deploying the new menu to help optimize performance on our Sitefinity website...

    Thank you,

    Olivier
  6. Radoslav Georgiev
    Radoslav Georgiev avatar
    3370 posts
    Registered:
    01 Feb 2016
    07 Oct 2010
    Link to this post
    Hello Olivier,

    Thank you for getting back to me.

    The issue appears to be the one as in the first forum thread you have linked. You can manually upgrade the RadControls for ASP.NET Ajax within Sitefinity by following the instructions in this KB article. Essentially, you should perform a binding redirect as Sitefinity modules are built referencing a specific version of the RadControls.

    Regards,
    Radoslav Georgiev
    the Telerik team
    Do you want to have your say when we set our development plans? Do you want to know when a feature you care about is added or when a bug fixed? Explore the Telerik Public Issue Tracking system and vote to affect the priority of the items
  7. Olivier
    Olivier avatar
    57 posts
    Registered:
    09 Jul 2010
    07 Oct 2010
    Link to this post
    Hello Radoslav,

    Thanks for the very quick feedback, again.

    Maybe I missed something, but where can I find the latest version of RadControls for asp.net ?

    Should I take the trial version ?

    Olivier
  8. Radoslav Georgiev
    Radoslav Georgiev avatar
    3370 posts
    Registered:
    01 Feb 2016
    07 Oct 2010
    Link to this post
    Hello Olivier,

    Pardon me, I should have been clearer about this.

    You can download a trial version of the RadControls for ASP.NET Ajax and use it within Sitefinity. You will not have trial messages as long as the assembly is used within the CMS.

    Kind regards,
    Radoslav Georgiev
    the Telerik team
    Do you want to have your say when we set our development plans? Do you want to know when a feature you care about is added or when a bug fixed? Explore the Telerik Public Issue Tracking system and vote to affect the priority of the items
  9. Olivier
    Olivier avatar
    57 posts
    Registered:
    09 Jul 2010
    19 Oct 2010
    Link to this post
    Hi Radoslav,

    Just another thing...

     (the last on this subject I hope ! )

    Was the MaxDataBindDepth property on the RadMenu working in your example ?

    Because it's not working here and I have to check the depth on the webservice, against a value I have to get somehow... And I would like to be able to set it in the admin side...

    Any idea ?

    Thank you !

    Olivier
  10. Radoslav Georgiev
    Radoslav Georgiev avatar
    3370 posts
    Registered:
    01 Feb 2016
    20 Oct 2010
    Link to this post
    Hello Olivier,

    In the sample sent this property is set in the markup of the menu. However you can expose it as a property to be set in the Sitefinity page editor. You can also expose a starting node url property for the SiteMapDataSource to define from which parent node to bind the menu:
    /// <summary>
    /// (Exposed from contained SitemapDataSource.) Gets or sets an URL
    /// of starting node that determines the root hierarchy that is
    /// exposed by the data source control.
    /// </summary>
    ///
    [WebEditor("Telerik.Cms.Web.UI.UrlEditorWrapper, Telerik.Cms")]
    [Browsable(true)]
    [Category("Navigation")]
    public string StartingNodeUrl
    {
        get
        {
            return this.SiteMapDataSource1.StartingNodeUrl;
        }
        set
        {
            this.SiteMapDataSource1.StartingNodeUrl = value;
        }
    }

    [Browsable(true)]
    [Category("Behavior")]
    public int LastExpandLevel
    {
        get
        {
            if (this.RadMenu1.MaxDataBindDepth < 0)
                return 0;
            return this.RadMenu1.MaxDataBindDepth;
        }
        set
        {
            if (value == 0)
                this.RadMenu1.MaxDataBindDepth = -1;
            else
                this.RadMenu1.MaxDataBindDepth = value;
        }
    }



    All the best,
    Radoslav Georgiev
    the Telerik team
    Do you want to have your say when we set our development plans? Do you want to know when a feature you care about is added or when a bug fixed? Explore the Telerik Public Issue Tracking system and vote to affect the priority of the items
  11. Olivier
    Olivier avatar
    57 posts
    Registered:
    09 Jul 2010
    20 Oct 2010
    Link to this post
    Hi Radoslav,

    Thanks for you answer but the problem is that the property does not work, when it's exposed or when it's in the markup...

    It just doesn't seem to be taken into account when the menu is bound to a webservice...

    Is it normal ?

    Regards,

    Olivier

  12. Radoslav Georgiev
    Radoslav Georgiev avatar
    3370 posts
    Registered:
    01 Feb 2016
    20 Oct 2010
    Link to this post
    Hello Olivier,

    This is normal as all other levels will be populated from the service.

    Sincerely yours,
    Radoslav Georgiev
    the Telerik team
    Do you want to have your say when we set our development plans? Do you want to know when a feature you care about is added or when a bug fixed? Explore the Telerik Public Issue Tracking system and vote to affect the priority of the items
Register for webinar
12 posts, 0 answered