可能看到这个题目,大多数人想到的都是文件的个数限制,但今天我写的问题可能比较扯,因为也是自己在项目中碰到的问题。
场景:
其实之前一片文章提到过,就是文件输入框要上传很多很多文件。当我选择了2000多个文件的时候,不触发onChange,页面也没卡死。
排查过程:
1、代码质量问题。ok,我特码啥都不写,就onChange之后console.log一下总行了吧——凉凉!
2、文件总大小问题。另一批文件,尝试2000个文件,总大小50兆,可以触发onChange;2000个文件,总大小20兆,不触发——凉凉!
3、文件个数问题。另一批文件,总大小20兆,2000个文件,可以触发;另一批文件,20兆,1500个文件,不触发——凉凉!
死机中。。。。。。
网上找了半天都没找到答案啊,然后思否问了问题,时隔两天总算是有人回复了啊。
事情真相:
我们所用的input文件多选框控件,实际上应该是浏览器调用了windows(我的电脑是windows)的api,然后弹出的File Dialog控件。
而这个控件里面有个缓冲区是保存文件名的(这里的话哪位大神写的是保存文件名的,然后我问了一位写客户端的同学,他说里面存的是路径,我作为一个前端也不确定,先留个坑,查证完之后补充,先以那位大神写的为准)。
但总之可以确定的是,这个缓冲区是有大小设置的,而且既然是浏览器调用,那每个浏览器设置的大小应该也不一样。于是跑到火狐上试了一遍,发现在chrome中2000个不行的文件,火狐是可以的。总结起来可以这么理解,在设置的缓冲区大小的情况下,名字长的保存的数量多,名字短的保存的数量少。
下面是那个大神的回复以及给的参考网站:
1、思否回复
2、参考网站
总结一波吧,虽然浏览器功能日益强大了,万一出现神奇的问题也就难排查了,多了解新东西(不单单值前端)总不会是坏事,共勉!