Dateiausgabe mit PHP, hohe Ladezeiten

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Dateiausgabe mit PHP, hohe Ladezeiten

    Moin,

    mein Problem befasst sich mit dem WCF, hat aber scheinbar mehr mit http-headern zu tun.
    Ich möchte die Darstellung von Bildern mittels einer php-Datei (readfile) realisieren, um damit Zugriffsrechte via php abzufragen. Soweit klappt das auch wunderbar, allerdings rödelt der Browser immer 5,9 Sekunden an der Verbindung, auch wenn das Bild schon geladen ist.
    Der header ist denke ich richtig zusammengestellt, TCP-Eigenschaften wie Offenhalten der Verbindung halte ich bei 5,9 Sekunden für unwahrscheinlich ^^
    Ein Auszug aus meinem Skript, der übrigens bis auf einige Variablennamen der AttachmentPage.class.php des WCF entspricht. Ist daran schon offensichtlich etwas verkehrt?

    Quellcode

    1. try {
    2. @header('Content-Type: '.$this->mime);
    3. // file name
    4. @header('Content-disposition: inline; filename="'.$this->media->title.'.'.$this->media->extension.'"');
    5. // send file size
    6. @header('Content-Length: '.$this->media->filesize);
    7. // no cache headers
    8. if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) {
    9. // internet explorer doesn't cache files downloaded from a https website, if 'Pragma: no-cache' was sent
    10. // @see http://support.microsoft.com/kb/316431/en
    11. @header('Pragma: public');
    12. }
    13. else {
    14. @header('Pragma: no-cache');
    15. }
    16. @header('Expires: 0');
    17. // show attachment
    18. readfile('media/image/'. ($this->type ? 'thumbnail/'.$this->type.'/' : '') .$this->media->filename);
    19. exit;
    20. }
    21. catch(Exception $e) {
    22. $this->noPermission();
    23. }
    Alles anzeigen


    Die Netzwerk-Abfrage von Firebug zeigt mir auch nicht, wo der Ladevorgang hängen bleibt, nur unten im Eck steht bei der Gesamtladezeit (~1 Sekunde) noch ein (onload 5.9s)


    Bin für jede Hilfe dankbar ;)
  • Die Grafiken haben eine hohe Änderungsrate, daher dachte ich, die Cacheunterbindung sei nicht verkehrt, aber ich werds nochmal überdenken.

    Das Skript läuft auf localhost, online habe ich es noch nicht getestet. Mich wundert nur der Unterschied zur Attachment-Funktion des WCF, oder generell zu anderen Skripten dieser Art, solche Verzögerungen sind mir völlig fremd.


    EDIT: ich habe Expires einfach mal auf 1 gesetzt, auf einmal bekomm ich im Firebug im GET-header der Grafik zwei zusätzlich Felder:
    Keep-Alivetimeout=5,
    max=97ConnectionKeep-Alive

    Das könnte wohlmöglich die 5 Sekunden sein, die den Browser hängen lassen und die Ausführung von Skripten bei DOMContentLoaded verhindert...

    EDIT²: der Wert lässt sich auch nicht wirklich von mir ändern. Die Attachments des WCF arbeiten mit dem gleichen Header ohne diese Problematik

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Masterog ()

  • Die Ladezeit ist von der Dateigröße unabhängig, bei allen Medien muss ich 5,9 Sekunden warten.
    Ich verwende, wie man an dem Codebeispiel sieht, verschiedene Ausgabeformate, ähnlich der WCF-Galerie. In den Größen 75x75 bis zur Originalgröße 1280x1024 treten keine Unterschiede in der Wartezeit auf. Auch wenn ich eine Übersichtsseite mit mehreren Bildern betrete, die 5,9 Sekunden bleiben.
    Hier ein Auszug aus Firebug


    Die microtime-Stoppuhr gibt mir 0.10685086250305 und Werte in der Umgebung aus, die Ausgabe des Seiteninhalts sieht verwirrt aus, scheint also tatsächlich das Bild zu sein ^^

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Masterog ()