浏览器的兼容性
为了考虑最大的兼容性,目前WebUpload同时实现了 HTML5 和 FLASH 两套运行时,在不支持 HTML5 的浏览器里面自动切换成 FLASH 方式上传,这样的好处是,既能在条件允许的情况保证 HTML5 发挥出其高效的优势,又能在不支持 HTML5 的浏览器里面保证能正常运行。
p.s. WebUploader是由Baidu FEX团队开发的一个简单的以HTML5为主,FLASH为辅的现代文件上传组件。
如何优化文件上传性能
上传前的优化
- 通过减少文件体积,减少上传流量来优化。
- 通过合并小文件,减少请求数来优化。
上传过程中优化
并发上传
并发数越多,服务端压力越大,所以选择并发数不能太大!
同时每个浏览器都有固定的最大并发数限制,所以选择并发数不能超出这个值。分块上传
分块上传,就是把一个大的文件分成若干块,一块一块的传输。优点:
- 更强容错能力:如果传输中断,仅需重传出错的分片,而不需要重传整个文件,大大减少了重传开销。
- 可以模拟暂停与继续:采用分块上传,在某个分块上传完了后不自动开始下个分块上传,利用此功能,就可以通过网络检测,在网络断开的时候自动暂停传输,网络恢复后,继续传输,给用户带来更好的体验效果。
- 利用并发提速:如果单独的上传一个大文件,只有采用了分块上传才能利用并发请求来提速。
- 更精准的速度跟踪:关于客户端监控上传进度,其实监控的都是客户端的发送速度,服务端有没有接收,有没有存储,是不知道的,只有在整个请求完毕,收到服务端反馈后才能确定数据已经成功接收。这样也就解释了进度显示的时候,长长出现,进度条瞬间到100%,要过一段时间才全部完成。如果采用分块上传,每个分块上传完成,可以确定这个分块服务端已经成功接收。
断点续传
如果服务端能够把每个已成功上传的分块都记住,客户端可以快速验证,条件选择跳过某个分块,就实现了断点续传。优点:
- 节省流量,避免上传重复的分块。
- 减少用户等待时间。
- 可恢复的上传。出现中断,就算浏览器刷新或者是换了台电脑也能恢复到上次中断的位置。
- 如何标识一个分块:
怎样标识让服务端好入库,同时客户端可以快速的计算出来与服务端验证,换句话说就是,如何去找出分块的唯一ID。
每次分块上传前,根据内容 MD5序列化,得到一个唯一ID,与服务端验证,如果此分块已经存在于服务端,则直接跳过此分块上传,否则上传此分块,成功后,服务端记下此分块ID。