com.adobe.crypto官方库的md5算法性能实在不敢恭维,算个10m的byteArray在我机子上跑了大概12s!我勒个去,这可怎么叫人活。随后找到个by.blooddy.crypto,提升了2个数量级的性能!
作者博客:http://va.lent.in/blog/2010/06/23/100x-times-faster-md5-and-more/
更新的博客:http://va.lent.in/blog/2010/07/10/more-on-faster-md5/
下载地址:http://www.blooddy.by/en/crypto/
我实际测试了下,10M的东西大概用了100ms左右,的确至少提升了100倍,作者此言非虚也!只是这个swc必须在flash cs5下编译才能成功,我用cs4调试半天老是报Main方法异常,郁闷很久才发现为什么。
源于新的jssc5的设想,开辟基于词法分析和语法分析的高亮器。当然,词法分析和语法分析我还在学习中,编译原理没好好学,大学时间那个悔啊……
简单测试了下,主要是性能方面。hax曾经做过chrome下面正则的测试,实验证明google浏览器对正则的优化真的很牛X!不过我考虑仍将继续基于flash平台来做,原因很显然:词法分析必须遍历字符串,而js的遍历性能目前来看是实在不敢恭维的。
大概排序一下吧:
直接比较字符串最快:s == “string”;
用as3内置的indexOf来寻找其次;
判断charCode和indexOf差不多:比如单个字符是否数字;
用isNaN结合parseInt来判断是否数字就比较慢了,但不限单个字符,大概是charCode的数倍到十倍,所以要综合考虑;
用正则最慢!这和js情况正好相反,但正则功能最强大,不过目前情况来看用到正则的可能性很少。
唔,jssc5搞定后JAse研究就能迈进一大步了。
—-
更新:
发现Array类的push()操作性能居然还不如手动写入?!
真晕啊,不知道Adobe搞什么鬼。
array.push(value)还不如array[array.length] = value;,当然舍却length用计数器还要快一点点。
《Fantasy Sky》的进展顺利,一切继续着。今天下午把10种职业基本补齐了,除了小偷还缺4张截图,小事而已。于是想来张全家福,突然发现bug。
同时登陆多个账号时,头几个显示还正常,后面的就看不见前面同张地图内的人了。debug半天,发现数据完全正常,接收发送都处理到了,可真杀死脑细胞啊。
最终在客户端想了个办法把每次socket接收的数据都打印出来看看,终于发现问题所在:
swf在接收socket的数据时,是用触发侦听进行的。然而可能服务器端两次发送的数据由于延迟原因同时到达客户端了,此时由于程序编写的问题,就会出现冲突。
比如接收到 str1 这一段数据,客户端判别应该生成一个人物a;接收到 str2 就该生成b。由于延迟,二者合到一起了,客户端读取的是 str1 + str2 的内容,错误就出现在这里了。
解决得办法就是换用xmlsocket对象,它用\0字符为结尾标识每次传送数据的结束,不会起冲突;又或者仍然用低层的socket对象,它有readInt()方法,可以每次在数据开头设个长度,用来标识此次接收多少字节。
前者容易,后者更强大。综合来说,我先用前者试一试。
这两天在做intel的拼图小游戏,进展很迅速。
期间在记录日志时出了点问题,连续两个urlrequest时候,第二个很容易就被第一个给覆盖掉。料想不会是后端脚本的事,应该是flash的问题。稍微有点时间差的话,就会正常。
很奇特的现象。

本博客所有文章均采用