如何在ASP.NET主页中渐进式地呈现标头和内容?

11

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

我发现如果用户在页面生成/处理/从数据库中加载期间可以看到页眉和导航,则用户体验会更好。

我进行了一些简单的测试,可以在page_load()中使用Response.Write()后跟Response.Flush(),IIs将使用分块编码并立即将输出发送到浏览器,而页面的其余部分则渲染。

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

有关如何实现此目的的任何提示吗?

使用ASP.net 4和IIs 7.5

编辑

如果有人能够给出如何在不改变每个页面和链接的情况下更改网站以使用AJAX的指针,我将不胜感激。谢谢!


有什么办法可以让页面变小吗?也许可以尽可能地关闭视图状态(ViewState),等等? - Roman
6
更好的解决方案是对页面进行分析,找出它们被阻塞的位置(我保证这是在数据库调用中),然后将这些数据库调用转移到异步或使用AJAX来独立加载它们而不影响页面内容。根据情况,也可以考虑缓存这些调用。 - Chris Marisic
@Chris 嗯,我会这样做,但这不是一个数据库调用。它涉及一整套存储过程调用(由我们的DBA编写),如果不进行分片等操作,很难进一步优化。虽然已经有了缓存机制,但由于有许多页面,大部分时间都没有效果。使用AJAX会是理想的选择,但我不确定如何在不重新设计整个网站的情况下实现它。(如果有简单的方法,请告诉我!!!)请记住,此网站有数百个页面,基于客户端有十几个不同的主页面。这不是一个简单的网站。 - Byron Whitlock
4
根据你所说的,Bryon,你已经需要重新设计整个网站。你的应用程序在设计上已经达到性能瓶颈。即使你成功实现了这个问题的目标,它显然并不能解决你的问题,只是为你争取更多的时间来解决它。听起来你已经到达了当前设计的失败点,现在是时候开始新的设计,并开始替换价值最高的应用程序部分。我建议使用MVC3重写新的部分,你也可以通过将其嵌入到网站中来作弊。 - Chris Marisic
1
使用ajax是什么意思...我看到两个意思:1)页面加载后,使用ajax自动加载页面的其他部分。2)当用户单击某些内容时,使用ajax更改已加载页面的一部分。我认为你在谈论第一个...我正确吗?在这种情况下,UpdatePanel将无法解决您的问题...在第二种情况下,它可以非常顺畅地解决问题。 - Miguel Angelo
@Miguel Angelo - 更新面板,不错。如果你把它作为答案,你就赚了250个声望,先生。 - Byron Whitlock
4个回答

3

我已经知道可以调用Response.Flush()来设置分块编码。我只需要在主内容被填充之前能够调用Render()。我需要呈现主页面的页眉和页脚。 - Byron Whitlock

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分钟就结束了,你的回答最有用,但并不是我想要的答案。恭喜。 - Byron Whitlock

2
我建议跟踪该页面并尝试找出页面为何渲染缓慢的原因。以下内容可能有所帮助...

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

"使用DIV替代TABLE!关于AJAX的使用,据我所知...没有捷径。您可以在主页面中使用AJAX脚本管理器,并使用脚本管理器代理到您想要将页面设置为AJAX化的页面。将表单更改为引入更新面板,对于大多数页面,您应该做得很好。"


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接