Beschleunigung von Formularen
Wenn Sie ein Formular entwerfen, das hauptsächlich auf Serverdaten basiert, sollten Sie eine Vorgehensweise wählen, die möglichst wenig Aufwand verursacht, um maximale Leistungsfähigkeit zu erreichen. Ermitteln Sie, welche Daten und Elemente benötigt werden, und senden Sie die zugehörigen Anweisungen erst an den Server, wenn der Benutzer dazu auffordert. Jedes Abrufen von Daten vom Server erfordert Verarbeitungszeit und verursacht Netzverkehr. Mit folgenden Maßnahmen erreichen Sie, dass Ihre Formulare möglichst wenig Daten abrufen:
- Rufen Sie so wenig Recordsets ab wie möglich. Verwenden Sie z. B. einen Filter oder eine Abfrage, um die Anzahl der abzurufenden Recordsets zu verringern. Sie sollten sich allerdings vergewissern, ob der Server alle von Ihnen formulierten Beschränkungen verarbeiten kann.
- Verwenden Sie in Ansichten, die Ihren Formularen zugrunde liegen, möglichst wenige Remotefelder.
- Verwenden Sie in einem Formularsatz möglichst wenige Formulare, die auf Remoteansichten zugreifen. Wenn Sie einen Formularsatz öffnen, werden alle Formulare des Formularsatzes geöffnet und, sofern möglich, mit Daten aufgefüllt. Verkürzen Sie die Zeit, die ein Formularsatz zum Laden benötigt, indem Sie die Anzahl der Formulare im Formularsatz einschränken. Dies gilt insbesondere für Formulare, die eine Verbindung zu einem Server herstellen und Remotedaten abrufen müssen.
- Verwenden Sie möglichst wenige gebundene Steuerelemente, die auf Remotedaten zugreifen. Jedes Kombinationsfeld, Listenfeld und Datenraster, das an eine Remotetabelle oder -Abfrage gebunden ist, löst eine eigene Abfrage an den Server aus, wenn das Formular geöffnet wird. Sie sollten weder Steuerelemente einsetzen, die Gesamtsummen enthalten, noch Listenfelder oder Kombinationsfelder, deren Elemente aus vielen Datensätzen stammen.
- Müssen Benutzer mehrere Datenmengen miteinander vergleichen, sollten Sie in Erwägung ziehen, die vom Server zurückgegebenen Daten in temporären lokalen Tabellen zu speichern. Stellen Sie ein Formular bereit, mit dem ein Benutzer Zugang zu den zuvor gespeicherten Daten hat oder eine weitere Abfrage ausführen kann.
Lokales Speichern von Nachschlagetabellen
Häufig enthält eine Anwendung mehrere Formulare, die auf dieselbe Remotetabelle zugreifen. Wenn sich die in der Tabelle befindlichen Daten nur selten ändern, können Sie den Ladevorgang des Formulars beschleunigen und die Serverbelastung verringern, indem Sie eine der folgenden Vorgehensweisen wählen:
- Speichern Sie Tabellen, deren Inhalte sich nicht ändern und die nicht sehr umfangreich sind (z.** **B. die Namen und Abkürzungen der Länder Ihres Staates) in der lokalen Visual FoxPro-Datenbank. Wird eine solche Tabelle in Abfragen oder Ansichten mit Remotetabellen verknüpft, sollten Sie dafür sorgen, dass auch auf dem Server eine Kopie dieser Tabelle vorliegt. Dadurch vermeiden Sie das Verknüpfen von lokalen Daten und Remotedaten.
- Speichern Sie Tabellen, deren Inhalte sich nur selten ändern (z. B. eine Liste der Firmenfahrzeuge), sowohl auf dem Server als auch in der lokalen Datenbank. Ermöglichen Sie es dem Benutzer, die Tabelle herunterzuladen, wenn sich die Daten geändert haben.
- Speichern Sie Tabellen, deren Inhalte sich zwar nicht täglich, aber relativ häufig ändern (z. B. die Liste der Mitarbeiter einer kleinen Firma oder Abteilung), sowohl auf dem Server als auch in der lokalen Datenbank. Ihre Anwendung sollte jedes Mal, wenn sie gestartet wird, die lokalen Versionen der Tabellen aktualisieren. Zwar dauert ein Startvorgang der Anwendung dann länger, aber die Abfragen werden schneller verarbeitet, wenn die Anwendung ausgeführt wird.
Anzeigen von Feldern nur auf Anforderung
Felder, die viel Zeit benötigen, Daten vom Server abzurufen (z. B. Memo- oder Objektfelder), sollten Sie nur anzeigen, wenn sie angefordert werden. Sie können dazu wie folgt vorgehen:
Basiert Ihr Formular auf einer Ansicht, können Sie Memo- oder Objektfelder auf einer anderen Formularseite anordnen, die zunächst nicht angezeigt wird. Fügen Sie eine Bezeichnung zum Formular hinzu, z. B. "Drücken Sie BILD-AB, um die Hinweise und Bilder anzuzeigen", um dem Benutzer mitzuteilen, wie die Informationen der Memo- oder Objektfelder angezeigt werden können. Stellen Sie die FetchMemo-Eigenschaft der Ansicht oder des Cursors auf Falsch (.F.) ein, damit Visual FoxPro die Inhalte der Memo- oder Objektfelder erst abruft, wenn sie auf dem Bildschirm angezeigt werden sollen.
Stellen Sie die Visible-Eigenschaften der Steuerelemente, die an Memo- oder Objektfelder gebunden sind, auf Falsch (.F.) ein. Fügen Sie eine Umschaltfläche oder Befehlsschaltfläche hinzu, mit der der Benutzer die Eigenschaft auf Wahr (.T.) einstellen kann, um die Inhalte der Steuerelemente anzuzeigen.
Zeigen Sie die wichtigsten Felder in einem übergeordneten Formular an. Platzieren Sie auf diesem Formular eine Schaltfläche, die z. B. mit Weitere Informationen beschriftet ist und die ein anderes Formular öffnet, das weitere Felder enthält. Formulieren Sie für das zweite Formular eine Ansicht, die über das Primärschlüsselfeld des übergeordneten Formulars parametrisiert ist. Angenommen, Sie haben ein übergeordnetes Formular, das auf einer Ansicht basiert, deren SQL-Anweisung SELECT wie folgt aussieht:
SELECT customer_id, company_name, address, city, region, country FROM customers
Im vorherigen Formular ist
cust_id
anthisform.txtCust_id
gebunden. Sie können das zweite Formular an die folgende Ansicht binden, die nur dann verwendet wird, wenn der Benutzer die Schaltfläche Weitere Informationen wählt:SELECT orders.order_id, orders.order_date, orders.shipper_id, ; employee.emp_id, employee.last_name, employee.first_name ; FROM orders, employee ; WHERE orders.cust_id = ?THISFORM.txtCust_id ; AND orders.employee_id = employees.emp_id
Siehe auch
Beschleunigung von Abfragen und Ansichten | Leistungsverbesserung bei Aktualisierungs- und Löschvorgängen | Client/Server-Leistungsoptimierung | Implementieren einer Client/Server-Anwendung