input type "file" : lange Ausführungszeit der Funktion "getAsBinary()"
Hallo nochmal zusammen ;)
ich sitze immernoch an meinem Ajax-FileUploader und hab festgestellt, dass die Funktion getAsBinary (input type=file hat diese funktion) bei größeren Dateien (schon ab 1 MB :( ) sehr sehr langsam wird und mitunter bei 13MB 10-20 secs braucht und dadurch die ganze Seite/Scripte anhält...
Code:
var fileInput = document.getElementById("fileinput1");
data = fileInput.files.item(0).getAsBinary();
Gibt es andere/schnellere Möglichkeiten? Oder wenigstens nen weg, wie ich verhindern kann, dass alle Scripte anhalten, wenn diese Funktion aufgerufen wird?
Bin für jede Hilfe dankbar :)
Viele Grüße und nen schönen Abend,
Bueddl
AW: input type "file" : lange Ausführungszeit der Funktion "getAsBinary()"
Da das Ganze sowieso nicht in allen Browsern funktioniert, würde ich es ganz anders machen (Datei in einem versteckten iFrame versenden).
Aber da JS nicht multithreadfähig ist wirst du ziemlich sicher keine Lösung für das "Einfrieren" des Browsers finden.
AW: input type "file" : lange Ausführungszeit der Funktion "getAsBinary()"
Zitat:
Zitat von
kkapsner
Aber da JS nicht multithreadfähig ist wirst du ziemlich sicher keine Lösung für das "Einfrieren" des Browsers finden.
Mann kann die Funktion nach einigen Zeilen unterbrechen und einen Timeout setzen.
edit: Aber ist natürlich nicht ratsam und rumgehacke.
AW: input type "file" : lange Ausführungszeit der Funktion "getAsBinary()"
Wenn die Funktion getAsBinary schon alleine so lange braucht kann man da auch mit einem Timeout nichts machen...
AW: input type "file" : lange Ausführungszeit der Funktion "getAsBinary()"
in der Funktion getAsBinary würde es gehen, aber die ist ja nativ.
AW: input type "file" : lange Ausführungszeit der Funktion "getAsBinary()"
danke, wollte das ganze aber bewusst als "experimentelle technik" einsetzen...
AW: input type "file" : lange Ausführungszeit der Funktion "getAsBinary()"
Hallo Bueddl,
sowohl JS als auch PHP haben keine Möglichkeiten zum Multithreading.
Allerdings lässt sich Multithreading mit einigen tricks simulieren, mit asynchronen Timern zum Beispiel,
was allerdings einen nicht allzu kleinen Programmieraufwand bedeutet.
Zum Glück gabs ein paar schlaue Menschen, die Klassen entworfen haben, die für einen das Threading übernehmen,
damit dürfte der Aufwand, JS code auf (pseudo) Multithreading zu portieren sehr viel geringer ausfallen, als beim selber basteln.
Hier ein Beispiel:
Simulate Threading Using Javascript « Hugoware
viel Spass,
Castell
AW: input type "file" : lange Ausführungszeit der Funktion "getAsBinary()"
Zitat:
Zitat von
Castell
Zum Glück gabs ein paar schlaue Menschen, die Klassen entworfen haben, die für einen das Threading übernehmen,
damit dürfte der Aufwand, JS code auf (pseudo) Multithreading zu portieren sehr viel geringer ausfallen, als beim selber basteln.
Oder man verwendet gleich https://developer.mozilla.org/En/Using_web_workers
AW: input type "file" : lange Ausführungszeit der Funktion "getAsBinary()"
Klingt auch nicht schlecht =)
Aber das scheint eine Browsergebundene Geschichte zu sein...?
AW: input type "file" : lange Ausführungszeit der Funktion "getAsBinary()"
Noch, ja. http://ejohn.org/blog/web-workers/ hier steht das es nur in Firefox 3.5 and Safari 4 implementiert ist (bzw. war, der Artikel ist von 2009), aber ist sicher noch nicht universell einsetzbar. Wobei aber auch Timeouts hier in dem Fall nicht helfen