Hat GWT serialize java.lang.Longs effizient?
-
25-09-2019 - |
Frage
Ich schicke Objekt-IDs hin und her vom Client zum Server durch den GWT RPC-Mechanismus. Die IDs kommt aus dem Datenspeicher als Nachläufer (8 Bytes). Ich denke, alle meine IDs nur 4 Bytes benötigt, sondern etwas zufällig könnte vorkommt, dass gibt mir einen 5-Byte (oder was auch immer) Wert.
Ist GWT geht über Verpackung, diese Werte in irgendeiner Codierung mit variabler Länge, intelligent zu sein, den Platz im Durchschnitt sparen? Kann ich, dass es so irgendwo tun angeben? Oder sollte ich schreibe meine eigenen Code, um die Longs zu ints kopieren und achten Sie auf die Ausnahmesituationen?
Dank ~
Lösung
Wie bereits erwähnt in der GWT Dokumentation .
lang : JavaScript keinen 64-Bit-Integral-Typen hat, muss so lange besondere Berücksichtigung. Vor dem GWT 1.5 wurde der lange Typ wurde einfach auf den Integralbereich eines Gleitkommawert 64-Bit JavaScript abgebildet, lange Variablen eine tatsächliche Reichweite weniger als die vollen 64 Bits geben. Ab 1,5 GWT, ist als ein Paar von 32-Bit-Zahlen, und arbeitet zuverlässig über den gesamten 64-Bit-Bereich lange Primitiven emuliert. Überlauf emuliert das erwartete Verhalten anzupassen. Es gibt ein paar Einschränkungen. Schwere Verwendung von langen Operationen eine Auswirkung auf die Leistung aufgrund der zugrunde liegenden Emulation haben. Darüber hinaus können lange Primitiven nicht in JSNI Code verwendet werden, da sie numerischen Typ kein nativer JavaScript sind.
Wenn Sie Ihre IDs in einem Integer passen, könnte man besser mit, dass ab. Andernfalls, wenn Sie ein DTO verwenden, stellen Sie die IDs eine doppelte, die in Javascript tatsächlich vorhanden ist.
Andere Tipps
verwendet GWT gzip-Kompression für Reaktionen mit einer Nutzlast von 256 Byte oder mehr. Das sollte gut funktionieren, wenn Sie eine Menge von Null-Bytes in Ihrer Antwort haben.
Von RemoteServiceServlet.shouldCompressResponse
:
Legt fest, ob die Antwort auf eine gegeben Servlet-Anforderung sollte oder nicht GZIP komprimiert werden. Diese Methode ist nur in den Fällen genannt, wo die Anforderers akzeptiert GZIP Codierung.
Diese Implementierung derzeit Renditen wenn die Antwort Zeichenfolge stimmt geschätzte Byte Länge ist länger als 256 Bytes. Subklassen kann außer Kraft setzen diese Logik.
So werden die Server zuerst überprüft, ob der Antragsteller (der Browser, in der Regel) akzeptiert GZIP-Kodierung. Intern java.util.zip.GZIPOutputStream
ist gebraucht - siehe RPCServerUtils
. Auf der Client-Seite, dann ist es die Aufgabe des Browser dekomprimieren der gzip-Nutzlast - da dies in nativen Code ausgeführt wird , sollte es ziemlich schnell sein.