Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net HTTPHandler与aspx_.net_Asp.net_Httphandler - Fatal编程技术网

.net HTTPHandler与aspx

.net HTTPHandler与aspx,.net,asp.net,httphandler,.net,Asp.net,Httphandler,与.aspx相比,使用HTTPHandler有哪些优势?它是否具有相同的功能,是否重量更轻、速度更快 有哪些缺点?Aspx使用全功能Web表单,具有复杂的页面生命周期和大量附加处理。HttpHandler是纯粹的、轻量级的。它只有您实现的功能。By.aspx您真正指的是System.Web.UI.Page的一个实例,正如您在该类的元信息中所看到的,它是IHttpHandler的一个实现-换句话说(粗略地说),页面实例是一个HttpHandler(这才是重点)加上一大堆的东西,让它的页面行为 因此

与.aspx相比,使用HTTPHandler有哪些优势?它是否具有相同的功能,是否重量更轻、速度更快


有哪些缺点?

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

By.aspx您真正指的是System.Web.UI.Page的一个实例,正如您在该类的元信息中所看到的,它是IHttpHandler的一个实现-换句话说(粗略地说),页面实例是一个HttpHandler(这才是重点)加上一大堆的东西,让它的页面行为

因此,不同之处在于,使用页面,您可以利用它提供给您的所有东西(视图状态、控件状态、生命周期等),而不管您是否需要它,您都必须拥有所有的开销,与编写自己的实现相比,您可以根据自己的选择使其轻量级并适合您的目的,而代价是必须自己编写

因此,当您对页面支持不感兴趣时,HttpHandler尤其合适,因为您没有提供语义页面响应——几乎可以肯定,在页面上提供XML、JSON、图像或任何非HTML样式的标记都是错误的


实际上,我选择了第三个选项—MVC—大多数情况下:)

请记住,当编译.aspx页面时,它将被转换为一个直接或间接(通过从“代码隐藏”继承)派生自
System.Web.UI.page
的类类,该类又直接或间接继承自
页面

Page
实现了
IHttpHandler
,因此您永远不会不使用
IHttpHandler

和在页>代码>的成员列表中的快速扫描给出了自己对这个问题的很好的答案。有很多事情在进行,并且提供了很多派生类(即,.ASPX文件和代码BeNHDS)。这是在我们考虑方法之前。解析ASPX文件以编写大量的“模板”代码。代码在他们非常容易

如果您编写自己的处理程序,您将失去所有这些。失去它将提高您的性能,但不会像您想象的那么多,如果不使用它,成本不会很大。事实上,如果您确实丢失了所需的东西,那么您自己的取回方法的效率可能会降低


如果编写有问题的处理程序的自然方式是让所有事情直接或间接发生(方法调用)从代码中的单个事件处理程序开始,使用空的.aspx,那么将其作为处理程序来编写可能会更清晰,在这种情况下,可以这样做。否则,您希望继续使用.aspx文件。

根据页面/处理程序所做的工作,使用普通处理程序而不是页面,我的性能提高了5%到15%——它们是often是生成图像、json等、处理ajax请求中的后台任务或执行图像请求中的访客日志记录等操作的良好选择

如果编写了大量html,那么使用处理程序会有点痛苦——构建html字符串时出错的可能性往往大于性能优势


处理程序的一个重要缺点是使用ouput缓存声明进行无脑缓存—当然,您可以通过编程将其连接起来,但我发现aspnet通常比我快速编写的任何东西都能更好地进行缓存管理。

这是一个很好的问题,但几乎可以肯定是一个重复,并且它被广泛讨论和讨论容易收集的。