Ich arbeite an einer Website, die es Benutzern ermöglicht, Fotos (im Browser) zu bearbeiten und sie dann hochzuladen. Um die Bilder im Browser zu bearbeiten, verwende ich einige JavaScript-Bibliotheken, die mit Bildern in base64 arbeiten. Als Ergebnis kann ein einfaches Formular mit einer Dateieingabe nicht verwendet werden, um das Bild an meinen Server zu senden. Der Wert einer ausgeblendeten Eingabe wird auf eine Base64-Zeichenfolge des bearbeiteten Bildes gesetzt, und das ist POSTed. Bitte beachten Sie das folgende, kurze Beispiel.POSTing base64 Daten JavaScript/jQuery
Offensichtlich ist dies sehr viel abgespeckte, aber es enthält das Problem, das ich in laufen lasse. Wenn Sie ein animiertes GIF mit 3 MB animierten, dauerte es 6,5 Minuten. Währenddessen war mein Computer fast vollständig eingefroren/reagierte nicht. (Anmerkung: Dies funktioniert perfekt für kleine Bilder, obwohl)
Es könnte ein OS/Browser-Problem sein, (neueste Google Chrome auf Ubuntu), aber ich bezweifle es. Wenn ich diese Dateieingabe in das Formular einfüge und die base64 von Daten lösche (d. H. Eine Standard-POST-Operation einer Datei), dauert es etwa eine Sekunde.
Vergleichen Sie 6,5 Minuten bis 1 Sekunde. Ich muss etwas falsch machen. Was mache ich hier falsch? Was sollte ich stattdessen tun? Ich bin ziemlich neu in der Webentwicklung, also bin ich ein wenig im Dunkeln. Mir ist bewusst, dass base64 eine Größenzunahme von etwa 1,3x verursacht, aber offensichtlich ist die Upload-Zeit hier nicht skalierbar mit 1,3x. Ich habe ein wenig console.logging gemacht, und dauert ungefähr eine Sekunde. Ich denke also nicht, dass der Flaschenhals da ist. Der Flaschenhals muss beim Hochladen sein. Aber warum? Warum ist eine Formulardatei-Eingabe so viel schneller als ein Formular versteckte Eingabe mit base64?
Ich entschuldige mich für meine langatmige Post, aber wieder, ich bin neu in Web-Entwicklung, und nicht wirklich mein Problem zu verstehen, so ist es schwer, kurz und dabei alle Informationen über.
Dank
Was ist Ihr Backend-Server ist? – arb
-Eine Daten-URL ist nicht dasselbe wie Base64 ... Heutzutage sind Daten-URLs meist UUIDs, nicht die vollständigen base64-Body + Metadaten. Das Hochladen dieser UUID ist nutzlos. Wenn Sie base64 wirklich in JS verwenden möchten, verwenden Sie ['btoa()'] (https://developer.mozilla.org/en-US/docs/Web/API/window.btoa). – Rudie
Mein Backend-Server? Es ist PHP. (Ist das, was du fragst?) –