解决input type=file 打开时慢 卡顿问题

2020/11/9 1:56:16webhtml

代码如下:


<input
    accpet="image/*"
    type="file"
/>

经过测试发现,在mac里面safari、Firefox、Chrome(opera不知道为啥老闪退)都没有卡顿,问题在windows里面,Firefox不卡顿,只有Chrome卡顿。
于是我决定先去掉accpet试试……
果然就没有了卡顿的问题。
那么本包在试试accpet="image/jpg"果然也不卡卡的了!!
看来问题的所在就是"image/*"

经过修改:

<input
    type="file"
    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/*"这样的呢,就不行了,就有可能变得卡卡的。

可能性二:

在没有这accept属性时,基本上是秒点秒开,但是加了image/*以后要等5秒左右,这样就导致了用户体验非常不友好。
后来经过搜索才找到了原因,学过正则表达式的会知道,* 表示通配符,image/* 的意思就是找到所有图片类型的文件,它会对每一个文件进行校验,当文件数量过多时,就会出现响应时间过久的问题。
解决办法就是将通配符 * 换成指定的图片类型image/png,从而减少检验文件的次数。

原文链接:https://blog.csdn.net/weixin_33812433/article/details/89009700

image.png