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\'c3\'a4tigen. ...');"
      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.