Social Media
Foren
QA UserCounter
|
QA UserCounter
"Zählt die Besucher und die Anzahl der aufgerufenen Seiten. (100% Fertig)
Ist ein reines Daten- und Erfassungsplugin."
Repro: http://code.contentlion.de/Plugin+UserCounter/
Mein Feedback:
- Keine Text-Dateien in Plugins. Dafür gibt es die Beschreibung in der Gallerie
- die package.xml soll aktuell noch nicht von euch geändert werden
- Du hast gar keine Indizies in den Tabellen angelegt. Wenn eine Seite viele besuche hat wird die Analyse langsam
- Auch hier bitte ON DUPLICATE KEY anwenden, denn das SELECT wird durch neue Einträge immer langsamer werden und somit die ganze seite langsamer. Kannst du dir sparen durch ON DUPLICATE KEY
- PHPDocs Fehlen
- Analyse an Hand der IP ist nicht so toll. In Firmen-Netzwerken oder Schulen gibt es oft die gleiche IP, dann wird immer nur ein Visit gezählt. Genausogut kannst du am nächsten Tag eine neue IP bekommen und wirst mehrfach gezählt. Nimm als ID am besten die, die das Tracker-Plugin zurück liefert, die ist extra fürs Tracking gedacht.
Ist ein reines Daten- und Erfassungsplugin."
Repro: http://code.contentlion.de/Plugin+UserCounter/
Mein Feedback:
- Keine Text-Dateien in Plugins. Dafür gibt es die Beschreibung in der Gallerie
- die package.xml soll aktuell noch nicht von euch geändert werden
- Du hast gar keine Indizies in den Tabellen angelegt. Wenn eine Seite viele besuche hat wird die Analyse langsam
- Auch hier bitte ON DUPLICATE KEY anwenden, denn das SELECT wird durch neue Einträge immer langsamer werden und somit die ganze seite langsamer. Kannst du dir sparen durch ON DUPLICATE KEY
- PHPDocs Fehlen
- Analyse an Hand der IP ist nicht so toll. In Firmen-Netzwerken oder Schulen gibt es oft die gleiche IP, dann wird immer nur ein Visit gezählt. Genausogut kannst du am nächsten Tag eine neue IP bekommen und wirst mehrfach gezählt. Nimm als ID am besten die, die das Tracker-Plugin zurück liefert, die ist extra fürs Tracking gedacht.
|
Ist keine Session, die dauert nur 30 Minuten. Wird über nen Cookie gemacht. Evtl. kann ich das später noch um EverCookies erweitern, dann bekommt man das so schnell auch nicht raus.
auch Firmen-Netzwerke haben in der Regel die selbe IP. Das heißt, Tracking im B2B-Bereich wird schwieriger. Ist auch gar nicht so schwer, anstatt des auslesens der IP musst nur eine andere Zeile rein machen.
auch Firmen-Netzwerke haben in der Regel die selbe IP. Das heißt, Tracking im B2B-Bereich wird schwieriger. Ist auch gar nicht so schwer, anstatt des auslesens der IP musst nur eine andere Zeile rein machen.
Naja, das gibt es schon.
Aber mein Plugin soll ja lediglich die User und die aufgerufenen Seiten zählen, damit andere Plugins die auswerten können. Analytics ist so ne Sache, da bekommt Google wieder alle Daten gefüttert...
EDIT:
Mir ist noch was eingefallen.
Damit könnte man sogar nen Mini-Plugin schreiben, das DDOS-Angriffe verhindert / ablenkt.

Aber mein Plugin soll ja lediglich die User und die aufgerufenen Seiten zählen, damit andere Plugins die auswerten können. Analytics ist so ne Sache, da bekommt Google wieder alle Daten gefüttert...

EDIT:
Mir ist noch was eingefallen.

Damit könnte man sogar nen Mini-Plugin schreiben, das DDOS-Angriffe verhindert / ablenkt.


|
So spontan noch ein paar kleinigkeiten.
- An einer Stelle hast "@return MySqli[] pages " angegeben, gibts ja keine MySQLi-Objekte zurück (das sind die Datenbanken selbst) sondern stdClasses. kannst einfcah "@return array" drauß machen.
- Die Tracker-ID am besten auch escapen (sicher ist sicher, dürfte im Normalfall aber egal sein)
- Wenn der Template-Ordner leer ist, kannst ihn auch löschen
- Konstanten bitte mit Namespaces (events/load.php)
Werd mir das Tracker-Plugin beim Testen dann nochmal anschauen.
- An einer Stelle hast "@return MySqli[] pages " angegeben, gibts ja keine MySQLi-Objekte zurück (das sind die Datenbanken selbst) sondern stdClasses. kannst einfcah "@return array" drauß machen.
- Die Tracker-ID am besten auch escapen (sicher ist sicher, dürfte im Normalfall aber egal sein)
- Wenn der Template-Ordner leer ist, kannst ihn auch löschen
- Konstanten bitte mit Namespaces (events/load.php)
Werd mir das Tracker-Plugin beim Testen dann nochmal anschauen.
|
Der Tracker liefert bei mir die gleichen IDs zurück.
Aber: Du hast den Primary Key in der Tabelle falsch gesetzt, bekomme jedes Mal nen neuen Eintrag. Wenn du nach Datum gruppierst, solltest du bei date auch DATE als Spaltentyp nehmen, dann dürfte das Problem nicht mehr auftauchen.
Unschöne Namen, mit Verbesserungsvorgschläge:
- cl_plugin_user_counter => cl_plugin_usercounter (namespaces)
- cl_plugin_user_counter_pages => cl_plugin_usercounter_pages (namespaces)
- show_pages => shown_pages oder noch besser impressions
- first_date => timestamp_first_visit
- reload => requests
Dann hast du mein Feedback von oben noch gar nicht komplett umgesetzt.
Hier nochmal Stichpunkte, Details stehen ja oben
- Indizies
- ON DUPLICATE KEY
Aber: Du hast den Primary Key in der Tabelle falsch gesetzt, bekomme jedes Mal nen neuen Eintrag. Wenn du nach Datum gruppierst, solltest du bei date auch DATE als Spaltentyp nehmen, dann dürfte das Problem nicht mehr auftauchen.
Unschöne Namen, mit Verbesserungsvorgschläge:
- cl_plugin_user_counter => cl_plugin_usercounter (namespaces)
- cl_plugin_user_counter_pages => cl_plugin_usercounter_pages (namespaces)
- show_pages => shown_pages oder noch besser impressions
- first_date => timestamp_first_visit
- reload => requests
Dann hast du mein Feedback von oben noch gar nicht komplett umgesetzt.
Hier nochmal Stichpunkte, Details stehen ja oben
- Indizies
- ON DUPLICATE KEY
Nee, lag net am Timestamp, sondern daran, dass in der einen Zeile noch mit der IP gearbeitet wurde. 
@Date:
Dadurch ich später auch die Besucher der letzten Stunde etc. auswerten möchte, kann ich da kein Date nehmen.
Funktioniert aber jetzt trotzdem alles!
Indiezes sind doch vorhanden?
@ON DUPLICATE KEY:
Geht ja nicht, da ich nen Timestamp nehme.
Den Rest hab ich behoben.

@Date:
Dadurch ich später auch die Besucher der letzten Stunde etc. auswerten möchte, kann ich da kein Date nehmen.

Funktioniert aber jetzt trotzdem alles!

Indiezes sind doch vorhanden?

@ON DUPLICATE KEY:
Geht ja nicht, da ich nen Timestamp nehme.

Den Rest hab ich behoben.

|
Ne, Indizies sind noch nicht drin (nur Primary Keys). Mach mal noch nen Index auf date und einen auf first_date. Und bei der pages einen auf Page/Date
@ON DUPLICATE KEY: Wieso nicht? du musst beim ON DUPLICATE KEY nicht alle Spalten befüllen.
Zum Date: Möchtest du denn für jede Sekunde einen Eintrag haben?
@ON DUPLICATE KEY: Wieso nicht? du musst beim ON DUPLICATE KEY nicht alle Spalten befüllen.
Zum Date: Möchtest du denn für jede Sekunde einen Eintrag haben?
Ne, Indizies sind noch nicht drin (nur Primary Keys). Mach mal noch nen Index auf date und einen auf first_date. Und bei der pages einen auf Page/Date
@ON DUPLICATE KEY: Wieso nicht? du musst beim ON DUPLICATE KEY nicht alle Spalten befüllen.
Zum Date: Möchtest du denn für jede Sekunde einen Eintrag haben?
Ach so, ok.

@Duplicate Key:
Naja, weil der Wert kommt ja dann nie "doppelt" vor, oder?
@Date:
Nein, aber für jede Minute.

|
Wenn er nicht doppelt vorkommen kann, wieso machst du dann einmal ein INSERT und einmal ein Update?
Will mir halt da das Select sparen, weil die Tabelle bei gutem Traffic richtig groß wird und die ganze Seite ausbremsen wird. Ist eigentlich ein klarer Fall für ON DUPLICATE KEY die Stelle. Da kannst den Wert auch um einen erhöhen.
Und wenn du auf Minuten gehst, passen die Selects auch noch nicht ;-)
Will mir halt da das Select sparen, weil die Tabelle bei gutem Traffic richtig groß wird und die ganze Seite ausbremsen wird. Ist eigentlich ein klarer Fall für ON DUPLICATE KEY die Stelle. Da kannst den Wert auch um einen erhöhen.
Und wenn du auf Minuten gehst, passen die Selects auch noch nicht ;-)
|
INSERT INTO {'dbprefix'}plugin_usercounter
SET tracker_id = '".$tracker_id."',
`date` = NOW(),
impressions = 1,
timestamp_first_visit = NOW()
ON DUPLICATE KEY UPDATE UPDATE `date` = NOW(),
impressions = impressions + 1.
Das mit dem date verstehe ich noch nicht so recht. Kannst du mal erklären, was du genau damit bezwecken willst? Am besten mit Beispielen, damit es auch ein Dummie wie ich versteht ;-)
SET tracker_id = '".$tracker_id."',
`date` = NOW(),
impressions = 1,
timestamp_first_visit = NOW()
ON DUPLICATE KEY UPDATE UPDATE `date` = NOW(),
impressions = impressions + 1.
Das mit dem date verstehe ich noch nicht so recht. Kannst du mal erklären, was du genau damit bezwecken willst? Am besten mit Beispielen, damit es auch ein Dummie wie ich versteht ;-)
Naja, ich will anhand des Timestamps z.B. die Seiten ausgeben, die in der letzten Stunde besucht wurden. 
Außerdem kann man damit ermitteln, wie viele Seiten ein Besucher der letzten Stunde durchschnittlich angeschaut hat.
(Ist mir gerade so aufgefallen
)

![]() |
PHP-Quelltext |
1 |
$pages = DataBase::Current()->ReadRows("SELECT bla bla FROM `contentlion_plugin:_pages` WHERE DATE(`date`) = DATE(NOW) AND `date` < INTERVAL(NOW(), 1 Hour) ORDER BY `impressions`");
|
Außerdem kann man damit ermitteln, wie viele Seiten ein Besucher der letzten Stunde durchschnittlich angeschaut hat.



Ähnliche Themen
-
Online Status »
-
QA Onlinestatus (3. Mai 2013, 21:54)
-
Projekt und Plugin Vorstellung »
-
Benötigte PHP-Versionen für Plugins (3. April 2013, 20:29)
-
QR Code Generator »
-
QR-Code Generator in neuer Version (27. Januar 2013, 11:55)
-
Erweiterungen »
-
Besucherzähler (24. Juli 2012, 18:29)