I have to acknowledge, it has probably been more than a couple of years since I have done any real DNN (formerly DotNetNuke) development. Quite a few things seem to have changed in this time, especially with DNN 7.x.
A beginner ASP.NET developer also knows pretty well that each ASP.NET page needs to have a <form runat="server"> tag on the page and that all server controls need to be present inside this tag (although this is not entirely true; you can place server controls outside <form runat="server"> but then they cannot participate in regular ASP.NET functionality like PostBacks, Viewstate etc).
I returned to serious DotNetNuke development this year after a gap of more than a couple of years probably. And I must say, I did not see much changes as far as the public API of DotNetNuke is concerned. Yes, there have been good UI changes, some new capabilities but the underlying framework feels the same (this was in stark comparison to my last year's experience with migration from Drupal 6 to Drupal 7, where the entire Drupal API was overhauled, and here in DotNetNuke, the framework had notched up by 2 major versions).
I present below various Tips & Techniques (not in any particular order) for optimization of a typical DotNetNuke installation.I learned these while using DNN over time, while I encountered some of them while browsing over web.
A typical DNN install requires considerable server resources, and creates significant traffic between the database & web server. These techniques aim to reduce both of these where-ever possible, along with some other optimizations. Some of these may not apply to you, and I advise you to exert discretion in deciding which of these work best for you.