【问题标题】:How do I progressively render a header before content in ASP.NET master pages?如何在 ASP.NET 母版页中的内容之前逐步呈现标题?
【发布时间】:2011-08-15 03:32:35
【问题描述】:

我有一个使用母版页的大型慢速 ASP.net 站点。

我已经确定,如果用户在从数据库生成/处理/加载页面的其余部分时可以看到标题和导航,他们将获得更好的体验。

我已经做了一些简单的测试,我可以在 page_load() 中执行 Response.Write(),然后执行 Response.Flush(),并且 II 将使用分块编码并立即将输出发送到浏览器,而其余的页面呈现。

我想做同样的事情,但只发送母版页标题和导航。

关于如何实现这一点的任何指示?

使用 ASP.net 4 和 IIs 7.5

编辑

如果有人可以就如何更改网站以使用 AJAX 而不必更改每个页面和链接提供一些指示,我将不胜感激。谢谢!

【问题讨论】:

  • 有什么办法可以让页面变小吗?也许在可能的情况下关闭视图状态,等等?
  • 更好的解决方案是分析页面,找到它们阻塞的位置(我保证它在数据库调用中),然后将这些数据库调用卸载为异步或使用 AJAX 独立加载它们的页面内容。缓存调用也可能就足够了,具体取决于它是什么。
  • @Chris 好吧,我会这样做,但这不是一个数据库调用。这是一个完整的存储过程调用(由我们的 dba 编写),如果不分片 db 或其他东西,真的无法进行更多优化。有缓存,但大多数时候有这么多页面并没有帮助。虽然使用 AJAX 是理想的,但我不确定如何在不重新设计整个网站的情况下做到这一点。 (让我知道是否有简单的方法来做到这一点!!!)请记住,该站点有数百个页面,其中包含基于客户端的数十个不同的母版页。这不是一个简单的网站。
  • Bryon 根据您的说法,您已经需要重新设计整个网站。您已经达到了应用程序固有设计的性能界限。即使您成功实现了这个问题的目标,但它显然不能解决您的问题,它只会为您争取更多时间来解决它。听起来您在当前设计中刚刚达到失败点,是时候从新设计重新开始并开始替换您的应用程序中最大的价值赢家了。我会在 MVC3 中重写新的部分,你也可以作弊并在网站中 iframe
  • 使用ajax是什么意思...我看到两个意思:1)页面加载后,使用ajax自动加载页面的其他部分。 2)当用户点击某物时,使用ajax来改变一块已经加载的页面。我想你说的是第一个……我说的对吗?在这种情况下,UpdatePanel 将无法解决您的问题……在第二种情况下,它确实可以非常无缝地解决问题。

标签: c# asp.net iis-7 master-pages


【解决方案1】:

如果您在某个时候手动刷新响应流并且不手动设置内容长度,它将启用分块编码。

这个问题似乎相关:How can I set Transfer-Encoding to chunked, explicitly or implicitly, in an ASP.NET response?

这篇博文讨论了响应刷新和分块编码:http://www.rahulsingla.com/blog/2010/06/asp-net-sets-the-transfer-encoding-as-chunked-on-premature-flushing-the-response

【讨论】:

  • 我已经知道我可以调用 Response.Flush() 来设置分块编码。我只需要能够在以某种方式填充主要内容之前调用 Render() 。我需要渲染母版页的页眉和页脚。
【解决方案2】:

我建议你使用控制缓存。 Asp.Net 提供页面和控件的本地缓存。 查看这些链接以了解更多信息。

ASP.NET 缓存:技术和最佳实践

http://msdn.microsoft.com/en-us/library/aa478965.aspx

ASP.NET 缓存

http://msdn.microsoft.com/en-us/library/xsbfdd8c(v=VS.100).aspx

控制缓存

正如您所提到的,您似乎已经使用了页面缓存。尝试使用控制缓存来进一步改进缓存。要使用控件缓存,请将PartialCachingAttribute 放在控件类上。 您可以使用控件的ControlCachePolicy 来设置缓存行为:

control.GetCachePolicy()

【讨论】:

  • 赏金在 10 分钟后结束,您得到了最有用的答案,但不是我的问题。恭喜。
【解决方案3】:

我建议跟踪页面,并尝试找出页面呈现缓慢的确切原因。以下可能会有所帮助...

http://www.dotnetscraps.com/dotnetscraps/post/How-to-troubleshoot-issues-with-Page-Rendering-in-ASPNET.aspx

并使用 DIV 代替 TABLE!

关于 AJAX 的使用,AFAIK...没有捷径可走。您可以在母版页中使用 AJAX 脚本管理器,并将脚本管理器代理用于要对页面进行 ajax 化的页面。更改您的表单以引入更新面板,您应该适合大多数页面。

【讨论】:

    【解决方案4】:
    猜你喜欢
    • 1970-01-01
    • 2011-07-19
    • 1970-01-01
    • 1970-01-01
    • 2013-02-08
    • 1970-01-01
    • 1970-01-01
    • 2014-06-13
    • 1970-01-01
    相关资源
    最近更新 更多