| | | | |
| |||||||
| PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen |
|
| | LinkBack | Themen-Optionen | Thema bewerten |
| | |
| Moderator und Wett-König | Hallo zusammen, ich habe in den letzten beiden Tagen einem Phenomen hinterher gejagt, das ich tatsächlich bisher noch nicht gesehen habe. Es lässt sich in diversen aktuellen Browsern reproduzieren (FF 3.6.X, Safari 4, ...) und da ich nach längerem Nachdenken die Lösung auch verstanden habe, wollte ich euch natürlich teilhaben lassen. Anwendungsfall: ich streame zur einfacheren Auslieferung von Modulen Bilder, die zu einem Modul gehören über eine Front-Controller-Action. Das hat den Vorteil, dass alle Bilder in einem Zip-Package zusammen mit dem Code ausgeliefert werden können und keine umständliche Installation von Code und Medien erfolgen muss. Die Action wird innerhalb einer Bootstrap-Datei ausgeführt, die den darin enthaltenen Code durch PHP-Code: Code: Date Wed, 13 Oct 2010 20:48:38 GMT Server Apache/2.0.63 (Win32) PHP/5.2.14 X-Powered-By PHP/5.2.14 Content-Length 88285 Cache-Control public; max-age=604800 Last-Modified Wed, 13 Oct 2010 22:48:38 GMT Expires Wed, 20 Oct 2010 22:48:38 GMT Content-Encoding gzip Vary Accept-Encoding Keep-Alive timeout=15, max=100 Connection Keep-Alive Content-Type image/jpg Code: http://***/Bildergalerie/***/~/3rdparty_imageresizer-action/showImage/image/advent08_1286992853/ext/jpg/path/GalleryMediaPath Lösungsversuche: setze ich statt JPG auf PNG, wird die Seite tadellos schnell geladen. Deaktiviere ich GZIP encoding, ist das "Problem" genauso schnell verschwunden, wie bei einem "Connection: close"-Header. Ich dachte zuerst noch daran, dass die per strlen() berechnete "Content-Length" falsch wäre, jedoch stimmt diese absolut mit der Datei-Größe überein. Lösung: Problem bei der Auslieferung mit GZIP-Encoding und JPGs ist, dass JPGs fast nicht komprimierbar sind. Das bedeutet, dass der Browser das Bild schon vollständig innerhalb einer geringeren Daten-Menge erhält und damit wartet, dass die restlichen Daten "auch noch" ankommen. Ein eindeutiges Indiz dafür ist, dass ein "Connection: close"-Header dem Browser in der Lage ist mitzuteilen, dass der Datenstrom nun zu Ende ist (Holzhammer-Methode). Aus diesem Grund sollte man tunlichst keine "Content-Length"-Header senden, wenn man nicht tatsächlich weiß, welche Content-Länge ein gezipptes Objekt hat. ![]() Happy GZIP'in, Dr.E.
__________________ Viele Grüße, Dr.E. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1. Think about software design before you start to write code! 2. Discuss and review it together with experts! 3. Choose good tools (-> Adventure PHP Framework (APF))! 4. Write clean and reusable software only! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| | |
| | |
| PHP Code Flüsterer Registriert seit: 21.08.2005 Beiträge: 4682 PHP-Kenntnisse: Fortgeschritten | |
| | |
| Erfahrener Benutzer Registriert seit: 01.09.2010
Beiträge: 4.561
PHP-Kenntnisse: Fortgeschritten ![]() ![]() ![]() | hab ich jetzt auch so verstanden, dass du die Content-Length der unkomprimierten Daten geliefert hast - aber Gerade dann sollte JPEG kein Problem haben, weil dort ja quasi 1:1 rauskommt bzw. die Datei eher wieder ein paar Byte größer wird oder wolltest du die "Holzhammer"-Methode als Lösung propagieren ? |
| | |
| | ||||
| Moderator und Wett-König | Zitat:
Zitat:
Zitat:
![]()
__________________ Viele Grüße, Dr.E. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1. Think about software design before you start to write code! 2. Discuss and review it together with experts! 3. Choose good tools (-> Adventure PHP Framework (APF))! 4. Write clean and reusable software only! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | |||
| | |
| | |
| Erfahrener Benutzer Registriert seit: 07.09.2010
Beiträge: 722
PHP-Kenntnisse: Fortgeschritten ![]() | Also lieferst du jetzt ohne Content-Length-Header aus? Habe hier gerade etwas gefunden (geschachtelte OB-Buffer): http://stackoverflow.com/questions/8...a-gzipped-file PHP-Code: |
| | |
| | ||
| Moderator und Wett-König | Hallo hts, Zitat:
Code: 3.If a Content-Length header field (section 14.13) is present, its
decimal value in OCTETs represents both the entity-length and the
transfer-length. The Content-Length header field MUST NOT be sent
if these two lengths are different (i.e., if a Transfer-Encoding
header field is present). If a message is received with both a
Transfer-Encoding header field and a Content-Length header field,
the latter MUST be ignored.
__________________ Viele Grüße, Dr.E. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1. Think about software design before you start to write code! 2. Discuss and review it together with experts! 3. Choose good tools (-> Adventure PHP Framework (APF))! 4. Write clean and reusable software only! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | |
| | |
| | ||
| Erfahrener Benutzer Registriert seit: 07.09.2010
Beiträge: 722
PHP-Kenntnisse: Fortgeschritten ![]() | Ja, hatte ich mir schon vorab angesehen. http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html unter "14.13 Content-Length" Zitat:
| |
| | |
| | |
| Moderator und Wett-König | Danke für das Zitat, ich kenne das RFC zur Genüge! Update: der Einbau des Snippets am Ende der index.php bringt nicht den gewünschten Erfolg. Der Header wird auch mit explizitem Replace-Flag nicht gesendet. Ich werd das bei Gelegenheit mal analysieren.
__________________ Viele Grüße, Dr.E. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1. Think about software design before you start to write code! 2. Discuss and review it together with experts! 3. Choose good tools (-> Adventure PHP Framework (APF))! 4. Write clean and reusable software only! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Geändert von dr.e. (15.10.2010 um 09:39 Uhr). |
| | |
|
| Themen-Optionen | |
| Thema bewerten | |
|
|
| Besucher kamen über folgende Suchanfragen bei Google auf diese Seite |
| ready event, ready event geladen, html document ready event, document.ready bilder, dom ready event, ready event geladen?, was ist ready event, on document ready event, document.ready() auslösen, document ready bilder, document.ready auslösen, document ready ereignis auslösen, (document).ready bilder, $(document).ready, gzip php 5.2, document.ready senden, document ready event, gzip jpegs, zeit bis document.ready, document ready |