JavaScript CRC32
Ich bin auf der Suche nach einem moderne JavaScript-Implementierung von CRC32.
Diese Umsetzungdie haben Ihren Ursprung aus hierund ist jetzt hier, dort und überallist inakzeptabel, weil es langsam (500 MS/MB), und hängt davon ab, über 2KB Leerzeichen getrennte Tabelle, auf die zugegriffen mit substr. Igitt!
Es scheint ein paar Varianten von CRC32, so brauche ich, um mit dieser Ausgabe:
mysql> SELECT CRC32('abcde');
> 2240272485
Funktion nicht wirklich brauchen, um zu akzeptieren ein string, aber da bin ich arbeiten mit byte-arrays.
InformationsquelleAutor der Frage Adria | 2013-09-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
Update
Ich fügte hinzu, eine Hilfsfunktion zu erstellen, die CRCTable anstatt diese enorme literal im code. Es könnte auch verwendet werden, um die Tabelle zu erstellen, sobald und speichern Sie es in ein Objekt oder eine variable aus und haben die crc32 Funktion verwenden Sie, dass (oder als W3C Beispiel, überprüfen Sie das Vorhandensein und erstellen, wenn notwendig). Ich auch aktualisiert, die jsPerf zu vergleichen mit einem CRCtable mit dem string-literal, literal-array gespeichert-Fenster, variable und dynamische Zeiger (das hier gezeigte Beispiel).
Hier ist ein link zu den performance-Unterschied: http://jsperf.com/js-crc32
Naja hier mein ameatur Schuss auf diese. Ich dachte, das Lesen aus einem array schneller ist als substringing.
Warnung, obwohl ich forwent die Verwendung der Funktion Utf8Encode in diesen Beispielen zur Vereinfachung des tests. Nach all, diese sind nur Beispiele und ziemlich raue an.
InformationsquelleAutor der Antwort Alex
Den code, den Sie link zu einem
substring
und analysiert das Ergebnis als Zahl für jeden char. Das ist sehr ineffizient.War ich in der Lage, um es 20 x schneller mit einer einfachen Optimierung.
Leistungen Vergleich
JsBin zu überprüfen, gibt es das gleiche Ergebnis
InformationsquelleAutor der Antwort Denys Séguret
Brauchte ich diese so schnell wie möglich, also schrieb ich meine eigenen. Hoffe jemand findet es nützlich.
196 Byte (Nach dem closure compiler). 16ms/MB
Edit: Mit der Verbesserung von jedermanns Eingang.
InformationsquelleAutor der Antwort Adria
Basierend auf @Denys Séguret Antwort, ich warf dies zusammen für ein Node.js Projekt:
crc.js
:Anschließend können Sie diese streams und dergleichen, wo Daten kommen kann, in Stücke schneiden. Führen Sie
update
auf jedem Stück dannfinalize
um das Ergebnis zu erhalten.BTW: ich fand dass dies eine gute Quelle für die Validierung der Prüfsumme zusätzlich zu den built-in *nix
crc32
Befehl.Update:
Eine aktualisierte und wesentlich schnellere version finden Sie auf meiner GitHub (zu lang zum hier posten)
InformationsquelleAutor der Antwort NuSkooler
Dystroy optimiert, aber immer noch Alex ist schneller. Beachten Sie, dass die Zeichenfolge aus dem Dokument lässt einen unfairen Maßstab sein, da das Dokument wächst wie die Prüfung fortschreitet, da Alex zuletzt war er die Daten zu verarbeiten.
Tabelle setup Optimierung ist groß, aber auch noch fraglich, Auswirkungen auf die Verwendung der Zeit der Ausführung.
http://jsperf.com/alex-variations
InformationsquelleAutor der Antwort Erich Horn