HTTPHandler против .aspx - PullRequest
       7

HTTPHandler против .aspx

5 голосов
/ 18 августа 2010

Каковы преимущества использования HTTPHandler по сравнению с .aspx? Обладает ли он такими же возможностями, легче и быстрее?

Какие недостатки есть?

Ответы [ 4 ]

2 голосов
/ 18 августа 2010

Aspx использует полнофункциональную веб-форму со сложным жизненным циклом страницы и большим количеством дополнительной обработки.HttpHandler чистый и легкий.Он имеет только те функции, которые вы реализуете.

1 голос
/ 18 августа 2010

Помните, что когда ваша .aspx-страница компилируется, она превращается в класс, производный от System.Web.UI.Page, прямо или косвенно (путем наследования от класса «code-behind», который, в свою очередь, прямо или косвенно наследуется от Page.

Page реализует IHttpHandler, поэтому вы никогда не используете IHttpHandler.

И быстрое сканирование списка участников Page дает хороший ответ на этот вопрос. Многое происходит, и многое предлагается для создания классов (то есть для файлов .aspx и для кода). И это еще до того, как мы рассмотрим способ анализа файлов .aspx, чтобы сделать написание кода с большим количеством «шаблонного» кода в них очень простым.

Вы потеряете все это, если напишите свой собственный обработчик. Потеря этого даст вам повышение производительности, но не так много, как вы думаете, многое не будет стоить, если его не использовать. В самом деле, если вы потеряете то, что вам нужно, ваши собственные способы вернуть его могут оказаться менее эффективными.

Если естественным способом написания рассматриваемого обработчика было бы то, чтобы все происходило прямо или косвенно (вызов метода) из одного обработчика событий в вашем коде и с пустым .aspx, тогда может быть понятнее вместо этого напишите это как обработчик, в этом случае сделайте. В противном случае вы хотите придерживаться файла .aspx.

0 голосов
/ 18 августа 2010

В зависимости от того, что делает страница / обработчик, у меня было увеличение производительности на 5-15% при использовании простых обработчиков вместо страниц - они часто являются хорошим выбором для генерации изображений, json и т. Д., Обработки фоновых задач из запросов ajaxили делать такие вещи, как регистрация посетителей из запросов изображений.

Обработчики немного болезненны, если вы пишете много html - вероятность ошибок при построении строк html часто перевешивает преимущества производительности.

Одна существенная вещь, которую вы теряетес помощью обработчика можно легко и просто кэшировать с объявлением о выходе кэша - вы, конечно, можете подключить его программно, но я обнаружил, что aspnet обычно лучше справляется с управлением кэшем, чем все, что я пишу быстро.

0 голосов
/ 18 августа 2010

Под .aspx вы действительно имеете в виду экземпляр System.Web.UI.Page, который, как вы можете видеть в метаинформации для этого класса, является реализацией IHttpHandler - другими словами (грубо говоря), экземпляра страницы является HttpHandler (это скорее точка), а также целый ряд вещей, которые дают ему поведение страницы.

Таким образом, разница в том, что с помощью Page вы можете использовать все, что он вам дает (представление состояния, контроль, жизненный цикл и т. Д.), За счет необходимости иметь все эти накладные расходы.Независимо от того, что вам нужно или нет, вы пишете свою собственную реализацию, где вы можете сделать ее настолько легкой и подходящей для конкретной цели, сколько захотите, написав все самостоятельно.

Поэтому HttpHandler особенно подходит, когда вы не заинтересованы в поддержке страницы, потому что вы не предоставляете семантический отклик страницы - почти наверняка ошибка в предоставлении XML, JSON, изображений или чего-либо, кроме стиля HTMLразметка со страницей.

На практике я выбираю третий вариант - MVC - большую часть времени:)

...