Facebook
Twitter
Google+
Kommentare
5

Projektwerkstatt: Journaling-Proxy

Die heutige Projektwerkstatt ist eigentlich erst gestern entstanden und natürlich aus einer Notwendigkeit heraus. Der Name klingt ein wenig hochgestochen, passt aber doch ganz gut. Vielleicht starten wir einfach mal mit dem Problem, vor dem ich gestern stand.

Viele der großen Webseiten benutzen den IVW Tracker, um Besucherzahlen zu messen und auch um sie an die offiziellen Stellen zu kommunizieren und somit Werbepreise und ähnliches festlegen zu können. Es ist also ein Zählpixel ähnlich wie der von google Analytics, der die Page Impressionen zählt. Diese Impressionen werden aber nicht gezählt, wie wir uns das vorstellen würden, sondern sie zählen die Klicks. Ein gelöstes Sudoku auf einer Webseite kann also gut und gerne 100 PIs produzieren.

Gehen wir mal davon aus, dass unser Sudoku in JavaScript oder Flash produziert wurde. Ich würde jetzt gerne einen Test schreiben, der prüft, ob auch alle Klicks richtig an IVW weitergeleitet werden, dabei will ich natürlich den JavaScript Code auf der Seite nicht anfassen. Alles eine Black Box für mich. Ob der Browser auch wirklich die Pixel feuert ist somit schwer rauszufinden,obwohl man ja nur wissen will, ob der Browser die doofen Pixel abgefragt hat.

Wenn ich wüsste, wo der Pixel in den Dom-Tree reingerendert wird, dann könnte ich prüfen, ob sich da was geändert hat. Da hab ich aber eigentlich keine Lust zu, denn ein generischer Ansatz wäre natürlich besser. Dann könnte ich auch hier meine Black Box Sicht beibehalten.

Jetzt kommt meine Idee ist Spiel. Wie wäre es, wenn mein Browser einfach über einen Proxy (der natürlich nur mitschreibt und den Rest weiterleitet an die echte Seite) geht und der mir sagt, ob die Pixel abgefragt wurden. Der Browser würde dann eine API zur Verfügung stellen, über die ich dann alle Infos abfragen könnte, die er so gesammelt hat. Gepaart mit Selenium könnte eine Verwendung so aussehen:

...
$selenium->setRunId( $testlaufId );
$selenium->open( '/' );
$selenium->click( 'button1' );

$jProxyConnection = new JournalingProxyConnection( '192.168.1.2', $testlaufId );
$imageCount = $jProxyConnection->getImageLoadCount( 'ivw*.png' );
$this->assertEquals( 2, $imageCount );
...

Wahrscheinlich gibt es einen viel besseren Weg, das feuern der Pixel zu testen, der fällt mir aber gerade nicht ein. In der Handhabung fände ich es eigentlich ganz nett, wenn ich in meinen PHPUnit Tests so auf die Daten zugreifen könnte. Also …. wer hat Lust das Tool zu schreiben? Kann ja nicht so schwer sein.

Die RunId habe ich übrigens hinzugefügt, da der Proxy ja irgendwie gruppieren muss. Selenium sollte dann hinter jede URL, die aufgerufen wird ein runId=... setzen.

Über den Autor

Nils Langner

Nils Langner ist der Gründer von "the web hates me" und auch der Hauptautor. Im wahren Leben leitet er das Qualitätsmanagementteam im Gruner+Jahr-Digitalbereich und ist somit für Seiten wie stern.de, eltern.de und gala.de aus Qualitätssicht verantwortlich. Nils schreibt seit den Anfängen von phphatesme, welches er ebenfalls gegründet hat, nicht nur für diverse Blogs, sondern auch für Fachmagazine, wie das PHP Magazin, die t3n, die c't oder die iX. Nebenbei ist er noch ein gern gesehener Sprecher auf Konferenzen. Herr Langner schreibt die Texte über sich gerne in der dritten Form.
Kommentare

5 Comments

  1. „Diese Impressionen werden aber nicht gezählt, wie wir uns das vorstellen würden, sondern sie zählen die Klicks. Ein gelöstes Sudoku auf einer Webseite kann also gut und gerne 100 PIs produzieren.“ Krasse Sache!

    Reply
  2. @Julia: Das würde mich auch mal interessieren, ob es bei der Entwicklung von Ajax/Flash Content negativ ins Gewicht fällt, dass dadurch massiv PIs verloren gehen, und man deshalb vielleicht doch kein Ajax/Flash nutzt, sondern „normales“ HTML, damit die PIs hoch sind. Denn dadurch verdient man ja Geld!

    Ansonsten netter Artikel! Natürlich sollte der Proxy in PHP geschrieben sein! Ist allerdings etwas Arbeit, vllt kann man sich von anderen Webservern, die in PHP programmiert sind, etwas abschauen, um nicht das Rad neu zu erfinden. Im Prinzip ist es nur ein Socket, wo HTTP-Requests reinkommen, die geloggt werden müssen und dann der eigentliche Inhalt geholt und zurückgegeben werden muss. Müßte in 500 Zeilen machbar sein.

    Reply
  3. Natürlich fallen Ajax & Flash ins Gewicht .. der Herr Niggermeier hat dazu ein paar nette Artikel in seinem Blog was Klickstrecken angeht. Die „großen“ Seiten machen’s in ihrer Gallerien auch deswegen gerne mal so, dass für jedes / jedes zweite / jedes n-te Bild eine neue Seite geladen wird .. damit „AD-Impressions“ etc registriert werden.

    Reply

Leave a Comment.

Link erfolgreich vorgeschlagen.

Vielen Dank, dass du einen Link vorgeschlagen hast. Wir werden ihn sobald wie möglich prüfen. Schließen