HTTPServerUtility.Transfer 是不是比 Response.Redirect 在 asp.net 中的网站性能更有用?

Posted

技术标签:

【中文标题】HTTPServerUtility.Transfer 是不是比 Response.Redirect 在 asp.net 中的网站性能更有用?【英文标题】:Is HTTPServerUtility.Transfer is more userful than Response.Redirect in performance of website in asp.net?HTTPServerUtility.Transfer 是否比 Response.Redirect 在 asp.net 中的网站性能更有用? 【发布时间】:2011-08-03 15:35:51 【问题描述】:

现在我正在阅读有关 .net 网站性能和可扩展性的信息。

我阅读了许多关于性能和可扩展性的博客文章和微软书籍。

在上一篇博客中,linked here。

在这篇博客的第 6 篇文章中谈到 “使用 HTTPServerUtility.Transfer 而不是 Response.Redirect”..

它在网站性能和博客中更有用吗,

"仅当您将人员转移到另一个物理 Web 服务器时才应使用它们。对于您服务器内的任何转移,请使用 .transfer!您将节省大量不必要的 HTTP 请求。"

任何人都可以帮助我在性能方面比 response.redirect 更有用吗?

【问题讨论】:

Check This 并且还与您的问题内联This @V$Vendetta:很好的文章值得阅读。但。需要更多关于示例的说明。无论如何谢谢。 您在此问题中发布的链接告诉您不要使用服务器端验证 !!!!!!我根本不会听那个人的。 【参考方案1】:

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

Server.Transfer 在当前页面离开的地方有另一个页面“占用”执行,并给出其输出。这节省了重定向步骤 - 重定向向客户端发出 302 - Moved 响应,并加载新 URL,然后浏览器发出新请求。当您改用 Server.Transfer 时,这就是“保存”的内容。

但你也可能会失去一些东西;例如,当您的用户尝试为加载了涉及 Server.Transfer 的页面添加书签时,他们可能会感到困惑,并发现出现了一些完全出乎意料的内容,因为 Server.Transfer 并未考虑到这种可能性。

您还必须做一些工作以确保您将请求值正确编组到“新”页面;查询字符串、表单值和服务器端控件的值。

当您对 ASP.NET 管道和 HTTP 协议更高级和更了解时,我会打电话给 Server.Transfer使用它。


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

【讨论】:

需要用例子来解释这样的新话题。无论如何谢谢。 我的观点完全正确;您还不够了解,无法真正知道何时/如何使用更高级的Server.Transfer...所以不要使用它。现在不要花费数小时来学习对您总体而言不会非常有用的东西。在您做出明智的决定之前,您需要非常熟悉 ASP.NET 在架构级别上的工作方式。 我想你应该告诉我哪个东西更好用是什么原因?我创建了 10 多个 asp.net 网站,并且总是尽我所能来提高它的性能。现在。我完全专注于asp.net网站的性能和结构。所以,当我的网站准备就绪时,它看起来很完美。所以,如果你在这些话题上帮助我,我会说声谢谢。 您的答案是否定的:不要根据您在该网站上阅读的内容切换到 Server.Transfer【参考方案2】:

Server.Transfer 在性能方面并没有多大用处。 更好的性能取决于页面中实际运行的内容以及您调用传输或重定向的位置,但差异如此之小以至于您需要关注 transferredirect 的实际操作。

Transfer 增加了很多问题 添加到从页面到的导航 页面,例如用户看到相同的页面名称,但内容不同。 Transfer处理不了 回发 asp.net 函数。 当您使用transfer 时,您总是需要在每次回帖时知道接下来要显示的页面,因为您总是加载相同的代码页。 如果您经常使用Transfer,则每个页面的服务器都需要加载并运行 2 个不同的页面代码以获得相同的结果。

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

我建议大家少用Server.Transfer

这是一个 Transfer make 认为复杂且速度较慢的示例。如果您有工作要做,然后显示结果,并且可以说这项工作需要几秒钟,如果您进行 Transfer,则在每次回帖或重新加载时,必须再次运行该工作!。

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");

我认为,不需要太多的谈话,如果你稍微练习一下,你可以在实际页面中看到很多想法和不同。

【讨论】:

【参考方案3】:

是的Server.Transfer消除Http请求;但是,它并非最适合所有场景。你应该知道每个人的作用。

Response.Redierct

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

Server.Transfer

浏览器请求页面。 服务器处理请求然后执行Server.Transfer 发送带有新 URL 的响应以加载响应代码 302 Moved 浏览器收到302状态码,请求新的url。 服务器在新页面上处理请求,然后发回响应。

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

结论:如果您想通过搜索引擎索引您的网址或希望您的用户为网址添加书签,那么Server.Transfer 将无济于事。

Server.Transfer:只会帮助您向用户或浏览器或搜索引擎隐藏 URL。

【讨论】:

是的。在实践中,您可能希望使用 Server.Transfer 的情况可能首先表明应用程序架构不佳。 @Andrew,当我有多个页面或处理程序时,我使用Server.Transfer,具体取决于查询字符串变量,例如/xyz.aspx?var=1,然后在 xyz 上执行 Server.Transfer 到 @987654328 @ 和 /xyz.aspx?var=2page2.aspx 我认为 URL 重写会是更好的处理方式。但除此之外,我的评论仍然有效。无论如何,正如您所指出的; Server.Transfer 并不是一直使用的最好的东西……不像那个页面上说的那样;它基本上说你应该总是改用Server.Transfer。啊! URL重写是处理变量的方式,或者你可以在页面内部使用需要处理这些变量的逻辑。我完全同意安德鲁。 @Aristos,这只是我告诉的一个简单的例子。

以上是关于HTTPServerUtility.Transfer 是不是比 Response.Redirect 在 asp.net 中的网站性能更有用?的主要内容,如果未能解决你的问题,请参考以下文章