Markus: Warum ist readfile() so langsam

Hallo alle,

Ein hochgeladenes Bild soll auf einer Webseite mit abgerundeten Ecken angezeigt werden. Das Bild wird deshalb nicht direkt angesprochen, sondern einem PHP-Skript als Parameter übergeben. Das Skript bearbeitet das Bild und liefert es zurück.

Nun wird das ganze natürlich gecacht, indem einmal generierte Bilder abgespeichert und im folgenden vom Skript ohne Bearbeitung einfach eingelesen und zurückgegen werden. So weit - so gut.

Jetzt ist mir aufgefallen, dass die Variante "Bild über PHP-Skript ausliefern" deutlich langsamer ist (nach meinen Untersuchungen ca. 6-10 mal) als das Bild direkt zu laden.

Ich habe das ganze dazu _beispielhaft_ auf folgenden Mini-Code runtergekürzt:

<img src="bild.jpg" /><br />
<img src="script.php?file=bild.jpg" /><br />

In script.php steht einfach nur <?php readfile($_GET["file"]); ?>.

Mein Firefox meldet mir dann den besagten Zeitunterschied um Faktor 6 bis 10 (bei 47 KB großem Bild).

Nun frage ich mich, warum readfile() so lahm ist. Klar dauert das länger. Aber warum gleich so viel? Und noch viel wichtiger: Gibt's eine schnellere Variante?

Danke im Voraus!
Markus

  1. Hi,

    Nun frage ich mich, warum readfile() so lahm ist. Klar dauert das länger. Aber warum gleich so viel?

    Weil's den kompletten Dateiinhalt erst mal in den internen Speicherbereich der PHP-Scriptinstanz laedt, und dann am Ende des Scriptes rausschickt.

    Und noch viel wichtiger: Gibt's eine schnellere Variante?

    Einige der Nutzerkommentare im Manual bzgl. readfile() beschaeftigen sich damit (da erst mal selber nachzustoebern, bevor man fragt, ist immer ratsam).

    MfG ChrisB

  2. echo $begrüßung;

    Mein Firefox meldet mir dann den besagten Zeitunterschied um Faktor 6 bis 10 (bei 47 KB großem Bild).
    Nun frage ich mich, warum readfile() so lahm ist. Klar dauert das länger. Aber warum gleich so viel? Und noch viel wichtiger: Gibt's eine schnellere Variante?

    Wie lange benötigt ein PHP-Script, das nichts macht oder nur einen kurzen Text ausgibt? Wie lange benötigt der Apache beim Ausliefern einer Textdatei mit gleichem Inhalt?

    echo "$verabschiedung $name";

  3. Hello,

    Ich habe das ganze dazu _beispielhaft_ auf folgenden Mini-Code runtergekürzt:

    <img src="bild.jpg" /><br />
    <img src="script.php?file=bild.jpg" /><br />

    In script.php steht einfach nur <?php readfile($_GET["file"]); ?>.

    Mein Firefox meldet mir dann den besagten Zeitunterschied um Faktor 6 bis 10 (bei 47 KB großem Bild).

    Nun frage ich mich, warum readfile() so lahm ist. Klar dauert das länger. Aber warum gleich so viel? Und noch viel wichtiger: Gibt's eine schnellere Variante?

    Ist es wirklich die Response, die so lange auf sich warten lässt, oder ist es der Browser, der so lange denken muss, welchen Content-Type er denn da wohl bekommen haben könnte?

    Den hast Du nämlich in Deiner Kurzvariante nicht angegeben, er ist dem Browser aber lieb und teuer, wenn man ihn vergisst anzugeben.

    Harzliche Grüße vom Berg
    http://bergpost.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau
    Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)