HTTPHandler与.aspx的区别

5

使用HTTPHandler和.aspx的优势是什么?它们具有相同的功能吗?它们是否更轻巧、更快速?

它们的一些缺点是什么?


一个好问题,但几乎可以肯定是一个重复问题,并且已经被广泛讨论并能轻易通过谷歌搜索到。 - annakata
4个回答

2

Aspx使用完整的Web表单,具有复杂的页面生命周期和大量的额外处理。HttpHandler是纯粹且轻量级的,它只具有您实现的功能。


1
请记住,当您的.aspx页面被编译时,它将被转换为一个从System.Web.UI.Page派生的类,无论是直接还是间接地(通过继承“代码后台”类,该类又直接或间接地继承自Page)。
Page实现了IHttpHandler,因此您永远不会不使用IHttpHandler。
而且快速扫描Page的成员列表就可以回答这个问题。有很多事情要做,并且提供给派生类(即.aspx文件和代码后台)。在考虑解析.aspx文件以使编写大量“模板”代码的方式变得非常容易之前,这还不算什么。
如果您编写自己的处理程序,则会失去所有这些内容。失去它将为您带来性能提升,但并不像您想象的那样多,如果不使用很多东西,就不会产生成本。实际上,如果您失去需要的东西,您自己获取它的方法可能效率更低。
如果在你的代码后端中,处理程序的自然方式是通过一个单一的事件处理程序直接或间接地执行所有操作(方法调用),并且使用一个空的 .aspx 文件,那么将其写为处理程序可能更清晰明了。否则,你应该继续使用 .aspx 文件。

0

通过 ".aspx",你实际上是指 System.Web.UI.Page 的一个实例,正如你可以在该类的元信息中看到的那样,它是 IHttpHandler 的一种实现 - 换句话说(粗略地说),Page 实例就是一个 HttpHandler(这是重点)加上一堆东西,使其具有 Page 行为。

因此,区别在于使用 Page,你可以利用它提供的所有东西(视图状态、控件性质、生命周期等等...),但代价是必须拥有所有这些开销,无论你是否需要,而编写自己的实现则可以让它尽可能轻量化和适合你选择的目的,但代价是必须自己编写所有内容。

因此,当你不关心 Page 支持时,HttpHandler 就特别适合,因为你不会提供语义页面响应 - 使用 Page 提供 XML、JSON、图像或任何 HTML 样式标记几乎肯定是错误的。

实际上,我大多数时候选择第三个选项 - MVC :)


0
根据页面/处理程序的功能不同,使用普通处理程序而非页面可以提高5%至15%的性能 - 它们通常是生成图像、JSON等、处理来自Ajax请求的后台任务或从图像请求中进行访问者日志记录等操作的良好选择。
如果您需要编写大量HTML,则使用处理程序会有些麻烦 - 构建HTML字符串时出现错误的潜在可能性往往超过了性能优势。
使用处理程序失去的一个重要功能是无脑缓存输出缓存声明 - 当然,您可以自己编程连接它,但我发现aspnet通常比我快速编写的任何内容都更好地管理缓存。

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