2010-08-17 68 views
5

使用HTTPHandler和.aspx有什么优势?它是否具有相同的功能,重量更轻,速度更快?HTTPHandler vs .aspx

有什么缺点?

+0

一个很好的问题,但几乎肯定是一个骗局,它被广泛讨论和随时googleable。 – annakata 2010-08-17 21:54:03

回答

2

Aspx使用具有复杂页面生命周期和大量附加处理的全功能Web表单。 HttpHandler是纯粹和轻量级的。它只有你实现的功能。

0

通过.aspx你真的指的是System.Web.UI.Page的一个实例,你可以在这个类的元信息中看到IHttpHandler的实现 - 换句话说(粗略地说)一个Page实例 HttpHandler(这是相当重要的)加上一大堆东西给它的页面行为。

因此,不同之处在于,使用Page可以充分利用它提供的所有功能(视图状态,控制权,生命周期等),但必须承担所有这些开销无论你是否需要它,还是写自己的实现,你可以将它作为轻量级的,适合你选择的目的,而不必花费自己的代价。因此

的HttpHandler特别适合当你因为你没有提供一个语义页面响应不感兴趣页的支持 - 这是几乎可以肯定在传输XML,JSON,图像,或什么,但HTML风格mark-错误与一页。

在实践中,我选择了第三种选择 - MVC - 大部分时间:)

1

请记住,当你的.aspx页面中被编译,它会变成从System.Web.UI.Page派生的类直接或间接(通过从“代码隐藏”类,又直接或间接地从Page继承了inheritting。

Page实现IHttpHandler,所以你永远不使用IHttpHandler

,并在快速扫描成员李Page的st对这个问题给出了自己的很好的答案。有很多事情要做,并提供很多派生类(即.aspx文件和代码隐藏)。这就是在我们考虑这种方式之前,.aspx文件被解析为使用大量“模板”代码编写代码非常容易。

如果您编写自己的处理函数,则会失去所有这些。失去它会使你的性能提高,但不如你想象的那么多,如果它不被使用,很多都不会花费。事实上,如果你确实损失了所需的东西,那么你自己的回归方法可能效率会降低。

如果编写处理程序的自然方式是直接或间接地(方法调用)从代码隐藏中的单个事件处理程序发生,并使用空的.aspx,那么它可能会更清晰把它写成一个处理程序来代替,在这种情况下。否则,你想坚持使用.aspx文件。

0

根据页面/处理程序在做什么,我使用普通处理程序而不是页面提高了5%到15%的性能 - 它们通常是生成图像,json等处理来自ajax的后台任务的理想选择请求或执行诸如来自图像请求的访客记录之类的事情。

如果你写出大量的html,处理程序有点痛苦 - 构建html字符串时出现错误的可能性往往超过性能优势。

使用处理程序丢失的一件重要事情是使用ouput缓存声明进行无忧缓存 - 当然,您可以通过编程方式自己连接它,但是我发现aspnet通常在缓存管理方面做得比任何其他任务都好我写得很快。