JavaScript CRC32

阿德里亚:

我正在寻找CRC32 现代 JavaScript实现。

此实现,这可能起源于这里,现在这里无处不在,是不可接受的,因为它的速度慢(500毫秒/ MB),并取决于在空间分隔的表2KB,使用SUBSTR访问。

似乎有一些CRC32的变体,因此我需要匹配以下输出:

mysql> SELECT CRC32('abcde');
> 2240272485

函数实际上不需要接受字符串,因为我正在使用字节数组。

亚历克斯:

更新资料

我添加了一个辅助函数来创建CRCTable,而不是在代码中包含大量字面量。它也可以用于一次创建表并将其保存在对象或变量中,并用crc32函数使用该表(或作为W3C的示例,检查是否存在并在必要时创建)。我还更新了jsPerf,以使用CRCtable与文字字符串,文字数组,保存的窗口变量和动态指针进行比较(此处显示的示例)。

var makeCRCTable = function(){
    var c;
    var crcTable = [];
    for(var n =0; n < 256; n++){
        c = n;
        for(var k =0; k < 8; k++){
            c = ((c&1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1));
        }
        crcTable[n] = c;
    }
    return crcTable;
}

var crc32 = function(str) {
    var crcTable = window.crcTable || (window.crcTable = makeCRCTable());
    var crc = 0 ^ (-1);

    for (var i = 0; i < str.length; i++ ) {
        crc = (crc >>> 8) ^ crcTable[(crc ^ str.charCodeAt(i)) & 0xFF];
    }

    return (crc ^ (-1)) >>> 0;
};

这是性能差异的链接:http : //jsperf.com/js-crc32

好吧,这是我对此的射击。我认为读取数组比对它进行子串化要快。

但是警告,我在这些示例中放弃使用Utf8Encode函数来简化测试。毕竟,这些只是示例而已,只是其中的粗略示例。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章