HTTPServerUtility.Transfer比Response更有用.重定向在asp.net网站的性能

本文关键字:net asp 网站 性能 重定向 Transfer Response 有用 HTTPServerUtility | 更新日期: 2023-09-27 17:49:56

现在我正在阅读。net网站的性能和可扩展性。

我读了很多关于性能和可伸缩性的博客文章和微软的书。

在上一篇博客中,链接在这里。

在这个博客中,poing no。6 .谈论
"使用HTTPServerUtility。..

它对网站的性能更有用吗?在博客中,

"它们只应该在您将人员转移到另一个物理web服务器时使用。对于服务器内的任何传输,使用.transfer!"

谁来帮助我如何更有用的性能比响应。重定向?

HTTPServerUtility.Transfer比Response更有用.重定向在asp.net网站的性能

您应该不要盲目地开始使用Server.Transfer而不是Response.Redirect;它们不是简单的替代品。

Server.Transfer有另一个页面'占用'执行,其中当前一个离开,给出其输出。这节省了重定向步骤—重定向向客户机发出302 - Moved响应,并加载新的URL,然后浏览器发出新的请求。这就是当你使用Server.Transfer代替时被"保存"的东西。

但你也可以失去东西;比如,当你的用户试图收藏一个包含Server.Transfer的页面时,他们会感到困惑,并且发现一些完全意想不到的东西出现了,因为Server.Transfer没有被使用。

你还必须做一点工作来确保你的请求值被正确地编组到"新"页面;查询字符串、表单值和服务器端控件的值。

当你对ASP有了更深入的了解时,我认为Server.Transfer是一个值得考虑的东西。. NET管道和HTTP协议,基本上…你什么时候/为什么要用它根本没有任何问题。


编辑:也;我不会把你在你链接的网站上读到的任何东西当真。作者说您应该避免服务器端验证,而只在客户端进行验证。这一点,以及他们自己的许多建议,都表明他们对ASP.NET/HTTP的了解极其有限。不要让这样的人让你花那么多时间在不重要的事情上。

Server.Transfer消除Http请求;然而,它并不是最适合所有的场景。你应该知道每个人做什么。

反应。Redierct

  • 浏览器请求页面。
  • 服务器处理请求,然后Response.Redirect发送响应与新的URL加载响应代码302 Moved
  • 浏览器接收到302状态码,请求新的url。
  • 服务器接收到新的url和进程。

服务器。

  • 浏览器请求页面。
  • 服务器处理请求,然后做Server.Transfer 发送响应与新的URL加载响应代码302移动
  • 浏览器接收到302状态码,请求新的url
  • 服务器处理新页面的请求,然后发回响应。

所以简而言之,您使用Server.Transfer节省了一次往返。但是浏览器无法获取新的URL。

结论:如果你想通过搜索引擎索引你的url,或者想让你的用户书签url,那么Server.Transfer将不会帮助你。

服务器。

将只帮助您隐藏URL从用户或浏览器或搜索引擎。

服务器。转移在性能上并不是更有用。更好的性能取决于实际在页面中运行的内容以及您调用传输或重定向的位置,但是差异很小,您需要关注实际transferredirect所做的事情。

  • Transfer增加了许多问题添加到从页到的导航页面,例如用户看到相同的页面名称,但内容不同。
  • Transfer也不能处理post back asp.net functions.
  • 当你使用transfer时,你总是需要知道在每个帖子上你下一个显示的页面,因为你总是加载相同的代码页。
  • 如果你使用了很多Transfer,那么服务器需要为每个页面加载和运行2个不同的页面代码来获得相同的结果。
另一方面,

Redirect是一种导航和显示用户输入处理结果的方法。它很干净,第二页上的代码没有问题,回发和所有的工作都一样。

我建议大家少用Server.Transfer

这里有一个例子,Transfer make认为复杂和缓慢。如果你有一个工作要做,然后显示结果,让我们说这个工作需要一些时间,如果你做传输,在每次发回,或重新加载工作必须再次运行!

protected void Page_Load(object sender, EventArgs e)
{
    // function works
    Thread.Sleep(10000);
    Server.Transfer("Page2.aspx");
}  

使用重定向的第二种情况,工作将完成一次,不再调用,用户移动到结果页面。

protected void Page_Load(object sender, EventArgs e)
{
    // function works
    Thread.Sleep(10000);
    Response.Redirect("Page2.aspx");
}

我认为,没有必要做太多的演讲,如果你练习一点,你就能在真实的页面上看到很多不同的想法。