crypot.js 生成hash256, 在IE下的卡顿问题。
项目需求:
上传大文件,调用crypto.js生成hash256码。
直接上传大文件,IE会直接崩溃。
于是利用file.slice分片检测。但是浏览器会出现卡顿问题。开始以为是内存泄漏。但看服务器进程,内存并没有一直上升。
挨行排查,甚至把node_modules下的crypto-js.js打上时间测试。最后发现,
readAsBuffer接收的blob超过一定尺寸,加密就会卡顿。
在chrome下,分片大小在5M以上,执行效率最高。
在ie系列下,在200KB以下,执行效率最高。可能和不同浏览器分配不同的内存有关。
暂时的解决方案是判断浏览器版本。如果是IE系列(ie10以下不支持readAsBuffer,进入首页时即会弹框提醒升级浏览器),设为200Kb,其他浏览器设置为5M。测试了firefox没有问题。
总结:
crypto.js给文件生成HASH256时,接收blob大小大于500KB时,在IE下的执行时间会长达几秒。这样一个大文件比如1GB的,就可能会长达2000秒+,相当于30多分钟(chrome并不存在这个问题)。
解决方法:在IE下把文件分片设置为200Kb,chrome设置为5M。这样,以500M文件为例。IE在线生成hash256,耗时大概110秒钟左右。chrome耗时20秒左右。