11 Stimmen

Seitenansichtszähler wie bei StackOverFlow

Was ist der beste Weg, um die Seite Ansicht Zähler wie die, die sie haben hier auf der Website, wo jede Frage hat eine "Views" Zähler?

Berücksichtigung von Leistungs- und Skalierbarkeitsfragen.

11voto

Joel Coehoorn Punkte 377088

Ich habe zwei Beobachtungen auf dem Stackoverflow-Ansichtenzähler gemacht:

  • Es gibt eine link Element in der Kopfzeile, das die Aktualisierung der Zählung auslöst. Für diese Frage sieht das Markup wie folgt aus:
    <link href="http://stackoverflow.com/questions/246919/increment-view-count" type="text/css" rel="stylesheet" />
    Ich könnte mir vorstellen, dass man die URL anklicken kann, um den Viewcount zu aktualisieren, ohne die Seite tatsächlich anzusehen, aber ich habe es nicht ausprobiert.

  • Ich hatte eine Benutzerstimmen-Ticket Die Antwort von Jeff wies darauf hin, dass die Ansichten nicht zweimal hintereinander von derselben IP aus erhöht werden.

8voto

Bob Fanger Punkte 26489

Der von mir optimierte Zähler funktioniert folgendermaßen:

UPDATE page_views SET counter = counter + 1 WHERE page_id = x
if (affected_rows == 0 ) {
   INSERT INTO page_views (page_id, counter) VALUES (x, 1)
}

Auf diese Weise führen Sie 2 Abfragen für die erste Ansicht aus, für die anderen Ansichten ist nur 1 Abfrage erforderlich.

6voto

François Punkte 927

Ein effizienter Weg kann sein: Speichern Sie Ihre Zähler im Anwendungsobjekt, Sie können sie regelmäßig und beim Schließen der Anwendung in einer Datei/DB aufbewahren.

4voto

Luke101 Punkte 59069

Anstatt jedes Mal, wenn die Datenbank aufgerufen wird, einen Datenbankaufruf zu machen, würde ich einen Zähler mit einem Cache-Objekt inkrementieren und je nachdem, wie viele Besuche Sie jeden Tag auf Ihrer Website erhalten, die Seitenzugriffe bei jedem 100sten Zugriff auf die Website an die Datenbank senden. Das ist viel schneller, als die Datenbank bei jedem einzelnen Zugriff zu aktualisieren.

Eine andere Lösung ist die Analyse der IIS-Protokolldatei und die Aktualisierung der Treffer alle 30 Minuten durch einen Windows-Dienst. Dies ist, was ich implementiert habe und es funktioniert Wunder.

0voto

Zote Punkte 5235

Sie können einen IHttpHandler implementieren, um dies zu tun.

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