0 votes
ago in SoSci Survey (dt.) by s193661 (130 points)

Hallo! Ich habe einen Fragebogen mit rotierenden Fragen mittels PHP und bedingten Filterfragen mittels JavaScript. Nach letztem Korrekturlesen wurde mir im Debug-Modus jetzt auf einmal diese Meldung angezeigt:

Warnung (Seite 4)
Das Erstellen dieser Fragebogen-Seite erfordert unüblich viel RAM-Speicher (24.9 MB), davon 23.3 MB für den Inhalt der Seite. Mögliche Gründe sind viele Variablen, große PHP-Variablen oder die Verwendung aufwändiger PHP-Funktionen. Wenn der Speicherbedarf weiter ansteigt, kann dies zu Interview-Abbrüchen führen.

(Seltsamerweise nur auf einigen Seiten, obwohl die Seiten für alle Experimentalgruppen identisch aufgebaut sind)

Dazu zwei Fragen:

1) Besteht das Risiko von Abbrüchen durch Seitenabsturz o.ä. jetzt schon? Oder wirklich erst "wenn der Speicherbedarf weiter ansteigt"? Da nichts weiter verändert werden soll, wäre der zweite Fall hoffentlich unproblematisch (?).

2) Was kann ich tun, um diese Warnung zu vermeiden?

Vielen Dank!

1 Answer

0 votes
ago by SoSci Survey (364k points)

Besteht das Risiko von Abbrüchen durch Seitenabsturz o.ä. jetzt schon?

Wir haben diese Meldung gestern eingebaut, damit keine Projekte ganz ohne Vorwarnung offline gehen. Sie müssen sich keine akuten Sorgen machen, aber Sie sollten herausfinden, was da schief läuft - denn wenn Sie für die Erstellung einer einfachen Fragebogen 23 MB benötigen, dann läuft da etwas schief.

Was kann ich tun, um diese Warnung zu vermeiden?

Vermutlich tut Ihr PHP-Code etwas, das unnötig kompliziert und aufwändig ist. Das bremst im Zweifelsfall auch den Fragebogen aus (und natürlich den ganzen Server).

Vermutlich könnte man dasselbe Ergebnis auch deutlich einfacher erreichen. Wenn Sie möchten, posten Sie mal Ihren PHP-Code und erklären Sie kurz, was Ihr Ziel ist. Dann werfe ich einen Blick darauf und kann im Idealfall etwas konkretere Tipp geben.

ago by s193661 (130 points)
$zahl = value('ZG01');

if ($zahl != 2) {
goToPage ('S11');
}

// alle Zahlen außerhalb der Gruppe werden auf letzte Seite weitergeleitet

$fragen = valueList('ZG03', NULL, 'label');

foreach ($fragen as $kennung) {
    question($kennung);

//rotierende Fragen

    if ($kennung == 'A103') {
        question('X201');
    }elseif($kennung == 'A104'){
        question('X202');
    }elseif($kennung == 'I103'){
        question('X203');
    }elseif($kennung == 'I104'){
        question('X204');
    }elseif($kennung == 'W103'){
        question('X205');
    }elseif($kennung == 'W104'){
        question('X206');
    }elseif($kennung == 'D103'){
        question('X207');
    }elseif($kennung == 'D104'){
        question('X208');
    }elseif($kennung == 'S103'){
        question('X209');
    }elseif($kennung == 'S104'){
        question('X210');
    }elseif($kennung == 'B203'){
        question('X211');
    }elseif($kennung == 'B204'){
        question('X212');
    }elseif($kennung == 'P203'){
        question('X213');
    }elseif($kennung == 'P204'){
        question('X214');
    }elseif($kennung == 'F203'){
        question('X215');
    }elseif($kennung == 'F204'){
        question('X216');
    }elseif($kennung == 'Q203'){
        question('X217');
    }elseif($kennung == 'Q204'){
        question('X218');
    }elseif($kennung == 'H203'){
        question('X219');
    }elseif($kennung == 'H204'){
        question('X220');
    }elseif($kennung == 'D001'){
        question('X221');
    }elseif($kennung == 'D002'){
        question('X222');
    }elseif($kennung == 'D003'){
        question('X223');
    }elseif($kennung == 'D004'){
        question('X224');
    }elseif($kennung == 'D005'){
        question('X225');
    }elseif($kennung == 'D006'){
        question('X226');
    }elseif($kennung == 'D007'){
        question('X227');
    }elseif($kennung == 'D008'){
        question('X228');
    }elseif($kennung == 'D009'){
        question('X229');
    }elseif($kennung == 'D010'){
        question('X230');
    }elseif($kennung == 'D011'){
        question('X231');
    }elseif($kennung == 'D012'){
        question('X232');
    }elseif($kennung == 'D013'){
        question('X233');
    }elseif($kennung == 'D014'){
        question('X234');
    }elseif($kennung == 'D015'){
        question('X235');
    }elseif($kennung == 'D016'){
        question('X236');
    }elseif($kennung == 'D017'){
        question('X237');
    }elseif($kennung == 'D018'){
        question('X238');
    }elseif($kennung == 'D019'){
        question('X239');
    }elseif($kennung == 'D020'){
        question('X240');
    }elseif($kennung == 'D021'){
        question('X241');
    }elseif($kennung == 'D022'){
        question('X242');
    }elseif($kennung == 'D023'){
        question('X243');
    }elseif($kennung == 'D024'){
        question('X244');
    }elseif($kennung == 'D025'){
        question('X245');
    }elseif($kennung == 'D026'){
        question('X246');
    }elseif($kennung == 'D027'){
        question('X247');
    }elseif($kennung == 'D028'){
        question('X248');
    }elseif($kennung == 'D029'){
        question('X249');
    }elseif($kennung == 'D030'){
        question('X250');
    }
    
}

// Zuordnung von Fragen und Intensitätsfragen    


Tausend Dank für die schnelle Antwort!

Das ist mein PHP Code für eine der Seiten, auf denen die Meldung auftaucht.  Auf diese Weise konnte ich trotz rotierenden Fragen (mit Zufallsgenerator) eine bedingte Frage einbauen, die ab einem Antwortwert v. 3 oder höher angezeigt wird. Die Fragen mit der Kennung 'X' sind die bedingte Frage, die aber immer gleich lautet. Ich habe somit im PHP-Code jeder Frage eine bestimmte Folgefrage zugeordnet, die dann (durch einen Java-Script-Code) entweder angezeigt wird oder nicht. Ich hoffe, das Ganze halbwegs verständlich.

 Aber das kann doch wohl kaum 23 MB brauchen, oder?  

Vielen Dank für Ihre Hilfe.
ago by SoSci Survey (364k points)
Danke für den Code. Das mit dem IF/ELSE könnte man hier mit einem Array deutlich übersichtlicher bauen, aber wie Sie schon schreiben

> das kann doch wohl kaum 23 MB brauchen

Ich denke, das "Problem" liegt eher im Loop, in welchem die Seiten abgearbeitet werden. Genauer darin, dass häufig eine Seite übersprungen wird. In diesem Fall "stapelt" SoSci Survey nämlich die Seitenabfolge, und das kann ziemlich umfangreich werden.

Wenn (!) Sie keinen Zurück-Knopf anbieten, und sich SoSci Survey daher ohnehin nicht merken muss, in welcher Abfolge die Seiten bisher gezeigt wurden, dann fügen Sie doch bitte oben im PHP-Code mal folgenden Befehl ein und prüfen Sie, ob der Speicherverbrauch sinkt:

dropHistory();

Willkommen im Online-Support von SoSci Survey.

Hier bekommen Sie schnelle und fundierte Antworten von anderen Projektleitern und direkt von SoSci Survey.

→ Eine Frage stellen


Welcome to the SoSci Survey online support.

Simply ask a question to quickly get answers from other professionals, and directly from SoSci Survey.

→ Ask a Question

...