Hallo,
ich habe ein Problem zu dem ich gerne ein paar Meinungen hören würde, vielleicht hat ja jemand eine bessere Idee wie man das ganze realisieren könnte.
Es geht um eine PHP Anwendung die beim Kunden in einem HTTP Cluster läuft, was soweit auch gut funktioniert. Problemmatisch wird das ganze beim Bildupload.
An gewissen Stellen (Profil, Artikel, Galerien) ist es möglich ein Bild hochzuladen. Ursprünglich hatte ich hier eine feine Iframe/Ajax Lösung die das Bild in einem Iframe hochgeladen hat und per Ajax wurde dann das Bild nach dem Upload angezeigt, das ganze hat also komplett ohne Seite neuladen funktioniert.
Das musste ich schonmal umbauen weil das Uploadscript auf einem externen Server laufen muss da man nicht in den Cluster uploaden kann. Die Iframe Lösung hat dann wegen der "Same Origin Policy" nicht mehr funktioniert, weil das Uploadscript eben auf einem anderen Host lief, also musste ich überall einen Standardupload per Seite neuladen einbauen. Soweit sogut.
Das Hauptproblem ist allerdings das die Bilder nicht von diesem externen Server geladen werden, sondern von dort erst wieder im Cluster verteilt werden bevor man drauf zugreifen kann, dieser Vorgang dauert etwa 2-5 Minuten. Der User sieht nun nach dem Upload also noch kein Bild sondern erst wenn er nach 2-5 Minuten die Seite neulädt und das Bild bis dahin verteilt wurde. Usability technisch schonmal ein Alptraum.
Ich habe das ganze nun etwas verbessert indem ich vor der Ausgabe des Bildes prüfe ob das Bild auf dem externen Server vorhanden ist, ergo upgeloadet wurde aber nocht nicht verteilt wurde, und zeige in dem Fall dann ein "Bild in kürze verfügbar".
Der User muss aber trotzdem manuell die Seite neuladen.
Alles in allem bin ich damit garnicht glücklich, aber gibt es Alternativen ?
Eine Möglichkeit wäre das per Ajax und einer Schleife in einer bestimmten Zeit zu prüfen ob das Bild vorhanden ist, bei vielen Bildern auf einer Seite aber ein Performance Killer.
Eine weitere Möglichkeit wäre nach dem Upload den User nach 2-5 Min zu einem Reload zu zwingen, per meta refresh oder JS oder wie auch immer, auch keine schöne Lösung.
Man könnte die Bilder auch in DB statt im Filesystem speichern, das würde die Verzögerung eliminieren, aber ich denke auch das ist ein Performance Killer.
ODER man lädt die Bilder erst vom externen Server solange bis sie im Cluster verfügbar sind, wie das in der Praxis funzt müsste ich mal testen.
Mich würde interessieren wie soetwas im Detail bei anderen großen Projekten funktioniert. Ich denke mal da gibt es dann einfach Imageserver auf denen die Bilder verteilt werden und dann einfach vom entsprechenden Server geladen werden ?! Hat da jemand Erfahrungen ?
Ich würde mich sehr über Tipps/Erfahrungen freuen
danke schonmal
ich habe ein Problem zu dem ich gerne ein paar Meinungen hören würde, vielleicht hat ja jemand eine bessere Idee wie man das ganze realisieren könnte.
Es geht um eine PHP Anwendung die beim Kunden in einem HTTP Cluster läuft, was soweit auch gut funktioniert. Problemmatisch wird das ganze beim Bildupload.
An gewissen Stellen (Profil, Artikel, Galerien) ist es möglich ein Bild hochzuladen. Ursprünglich hatte ich hier eine feine Iframe/Ajax Lösung die das Bild in einem Iframe hochgeladen hat und per Ajax wurde dann das Bild nach dem Upload angezeigt, das ganze hat also komplett ohne Seite neuladen funktioniert.
Das musste ich schonmal umbauen weil das Uploadscript auf einem externen Server laufen muss da man nicht in den Cluster uploaden kann. Die Iframe Lösung hat dann wegen der "Same Origin Policy" nicht mehr funktioniert, weil das Uploadscript eben auf einem anderen Host lief, also musste ich überall einen Standardupload per Seite neuladen einbauen. Soweit sogut.
Das Hauptproblem ist allerdings das die Bilder nicht von diesem externen Server geladen werden, sondern von dort erst wieder im Cluster verteilt werden bevor man drauf zugreifen kann, dieser Vorgang dauert etwa 2-5 Minuten. Der User sieht nun nach dem Upload also noch kein Bild sondern erst wenn er nach 2-5 Minuten die Seite neulädt und das Bild bis dahin verteilt wurde. Usability technisch schonmal ein Alptraum.
Ich habe das ganze nun etwas verbessert indem ich vor der Ausgabe des Bildes prüfe ob das Bild auf dem externen Server vorhanden ist, ergo upgeloadet wurde aber nocht nicht verteilt wurde, und zeige in dem Fall dann ein "Bild in kürze verfügbar".
Der User muss aber trotzdem manuell die Seite neuladen.
Alles in allem bin ich damit garnicht glücklich, aber gibt es Alternativen ?
Eine Möglichkeit wäre das per Ajax und einer Schleife in einer bestimmten Zeit zu prüfen ob das Bild vorhanden ist, bei vielen Bildern auf einer Seite aber ein Performance Killer.
Eine weitere Möglichkeit wäre nach dem Upload den User nach 2-5 Min zu einem Reload zu zwingen, per meta refresh oder JS oder wie auch immer, auch keine schöne Lösung.
Man könnte die Bilder auch in DB statt im Filesystem speichern, das würde die Verzögerung eliminieren, aber ich denke auch das ist ein Performance Killer.
ODER man lädt die Bilder erst vom externen Server solange bis sie im Cluster verfügbar sind, wie das in der Praxis funzt müsste ich mal testen.
Mich würde interessieren wie soetwas im Detail bei anderen großen Projekten funktioniert. Ich denke mal da gibt es dann einfach Imageserver auf denen die Bilder verteilt werden und dann einfach vom entsprechenden Server geladen werden ?! Hat da jemand Erfahrungen ?
Ich würde mich sehr über Tipps/Erfahrungen freuen
danke schonmal
Kommentar