Products

Solutions

Resources

Partners

Community

Blog

About

QA

Ideas Test

New Community Website

Ordinarily, you'd be at the right spot, but we've recently launched a brand new community website... For the community, by the community.

Yay... Take Me to the Community!

Welcome to the DNN Community Forums, your preferred source of online community support for all things related to DNN.
In order to participate you must be a registered DNNizen

HomeHomeUsing DNN Platf...Using DNN Platf...Performance and...Performance and...DNN6 using Iframes- really?DNN6 using Iframes- really?
Previous
 
Next
New Post
10/24/2011 7:00 AM
 
Just been looking at DNN6 & I am blown away that in 2011 Dotnetnuke has decided to use iframes for its popups. The use of iframes in 2011 should be limited (if used at all).

The idea of having an ajax/kquery popup is so that it loads fast. Where ever possible your code should be placed inline & displayed  on demand. If not using inline then partial rending is recommended - using iframes is slow & kinda kills the point of using a jquery popup.

I have just looked at quite a few other cms's & none of them try to fake ajax using iframes. IMHO DNN has just gone back 10 years :(


To give you an example if the login dialog should just display some inline code for the login popup. This keeps it nice & fast as the code in minimal & already preloaded.

EXAMPLE OF A NORMAL JQUERY POPUP USING INLINE CONTENT (FAST):

<div class="dnnForm dnnLoginService dnnClear">
  <div class="dnnFormItem">
    <label for="dnn_ctr_Login_Login_DNN_txtUsername" id="dnn_ctr_Login_Login_DNN_plUsername" class="dnnFormLabel">Username:</label>
    <input name="dnn$ctr$Login$Login_DNN$txtUsername" type="text" id="dnn_ctr_Login_Login_DNN_txtUsername" AUTOCOMPLETE="off" />
  </div>
  <div class="dnnFormItem">
    <label for="dnn_ctr_Login_Login_DNN_txtPassword" id="dnn_ctr_Login_Login_DNN_plPassword" class="dnnFormLabel">Password:</label>
    <input name="dnn$ctr$Login$Login_DNN$txtPassword" type="password" id="dnn_ctr_Login_Login_DNN_txtPassword" AUTOCOMPLETE="off" />
  </div>
  <p><a id="dnn_ctr_Login_Login_DNN_cmdLogin" title="Login" class="dnnPrimaryAction" href=" WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(&quot;dnn$ctr$Login$Login_DNN$cmdLogin&quot;, &quot;&quot;, true, &quot;&quot;, &quot;&quot;, false, true))">Login</a></p>
</div>
</div>
</div>
<div class="dnnLoginRememberMe">
  <input id="dnn_ctr_Login_chkCookie" type="checkbox" name="dnn$ctr$Login$chkCookie" />
  <label for="dnn_ctr_Login_chkCookie">Remember Login</label>
</div>
<div><span id="dnn_ctr_Login_lblLogin"></span></div>
<div class="dnnLoginActions">
  <ul class="dnnActions dnnClear">
    <li id="dnn_ctr_Login_liRegister"><a id="dnn_ctr_Login_registerLink" class="dnnSecondaryAction" onclick="return dnnModal.show('http://localhost/register.aspx?returnurl=%2fdefault.aspx&amp;popUp=true',/*showReturn*/true,600,950,true,'')">Register</a></li>
    <li id="dnn_ctr_Login_liPassword"><a id="dnn_ctr_Login_passwordLink" class="dnnSecondaryAction" onclick="return dnnModal.show('http://localhost/GettingStarted/tabid/55/ctl/SendPassword/Default.aspx?returnurl=%2fdefault.aspx&amp;popUp=true',/*showReturn*/true,300,650,true,'')">Retrieve Password</a></li>
  </ul>
</div>
</div>
</div>




DNN6 load a full dnn page without a skin (lots of unneeded code & unneeded database calls - this is why all the popups are so slow).

EXAMPLE OF DNN6 IFRAMED POPUP LOGIN FORM (SLOW):

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<head id="Head">
<!--**********************************************************************************-->
<!-- DotNetNuke - http://www.dotnetnuke.com                                          -->
<!-- Copyright (c) 2002-2011                                                          -->
<!-- by DotNetNuke Corporation                                                        -->
<!--**********************************************************************************-->
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type" />
<meta content="text/javascript" http-equiv="Content-Script-Type" />
<meta content="text/css" http-equiv="Content-Style-Type" />
<meta id="MetaKeywords" name="KEYWORDS" content=",DotNetNuke,DNN" />
<meta id="MetaCopyright" name="COPYRIGHT" content="Copyright 2011 by DotNetNuke Corporation" />
<meta id="MetaGenerator" name="GENERATOR" content="DotNetNuke " />
<meta id="MetaAuthor" name="AUTHOR" content="My Website" />
<meta name="RESOURCE-TYPE" content="DOCUMENT" />
<meta name="DISTRIBUTION" content="GLOBAL" />
<meta id="MetaRobots" name="ROBOTS" content="INDEX, FOLLOW" />
<meta name="REVISIT-AFTER" content="1 DAYS" />
<meta name="RATING" content="GENERAL" />
<meta http-equiv="PAGE-ENTER" content="RevealTrans(Duration=0,Transition=1)" />
<style id="StylePlaceholder" type="text/css"></style>
<link href="/DependencyHandler.axd/5dd403e98df088ec31bdd47e19c6e735.51.css" type="text/css" rel="stylesheet"/>
<script src="/DependencyHandler.axd/54cf24e54f5b3128aae50cf7ddc4ef1e.51.js" type="text/javascript"></script>
<link href="/Telerik.Web.UI.WebResource.axd?compress=1&amp;_TSM_CombinedScripts_=%3b%3bTelerik.Web.UI%2c+Version%3d2011.2.915.20%2c+Culture%3dneutral%2c+PublicKeyToken%3d121fae78165ba3d4%3aen-US%3af3497db7-eb6b-42ac-8ad3-643dea674073%3a45085116%3a27c5704c" type="text/css" rel="stylesheet" />
<title>User Log In</title>
</head>
<body id="Body">
<form name="Form" method="post" action="/login.aspx?ReturnUrl=%2fdefault.aspx&amp;popUp=true" id="Form" enctype="multipart/form-data">
  <div>
    <input type="hidden" name="StylesheetManager_TSSM" id="StylesheetManager_TSSM" value="" />
    <input type="hidden" name="ScriptManager_TSM" id="ScriptManager_TSM" value="" />
    <input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" />
    <input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" />
    <input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="wjgTrGyUicJWL6Nsjo+JPqlQl7RYAxKpAKaVdfI3szKhH8w/uy+JZQ70XiGURgsOiH7vQM4RhC2Kusm3sEUrryND2ZfJ8/XMIj7f8mBQ4AAeC3Io7LUUJI5t0SKM9Ypqkf5sVJGBKn3bF9pS3AxSXu78flK/NR8Wki2KtJkj6HX5qaAUALQelBQRbm9wufG0zKGbDlUQhvBxQqwnSone6Gmr0VIGsd3Xt9r4d3F4CwwU93dUCi6cfsRaWSF4sUrU9ZJKMtjAUxvjaP21A0dUBdAlO1s+3A0i/iA8ZOG+JZIa3WJZrggqEgDF15b/AEc7xT1Q8LJfYN6pL66JwMj4fxfhQ/OgPIaKbcHPJcUxlM3h0S/UYXiNRnP1XkuAbVMYPJsDNxP2G9QajW5QMTuD9iIy+ttjqcHufP6gu6sgroAzFtBI8EdTZ90eKUfLHzJzgzFEi5kPVd4hWIZRw1BdHj0hvLaFa0oKpnxqVxNzBZUpcy3JPEEgwLvVFcmH4WBXGijh4xbH0l666VJhCIE3o2hq5+2GdwMGAZGoeM9jD7FUxOiLmTWCF/aAEo5M0zkbbf97rnrdxCQiHizDvT70rPkqrbGbuWJrPQW++Si87CFG5TxiaR4GmlZpfNKxELG1MCw6a9crcr917OP77/jwgGBN2Go527bEuoyofeWmWoLWvakwCTLnrFm+6tGK6i7u7JGWHJqWRcTLhM5PMj0sv0usHIQutE9LhFfEkXMQkb0tFXJ5Vsefh0GD3YNZWzrNQzCLIP2i8WEws9rjWYpxSYaYBuhEj41hSInguZ6i+BlVmTY3ZoGzp0mcGPZY6t7aojYOUXi981nRB0WFIU2wgV9BL2GKM9o5U+hj8BB251a05UWXByaETKvwX4nhnH/8tspFlZyTYIU9khx2T+0VhZmlm4vW2GsO2DufSupJJ8ALbMaohdo+/TzNkrUgYoACIBIhscJZDSaei/eEfba2b2NdseDo107JQp0cFsjYXx/va+2IQiutmz14V4IjWa9cDs2iF5/AqQ6eh6wy/iJv3c/DAc7ysCAAFDdbEgPxiI0WmxSRwZSkb6GJwfTMhXDk8iEnuuMEQJ1eXDU5omWedPEQhk2lVUxbxlwa+qT2wWYiq/AO2gzoKA9YqvQehuyCasOzfTTYh4Kfm67qaQ42v6JkD6H8E+fgK7rYtW9YfcgEDRHXN9d8QOJqe7PG89IufJWGjUIeKgOzWJGsJ8CNOO7avSxvKlRBRxyOZzLRN394o55raiHZcLjbm+Oxvyw66316+zImqpeJ/R0afjQxB9F1OHNrBQ5eckn8c70Mp0U35+KBV8FR662Noq5vxQZn+dqJtFY55/KNeua+pKGojcyHa94PmcL1M3Mx0wqI0hSZOHwA9H1Ym9F6YRaGmjmfPNOppc/dXG1Uu2MjXMvKTMWSAZJ7b1MaXtiZSgPaqcmBeGAQlFv+nOQXG5mpw5X4sHegZHBvNw1yhPXodU30rSuJka6RE2bly8swWIaP0fMAeqlfmS07oj4ZWs2ex5UEGYu8qHAlPdlI7gGkTd4a+UdY2HlNTftfMNrscpZ58Bof8HdmknCzxaJT9AdtXGFdXFcba9PpYF7bibzLSlAvZjAw21wE3/lw72zMrm1KkpHMek+J" />
  </div>
  <script type="text/javascript">
//<![CDATA[
var theForm = document.forms['Form'];
if (!theForm) {
    theForm = document.Form;
}
function __doPostBack(eventTarget, eventArgument) {
    if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
        theForm.__EVENTTARGET.value = eventTarget;
        theForm.__EVENTARGUMENT.value = eventArgument;
        theForm.submit();
    }
}
//]]>
</script>
  <script src="/WebResource.axd?d=jYMyVmuoNRBKQQ_59jKyr94kUqO-ZB4JgOJGzpmsrna1MsmsKkLyffzcIW7Rr9YnyqV8m850eL8LLGJJ0&amp;t=634209138757546466" type="text/javascript"></script>
  <script src="/Telerik.Web.UI.WebResource.axd?_TSM_HiddenField_=ScriptManager_TSM&amp;compress=1&amp;_TSM_CombinedScripts_=%3b%3bSystem.Web.Extensions%2c+Version%3d3.5.0.0%2c+Culture%3dneutral%2c+PublicKeyToken%3d31bf3856ad364e35%3aen-US%3afab31106-1bd6-4491-9a14-59e0fc4a7081%3aea597d4b%3ab25378d2%3bTelerik.Web.UI%2c+Version%3d2011.2.915.20%2c+Culture%3dneutral%2c+PublicKeyToken%3d121fae78165ba3d4%3aen-US%3af3497db7-eb6b-42ac-8ad3-643dea674073%3a16e4e7cd%3af7645509%3aed16cbdc" type="text/javascript"></script>
  <script src="/js/dnn.js" type="text/javascript"></script>
  <div>
    <input type="hidden" name="__VIEWSTATEENCRYPTED" id="__VIEWSTATEENCRYPTED" value="" />
    <input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="yI2BAheAzuE33jSO0H8GhQXgiQsdPJX1uWhQ3IcBhUuhf/b4WxTCwIuNj4z+XZIG3CrvH6D9HVIcq+759V2htlFAjzUXMiiqyTUJ5L4urNPZMPK5xZSMnTwvqt6odBzzTAv++Q==" />
  </div>
  <script type="text/javascript">
//<![CDATA[
Sys.WebForms.PageRequestManager._initialize('ScriptManager', document.getElementById('Form'));
Sys.WebForms.PageRequestManager.getInstance()._updateControls(['tdnn$ctr$dnn$ctr$Login_UPPanel'], [], [], 90);
//]]>
</script>
  <script src="/DependencyHandler.axd/37464bc4741d43829756293e6fddd0a7.51.js" type="text/javascript"></script>
  <div id="dnn_ContentPane">
    <div class="DnnModule DnnModule- DnnModule--1">
      <div id="dnn_ctr_ContentPane">
        <div id="dnn_ctr_ModuleContent" class="DNNModuleContent ModC">
          <div id="dnn_ctr_Login_Prog" class="RadAjax RadAjax_Default" style="display:none;">
            <div class="raDiv"> </div>
            <div class="raColor raTransp"> </div>
          </div>
          <div id="dnn_ctr_dnn_ctr_Login_UPPanel">
            <div id="dnn_ctr_Login_UP">
              <!-- 2011.2.915.20 -->
              <div class="dnnForm dnnLogin dnnClear">
                <div id="dnn_ctr_Login_pnlLogin">
                  <div class="loginContent">
                    <div id="dnn_ctr_Login_pnlLoginContainer" class="LoginPanel">
                      <div id="dnn_ctr_Login_DNN" onkeydown="return __dnn_KeyDown('13', ' __doPostBack(%27dnn$ctr$Login$Login_DNN$cmdLogin%27,%27%27)', event);">
                        <div class="dnnForm dnnLoginService dnnClear">
                          <div class="dnnFormItem">
                            <label for="dnn_ctr_Login_Login_DNN_txtUsername" id="dnn_ctr_Login_Login_DNN_plUsername" class="dnnFormLabel">Username:</label>
                            <input name="dnn$ctr$Login$Login_DNN$txtUsername" type="text" id="dnn_ctr_Login_Login_DNN_txtUsername" AUTOCOMPLETE="off" />
                          </div>
                          <div class="dnnFormItem">
                            <label for="dnn_ctr_Login_Login_DNN_txtPassword" id="dnn_ctr_Login_Login_DNN_plPassword" class="dnnFormLabel">Password:</label>
                            <input name="dnn$ctr$Login$Login_DNN$txtPassword" type="password" id="dnn_ctr_Login_Login_DNN_txtPassword" AUTOCOMPLETE="off" />
                          </div>
                          <p><a id="dnn_ctr_Login_Login_DNN_cmdLogin" title="Login" class="dnnPrimaryAction" href=" WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(&quot;dnn$ctr$Login$Login_DNN$cmdLogin&quot;, &quot;&quot;, true, &quot;&quot;, &quot;&quot;, false, true))">Login</a></p>
                        </div>
                      </div>
                    </div>
                    <div class="dnnLoginRememberMe">
                      <input id="dnn_ctr_Login_chkCookie" type="checkbox" name="dnn$ctr$Login$chkCookie" />
                      <label for="dnn_ctr_Login_chkCookie">Remember Login</label>
                    </div>
                    <div><span id="dnn_ctr_Login_lblLogin"></span></div>
                    <div class="dnnLoginActions">
                      <ul class="dnnActions dnnClear">
                        <li id="dnn_ctr_Login_liRegister"><a id="dnn_ctr_Login_registerLink" class="dnnSecondaryAction" onclick="return dnnModal.show('http://localhost/register.aspx?returnurl=%2fdefault.aspx&amp;popUp=true',/*showReturn*/true,600,950,true,'')">Register</a></li>
                        <li id="dnn_ctr_Login_liPassword"><a id="dnn_ctr_Login_passwordLink" class="dnnSecondaryAction" onclick="return dnnModal.show('http://localhost/GettingStarted/tabid/55/ctl/SendPassword/Default.aspx?returnurl=%2fdefault.aspx&amp;popUp=true',/*showReturn*/true,300,650,true,'')">Retrieve Password</a></li>
                      </ul>
                    </div>
                  </div>
                </div>
              </div>
            </div>
          </div>
        </div>
      </div>
      <div class="c_footer"> </div>
    </div>
  </div>
  <input name="ScrollTop" type="hidden" id="ScrollTop" />
  <input name="__dnnVariable" type="hidden" id="__dnnVariable" value="`{`__scdoff`:`1`,`__dnn_pageload`:`__dnn_SetInitialFocus(\u0027dnn_ctr_Login_Login_DNN_txtUsername\u0027);`}" />
  <script type="text/javascript" src="/Resources/Shared/scripts/initWidgets.js" ></script>
  <script type="text/javascript">
//<![CDATA[
;(function() {
                        function loadHandler() {
                            var hf = $get('StylesheetManager_TSSM');
                            if (!hf._RSSM_init) { hf._RSSM_init = true; hf.value = ''; }
                            hf.value += ';Telerik.Web.UI, Version=2011.2.915.20, Culture=neutral, PublicKeyToken=121fae78165ba3d4:en-US:f3497db7-eb6b-42ac-8ad3-643dea674073:45085116:27c5704c';
                            Sys.Application.remove_load(loadHandler);
                        };
                        Sys.Application.add_load(loadHandler);
                    })();Sys.Application.initialize();
Sys.Application.add_init(function() {
    $create(Telerik.Web.UI.RadAjaxLoadingPanel, {"initialDelayTime":0,"isSticky":false,"minDisplayTime":0,"skin":"Default","transparency":0,"uniqueID":"dnn$ctr$Login_Prog","zIndex":90000}, null, null, $get("dnn_ctr_Login_Prog"));
});
Sys.Application.add_init(function() {
    $create(Telerik.Web.UI.RadAjaxPanel, {"clientEvents":{OnRequestStart:"",OnResponseEnd:""},"enableAJAX":true,"enableHistory":false,"links":[],"loadingPanelID":"dnn_ctr_Login_Prog","styles":[],"uniqueID":"dnn$ctr$Login_UP"}, null, null, $get("dnn_ctr_Login_UP"));
});
//]]>

</script>
</form>
<script type="text/javascript">
        //<![CDATA[
        
        //This code is to force a refresh of browser cache
        //in case an old version of dnn.js is loaded
        //It should be removed as soon as .js versioning is added
        jQuery(document).ready(function () {
            if (navigator.userAgent.indexOf(" Chrome/") == -1) {
                if ((typeof dnnJscriptVersion === 'undefined' || dnnJscriptVersion !== "6.0.0") && typeof dnn !== 'undefined') {
                    window.location.reload(true);
                }
            }
        });
         //]]>
    </script>
</body>


DNN Corp really need to start thinking before they implement poorly thought out solutions. A few more bad decisions off the top of my head include localization (no user testing was done & it is way to complicated & just doesn't work), including close source products like Telerik (I don't think I need to say anything else here), the new DNN6 control panel is not user friendly (again no user testing has been done - the original one is much better or you should of bought Oliver Hines to include in DNN).

We are going to be making a decision very shortly to decide if we should keep supporting DNN with our Professional subscriptions or if we are going to move to another product that implements the latest technology in a more thought out user friendly manner.
 
New Post
10/24/2011 11:59 AM
 
Hey Sam,

I agree the technical solution is not optimal, but I seriously doubt the decision was poorly thought out. It was not trivial to implement the iframe solution, and it would be even less trivial to do "real ajax" through the entire application. Given the amount of features/code in the DNN application and the company's mission for the product to be backwards compatible with nearly everything - you can rest assured that no decisions are made lightly.

It's easy to focus in on one specific aspect of technology (and indeed I do it often, and even get paid to do it), but doing best by one specific technical feature is not always doing best for your product or customers. In this case I think we need to look at this feature in the frame of "incremental improvement" and look forward to future improvements.

Ian

Software Engineer
Co-Founder, dnnGallery
Stack Overflow: Ian Robinson
Twitter: @irobinson
Linked In: Ian Robinson
 
New Post
11/15/2011 5:41 PM
 

I agree on the iframe point, it is a bit heavy handed. But since it's typically an admin feature, I can overlook it. They can be disabled in the site settings as well. I usually use a different solution anyways.

Your other points are off base, IMO, and since this your first post with this username, I assume your just venting some steam. User testing and input was gathered during the DNN 6 development process. I remember the solicitation for feedback over the summer.

 
Previous
 
Next
HomeHomeUsing DNN Platf...Using DNN Platf...Performance and...Performance and...DNN6 using Iframes- really?DNN6 using Iframes- really?


These Forums are dedicated to discussion of DNN Platform and Evoq Solutions.

For the benefit of the community and to protect the integrity of the ecosystem, please observe the following posting guidelines:

  1. No Advertising. This includes promotion of commercial and non-commercial products or services which are not directly related to DNN.
  2. No vendor trolling / poaching. If someone posts about a vendor issue, allow the vendor or other customers to respond. Any post that looks like trolling / poaching will be removed.
  3. Discussion or promotion of DNN Platform product releases under a different brand name are strictly prohibited.
  4. No Flaming or Trolling.
  5. No Profanity, Racism, or Prejudice.
  6. Site Moderators have the final word on approving / removing a thread or post or comment.
  7. English language posting only, please.
What is Liquid Content?
Find Out
What is Liquid Content?
Find Out
What is Liquid Content?
Find Out