处理input[type=file]翻开时慢、卡顿题目

昨天临放工测试给我问我为何图片上传插件翻开文件夹的速率这么慢,让我想办法优化一下
然后我就勤奋的搞了起来_(:з」∠)_

由于我们内部体系不兼容ie,所以我就没有管ie,在浏览器内里玩了起来

经由测试发明,在mac内里safari、Firefox、Chrome(opera不知道为啥老闪退)都没有卡顿题目

在windows内里,Firefox不卡顿,只要Chrome卡顿。

然则,这个插件是从另一个项目内里借用过来,再加上了限制图片范例的功用罢了。
原组件并没有这个卡顿题目,那末题目只多是在限制图片范例这点上了。

先贴上我的代码

<input
    accpet="image/*"
    style={inputStyle}
    ref={c=> this._imgFile = c}
    onChange={this.handleChange.bind(this)}
    type="file" name="image" disabled={disabled}
/>

因而我决议先去掉accpet尝尝……
果真就没有了卡顿的题目。
那末本包在尝尝accpet="image/jpg"果真也不卡卡的了!!
看来题目的地点就是"image/*"

然则写accpet的原意是要想要筛选出一切图片_(:з」∠)_
那末为了完成这个需求,同时进步用户体验,只能采用枚举了

修改后的代码

<input
    style={inputStyle}
    ref={c=> this._imgFile = c}
    onChange={this.handleChange.bind(this)}
    type="file" name="image" disabled={disabled}
    accpet="image/gif,image/png,image/jpeg,image/jpg,image/bmp"
/>

再尝尝,果真妥妥的了!

然则究竟是为何会这么卡呢??我查了查全能的Stack Overflow→_→

本来是由于Chrome的SafeBrowsing功用会在上传或保留时搜检文件,
假如网络衔接到google的速率比较快呢,就没有什么题目。
然则假如衔接比较慢,或许痛快跪掉了,那SafeBrowsing就会让Chrome挂起一段时间,直到文件搜检完毕或许超时

运用accept="image/png, image/jpeg, image/gif"就能够处理这个题目,由于这些MIME范例在SafeBrowsing的白名单内里,不需要搜检。
然则假如用像是accept="image/*"如许的呢,就不行了,就有能够变得卡卡的。

    原文作者:魔力叉烧包
    原文地址: https://segmentfault.com/a/1190000010397414
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞