2009-04-11 10 views
1

Ich baute ein Online-Nachrichtenportal, vor dem für mich gut funktioniert, aber einige sagen, die Homepage ist ein wenig langsam. Wenn ich daran denke, sehe ich einen Grund, warum das so ist.Datenzugriff ASP.NET

Die Homepage der Website zeigt

  1. Schlagzeilen
  2. Spot-Nachrichten (sub-Schlagzeilen
  3. Spots mit Bildern
  4. Meistgelesene News (als Titel)
  5. den meisten Kommentaren News (als Titel)
  6. 5 Nachrichtentitel aus jeder Nachrichtenkategorie (11 insgesamt zB Sport, Wirtschaft, Lokal, Gesundheit usw. .)

jetzt sind jede dieser separaten Abfragen an die db. Ich habe TableAdapters Datasets und Databases (Standard-Datenzugriffsszenarien), also rufe ich für Überschriften die Geschäftslogik in meiner Nachrichtenklasse auf, die die Databases durch den Tableadapter zurückgibt. Von da an verwende ich entweder die Datentabelle, indem ich sie einfach an die Steuerelemente anbinde oder (meistens) wandelt das Objekt sie in eine Liste (von Nachrichten) um und ich nehme sie von dort auf.

Tun Sie dies für jeden der oben genannten scheint jedoch gut zu funktionieren. Zumindest ist es keine große Last. Aber ich frage mich, ob es einen besseren Weg gibt.

Zum Beispiel ist das Projekt, das ich oben beschrieben habe, eine hochdynamische Website, Nachrichten werden eingefügt, wenn sie 24 Stunden non-stop von Agenturen eintreffen. In diesem Fall klingt Caching vielleicht nicht gut. aber andererseits weiß ich, dass es ein ähnliches Projekt für eine lokale Zeitung gibt. Die Seite wird nur einmal am Tag aktualisiert. In diesem Fall: Kann ich nur eine Abfrage ausführen, die eine Datentabelle zurückgeben würde, die alle für heute eingefügten Nachrichten enthält, diese Datentabelle abfragen und Überschriften, Punkte und andere Elemente an die entsprechenden Stellen auf der Site setzen? Oder gibt es eine bessere Alternative? Ich wandle nur, wie andere Leute ähnliche Aufgaben auf die effizienteste Weise ausführen.

Antwort

2

Ich glaube, Sie Firebug verwenden sollten, um herauszufinden, welche Elemente Zeit nehmen, zu laden. Manchmal können große Bilder die Show ruinieren (und die Größe des Bildes auf dem Bildschirm ist nicht immer relativ zur Download-Größe).

Zweitens könnte man die Yahoo YSlow Firefox-Plugin herunterladen und untersuchen, wenn Sie irgendwelche Verlangsamung Skripte haben.

Aber Firebug sollten Sie die beste Bewertung geben. Nach dem Laden von Firebug klicken Sie auf die Registerkarte "Net", um die Ladezeit jedes Elements auf der Seite anzuzeigen.

+0

+1 für die Verwendung von Firebug und YSlow für clientseitige Profilerstellung. – Anthony

2

Wenn Sie schlechte Leistung haben, ist Ihr erster Schritt nicht, herum zu misten. Profilieren Sie Ihren Code. Finden Sie genau heraus, warum es langsam ist. Verlangsamt sich die Übertragung der Seite, wird sie gerendert oder wird die Seite tatsächlich dynamisch generiert? Wird eine einzelne Abfrage zu lange dauern?

Finden Sie genau heraus, wo der Flaschenhals ist und greifen Sie das Problem in seinem Kern an.

Caching ist auch eine sehr gute Idee, selbst wenn der Inhalt ziemlich schnell aktualisiert wird. Solange Ihr Caching-Mechanismus intelligent ist, sparen Sie viel Zeit beim Generieren. Im Fall eines Nachrichtenportals oder eines Blogs im Gegensatz zu einem Forum wird Ihre Leistung mit einem Caching-System wahrscheinlich erheblich verbessert.

1

Wenn Sie feststellen, dass Ihre Verzögerungen von der DB kommen, überprüfen Sie Ihre Tabellen, stellen Sie sicher, dass sie ordnungsgemäß indiziert, gruppiert oder was immer Sie benötigen abhängig von der Menge der Daten in der Tabelle. Wenn Sie dynamische Abfragen verwenden, sollten Sie stattdessen gespeicherte Prozeduren verwenden.

Wenn Sie mehrere Abfragen in einer Datenbankanforderung erhalten möchten, können Sie. Da Sie zunächst keine Daten anzeigen, bis alle Abfragen abgeschlossen sind, sparen Sie zumindest bei anderen Problemen Zeit für den erneuten Zugriff auf die Datenbank für jede einzelne Abfrage. DataSets enthalten eine Sammlung von Tabellen, die von mehreren Abfragen in derselben Anfrage generiert werden können.

ASP.NET bietet Ihnen bereits einen hübschen Mechanismus zum Zwischenspeichern (HttpContext.Cache), den Sie umschließen können und Ihnen die Verwendung erleichtern. Da Sie eine Lebensdauer für Ihre zwischengespeicherten Objekte festlegen können, müssen Sie sich nicht wirklich sorgen, dass Artikel und Titel nicht auf dem neuesten Stand sind.

Wenn Sie WebForms für diese Website verwenden, deaktivieren Sie Viewstate für die Kontrollen, die nicht wirklich brauchen nur sie die Seite zu machen, dass etwas schneller zu laden. Ganz zu schweigen von vielen anderen Optimierungen und Änderungen, um eine Seite schneller zu laden (Gzippen, Skripte minimieren usw.)

Noch bevor Sie das tun, tun Sie als Anthony suggested und profilieren Sie Ihren Code. Finde heraus, was das wahre Problem ist.