Tipps und Tricks

Frage (348) zu VB(8).NET (VS 2005), VB(9).NET (VS 2008), ASP.NET

Wie kann man die Effektivität der Abarbeitung eine ASP.NET-Seite verbessern?

Antwort:

Es gibt eine Reihe von Möglichkeiten, die Antwortzeit einer Anwendung zu verbessern.

1. Verwendung von AJAX

2. Verwendung von Silverlight

3. Verwendung von Seitenscripts

3.1. implizite Seitenscripts.

ASP.NET fügt selbständig Scripte ein, z.B. für die Focus-methode:

[vb]

TextBox1.Focus

[/vb]

3.2 Nutzung des ClientScript-Objektes

Mit dem Code in einer ASP.NET-Seite können JavaScriptroutinen eingebettet werden

[vb]

<%@ Page Language="VB" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)

If Not Page.IsPostBack Then

Dim sScript As String = "alert('Bitte bestätigen. ...');"

ClientScript.RegisterStartupScript(Me.GetType(), "Meldung", sScript, True)

End If

End Sub

</script>

<html xmlns="http://www.w3.org/1999/xhtml">

<head runat="server">

<title></title>

</head>

<body>

<form id="form1" runat="server">

<div>

<asp:Label ID="lblResult" runat="server" Text="s. MessageBox"></asp:Label>

</div>

</form>

</body>

</html>

[/vb]

3.3. Out-of-Band Rückrufe aus der Seite

Im folgenden Beispiel wird gezeigt, wie aus einem JavaScript im Client ein CallBack im Server aufgerufen wird, der wiederum ein Ergebnis an eine JavaScript-Routine an den Client übergibt.

[vb]

<%@ Page Language="VB" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<%@ Implements interface="System.Web.UI.ICallbackEventHandler" %>

<script runat="server">

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

Dim cbRef As String = ClientScript.GetCallbackEventReference(Me, "arg", "ReceiveString", "context")

Dim cbScript As String = "function GetResult(arg, context) {" & cbRef & "; }"

ClientScript.RegisterClientScriptBlock(Me.GetType(), "GetResult", cbScript, True)

End Sub

Private cbresult As String

Public Sub RaiseCallbackEvent(ByVal eventArgument As String) Implements System.Web.UI.ICallbackEventHandler.RaiseCallbackEvent

cbresult = String.Format("In RaiseCallbackEvent als Parameter empfangen: {0}", eventArgument)

End Sub

Public Function GetCallbackResult() As String Implements System.Web.UI.ICallbackEventHandler.GetCallbackResult

Return cbresult

End Function

</script>

<html xmlns="http://www.w3.org/1999/xhtml">

<head runat="server">

<title></title>

</head>

<body>

<form id="form1" runat="server">

<div>

<input id="Button1" type="button" value="Call back for result" onclick="return GetResult('test get result');" /><br />

<asp:Label ID="lblResult" runat="server" Text="CallBack Result:"></asp:Label>

</div>

</form>

</body>

<script type="text/javascript">

function ReceiveString(Parameter) {

document.all("lblResult").innerHTML = "Empfangen wurde: " + Parameter;

}

</script>

</html>

[/vb]

4. Zwischenspeicherung von Seiten

4.1. gesamte Seite zwischenspeichern

Page-Anweisung mit OutputCache ergänzen für eine Seite oder in der web.config für alle Seiten.

4.2. parametrierte Zwischenspeicherung

4.3. Verhinderung von Zwischenspeicherung bestimmter Teile der Seite

4.4. Zwischenspeicherung un Web-Benutzersteuerelementen

5. asynchrone Verarbeitung in Web-Seiten

Für die Beschleunigung der Arbeit können asynchrone Abläufe gestartet wertden, auf deren Ende erst der renderer warten muss. Zwischenzeitlich können andere Aktivitäten zum Ausfbau der Seite ausgeführt werden. Wenn die genutzte Klasse keine asynchronen Methodenaufrufe unterstützt, können diese Aufrufe mittels Invoke realisiert werden.

Zur Demo kann das nachfolgende Beispiel dienen:. Im Trace können die Abarbeitungsfolgen ausgewertet werden.

[vb]

<%@ Page Trace="true" Async="true" Language="VB" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)

Trace.TraceMode = TraceMode.SortByTime

Trace.Warn("Page_Load wird gestartet")

Dim bh As New BeginEventHandler(AddressOf Me.BeginMethod)

Dim eh As New EndEventHandler(AddressOf Me.EndMethod)

AddOnPreRenderCompleteAsync(bh, eh)

Threading.Thread.Sleep(1000)

Trace.Warn("Page_Load ist beendet")

End Sub

' a delegate that points to TestMethod

Delegate Function TestMethodDelegate(ByVal par As Integer) As String

Dim testMethodDeleg As New TestMethodDelegate(AddressOf TestMethod)

Function BeginMethod(ByVal src As Object, ByVal e As EventArgs, ByVal cb As AsyncCallback, ByVal state As Object) As IAsyncResult

' Create a delegate that points to target procedure.

Trace.Warn("TestMethod wird gestartet")

Return testMethodDeleg.BeginInvoke(2000, cb, state)

End Function

Sub EndMethod(ByVal ar As IAsyncResult)

lblResult.Text = testMethodDeleg.EndInvoke(ar)

Trace.Warn("TestMethod ist beendet")

End Sub

Private Function TestMethod(ByVal par As Integer) As String

Threading.Thread.Sleep(par)

Return "TestMethod ended"

End Function

</script>

<html xmlns="http://www.w3.org/1999/xhtml">

<head runat="server">

<title></title>

</head>

<body>

<form id="form1" runat="server">

<div>

<asp:Label ID="lblResult" runat="server" Text="Label"></asp:Label>

</div>

</form>

</body>

</html>

[/vb]

Stand des Beitrages: 15.12.09 07:44, zuletzt geändert: 28.01.09 09:24



Bitte wählen sie den Themenbereich aus
Bitte geben sie einen Suchbegriff ein

Die hier dargestellten Tipps und Tricks sind das Ergebnis selbst ersteller Lösungsvarianten, die für Projekte und Schulungen erarbeitet wurden.