Каковы последние и самые большие способы переместить ViewState в конец страницы
Это может быть сделано в IHttpHandler, который может быть указан в web.config для прерывания запросов к "*.aspx"?
<httpHandlers>
<add verb="*" path="*.aspx" type="MyApp.OptimizedPageHandler" />
<httpHandlers>
Другие опции состоят в том, что это могло быть сделано в IHttpModule, но это не столь производительно, как он прервет все запросы.
Также в этом можно было выполнить класс, происходящий из Страницы или MasterPage-класса, но это не является столь же модульным.
Там какие-либо потери производительности к этому?
Проведя небольшое исследование, я собрал эту запись в блоге .
Я решил проблему, создав HttpModule и применив фильтр ответа , который изменяет вывод страницы и перемещает ViewState в нижнюю часть страницы. форма.
public class ViewStateSeoHttpModule : IHttpModule {
public void Init(HttpApplication context) {
context.BeginRequest += new EventHandler(BeginRequest);
}
private void BeginRequest(object sender, EventArgs e) {
HttpApplication application = sender as HttpApplication;
bool isAspNetPageRequest = GetIsAspNetPageRequest(application);
if(isAspNetPageRequest) {
application.Context.Response.Filter =
new ViewStateSeoFilter(application.Context.Response.Filter);
}
}
private bool GetIsAspNetPageRequest(HttpApplication application) {
bool isAspNetPageRequest = application.Context.Handler is System.Web.UI.Page;
return isAspNetPageRequest;
}
// [...]
Вы можете контролировать, как и где данные ViewState загружаются и сохраняются, создавая собственную реализацию класса PageStatePersister
. Затем создайте базовый класс для всех ваших страниц ASPX
и переопределите метод PageStatePersister
, чтобы вернуть свою собственную реализацию. Затем это может подключиться к любым событиям страницы, которые вы хотите сохранить в состоянии просмотра в соответствии с вашими требованиями.
Я сомневаюсь, что это того стоит. Вы без надобности храните тонны данных в ViewState
? Возможно, вы сможете получить больше преимуществ, просто меньше используя ViewState
или отключив его для некоторых элементов управления, а не просто перемещая его в другое место на HTML-странице.
Расширение класса Page дает вам наибольший контроль над рендерингом страницы. Если вы хотите переместить ViewState в нижнюю часть данной страницы, используйте ваш пользовательский базовый класс для этой страницы. Если в этом нет необходимости, используйте класс Page.
Единственный риск производительности при использовании производных от класса Page заключается в реализации переопределенных методов. Если только вы не делаете что-то особенно неэффективное, ощутимого падения производительности быть не должно.