10 Stimmen

Verschieben von ViewState aus der Seite heraus?

Wir versuchen, die Seitenlast so weit wie möglich zu verringern. Da ViewState manchmal bis zu 100k der Seite anschwellen kann, würde ich es gerne komplett eliminieren.

Ich würde gerne einige Techniken hören, die andere Leute verwendet haben, um ViewState zu einem benutzerdefinierten Anbieter zu verschieben.

Dennoch gibt es ein paar Vorbehalte:

  • Wir haben im Durchschnitt 2 Millionen Besucher pro Stunde.
  • Aus diesem Grund sind Datenbanklesungen ein ernsthaftes Problem in der Leistung, so dass ich nicht ViewState in der Datenbank speichern möchte.
  • Wir sind auch hinter einem Load Balancer, so dass jede Lösung muss mit dem Benutzer Bouncing von Maschine zu Maschine pro Postback arbeiten.

Ideen?

0voto

Middletone Punkte 4166

Vielleicht habe ich in einem anderen Beitrag eine einfache Lösung für Sie. Es ist eine einfache Klasse, die Sie in Ihre Anwendung einbinden können, und ein paar Zeilen Code in der Asp.net-Seite selbst. Wenn Sie es mit einem verteilten Zwischenspeichersystem kombinieren, können Sie eine Menge Geld sparen, da Viewstate groß und kostspielig ist. Microsofts Velocity könnte ein gutes Produkt sein, um diese Methode ebenfalls einzusetzen. Wenn Sie es verwenden und eine Menge Geld sparen, würde ich mich über eine kleine Erwähnung freuen. Wenn Sie sich unsicher sind, lassen Sie es mich wissen und ich kann persönlich mit Ihnen sprechen.

Hier ist der Link zu meinem Code. Linktext

Wenn Sie sich Gedanken über die Skalierung machen, dann ist die Verwendung des Sitzungs-Tokens als eindeutiger Bezeichner oder die Speicherung des Zustands in der Sitzung mehr oder weniger garantiert, um in einem Webfarm-Szenario zu funktionieren.

0voto

Middletone Punkte 4166

Speichern Sie den Viewstate in einem Session-Objekt und verwenden Sie einen verteilten Cache oder State Service, um die Session getrennt von den We-Servern zu speichern, wie z.B. Microsofts Velocity.

0voto

ChickenMilkBomb Punkte 957

Ich weiß, dies ist ein wenig alt, aber ich habe für ein paar Tage auf einem opensource "virtuelle Appliance" mit Squid und ecap zu arbeiten:

1.) gzip 2.) ssl behandeln 3.) Ersetzen des Viewstate durch ein Token bei Anfrage/Antwort 4.) memcache für Objekt-Caching

Wie auch immer, es sieht ziemlich vielversprechend aus. Im Grunde würde es vor den Loadbalancern sitzen und sollte wirklich helfen, Client-Leistung. Scheint auch nicht sehr schwer einzurichten zu sein.

0voto

mcintyre321 Punkte 12488

Ich habe vor einiger Zeit darüber gebloggt - die Lösung finden Sie unter http://www.adverseconditionals.com/2008/06/storing-viewstate-in-memcached-ultimate.html

Dadurch können Sie den ViewState-Anbieter auf einen Ihrer Wahl ändern, ohne jede Ihrer Seitenklassen ändern zu müssen, indem Sie einen benutzerdefinierten PageAdapter verwenden. Ich habe den ViewState in memcached gespeichert. Im Nachhinein denke ich, dass es besser ist, ihn in einer Datenbank oder auf der Festplatte zu speichern - wir haben memcached sehr schnell voll gemacht. Es ist eine sehr reibungsarme Lösung.

0voto

Ashish Nangla Punkte 31

Es ist nicht nötig, etwas zu kaufen oder zu verkaufen, um die Blähungen zu beseitigen. Sie müssen nur den HiddenFieldPageStatePersister erweitern. Die 100-200KB des ViewState bleiben auf dem Server und senden stattdessen nur ein 62Byte-Token auf der Seite.

Hier finden Sie einen ausführlichen Artikel darüber, wie dies geschehen kann:

http://ashishnangla.com/2011/07/21/reducing-size-of-viewstate-in-asp-net-webforms-by-writing-a-custom-viewstate-provider-pagestatepersister-part-12/

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X