MD5加密spark-md5
计算md5值,整个文件计算或者分片计算
在前端开发项目中,通常使用spark-md5库来生成md5值。有两种方法,一种是直接将整个文件传入,直接返回文件的md5。这种方法对于小文件会比较有优势,简单而且速度超快。
另一种方法是利用js中File对象的 slice() 方法( File.prototype.slice )将文件分片后逐个传入 spark.appendBinary() 方法来计算,最后通过 spark.end() 方法输出md5。分片计算md5,对于大文件和超大文件会非常有利,不容易出错,不占用大内存
注意:
1.1G左右的文件,分片Md5计算的耗时大概是整个文件Md5计算的一半,文件越大越明显
2. 大文件(大于4G)一定要分片计算Md5值,原因:大文件一次性计算Md5有时会遇到卡死现象或者没有响应,原因是FileReader是 JavaScript 中用于读取文件内容的 API,在使用FileReader读取大文件(大于4G)时,它将整个文件加载到内存中进行处理,而大文件可能会超出浏览器的内存限制,导致浏览器崩溃或运行缓慢。因此,对于大文件(大于4G)需要分片计算Md5值
3. 再进一步优化就是放在web worker中计算,因为文件的MD5值计算是纯运算,将阻塞JS主线程的运行,在文件较大时,计算过程将使得浏览器长时间处于无响应状态而web-worker与JS处于不同的线程,相互并不阻塞,因此可以将一些耗时的纯运算放在web-worker中进行,等待完成后通知到JS主线程