Nadine: Jeden zweiten Besucher auf eine andere Seite leiten

Hallo,

ich suche nach einer Möglichkeit, genau jeden zweiten Besucher auf eine andere Seite zu schicken. Hintergrund ist der Test von zwei Landingpages.

Bisher habe ich es mit random gelöst, jedoch tendiert erst bei großen Userzahlen die Verteilung auf 50/50.

Gibt es eine Möglichkeit, ohne Datenbank bzw. externe Datei eine A/B Weiterleitung einzurichten?

Eine externe Datei wäre alternativ auch in Ordnung, wichtig ist eine hohe Performance und Ausfallsicherheit.

Freue mich auf eure Tipps!

Nadine

  1. Zähle die Zugriffe und liefere nach der Abfrage '$zugriffszahl % 2 == 0 ? $seite1 : $seite2' aus. So weit bist Du offensichtlich auch schon.

    Bei einer externen Datei hast Du zunächst ein Locking-Problem: wenn ein Prozess schreibt und ein anderer zu lesen versucht, wird dieser so lange aufgehalten, bis das Schreiben beendet ist - das führt zu Performanceverlusten.

    Eine Variante, diese einzudämmen, besteht bei Linux-Systemen darin, die Datei im shared memory abzulegen - dann gehen die Operationen schnell genug, so dass Locking kein Problem mehr darstellt.

    Andererseits kann je nach CGI-Schnittstelle auch ein persistenter Speicher innerhalb des CGI-Dispatchers existieren, so zB. bei FastCGI: dann können globale Variablen zwischen einzelnen Aufrufen übergeben werden.

    Gruß, LX

  2. ich suche nach einer Möglichkeit, genau jeden zweiten Besucher auf eine andere Seite zu schicken. Hintergrund ist der Test von zwei Landingpages.

    Ganz einfach zu lösen.
    Bei jedem Seitenaufruf änderst du einen Flag und je nach Flag kommt man auf Seite 1 oder 2.

    Aufruf: Flag=1 -> Seite 1 aufrufen -> Flag auf 2 ändern
    Aufruf: Flag=2 -> Seite 2 aufrufen -> Flag auf 1 ändern

    Dazu legst du entweder ne kleine Datei auf der Festplatte ab oder schreibst den Wert ich ne Datenbank, je nach Verfügbarkeit und/oder Vorliebe.

  3. (Hallo|Hi(ho)|Tag) Nadine,

    ich suche nach einer Möglichkeit, genau jeden zweiten Besucher auf eine andere Seite zu schicken. Hintergrund ist der Test von zwei Landingpages.

    Bisher habe ich es mit random gelöst, jedoch tendiert erst bei großen Userzahlen die Verteilung auf 50/50.

    Gibt es eine Möglichkeit, ohne Datenbank bzw. externe Datei eine A/B Weiterleitung einzurichten?

    Eine externe Datei wäre alternativ auch in Ordnung, wichtig ist eine hohe Performance und Ausfallsicherheit.

    Warum willst du dann PHP benutzen ...? ;-)

    So lange die Abstände zwischen zwei Zugriffen über der Zeit[1] liegen, die dein Betriebssystem (genauer dessen Filesystem) zum Erzeugen oder Löschen eines Verzeichnisses braucht, liefert folgende Methode eine exakte 1-zu-1-Verteilung:

      
    $path = '/pfad/temporaeres-verzeichnis';  
      
    if (file_exists($path)) {  
        rmdir($path);  
        // switch to A  
    }  
    else {  
        mkdir($path);  
        // switch to B  
    }  
    
    

    [1]Brauchbare Vergleichsdaten konnte ich auf Anhieb nicht auftreiben:
    http://www.google.de/search?q=mkdir+"directories+per+second"&hl=de&filter=0

    MffG
    EisFuX

    1. Hello,

      $path = '/pfad/temporaeres-verzeichnis';

      if (file_exists($path)) {
          rmdir($path);
          // switch to A
      }
      else {
          mkdir($path);
          // switch to B
      }

        
      Dafür könnte man ja auch einen Link benutzen, oder?  
        
        
      Ein harzliches Glückauf  
        
      Tom vom Berg  
      ![](http://selfhtml.bitworks.de/Virencheck.gif)  
        
      
      -- 
      Nur selber lernen macht schlau  
      <http://bergpost.annerschbarrich.de>
      
      1. (Hallo|Hi(ho)|Tag) Tom,

        Dafür könnte man ja auch einen Link benutzen, oder?

        Einen Hardlink? Ähm, ja sicher irgendwie auch, aber mit PHP und link() ist das so eine Sache, die Funktion ist da nicht unter jedem proprietären Betriebssystem eingebaut (obwohl beispielsweise NTFS Hardlinks und Junctions unterstützt). Außerdem müsste man dann zuallererst mal eine Datei erstellen, zu der man verlinken kann ... Irgendwie umständlicher -- und schneller laufen würde es wahrscheinlich auch nicht.

        MffG
        EisFuX