将文件添加到 Dropzone 会冻结 Firefox (v61) 几分钟,而 Chrome 和 Edge 则不会:
在我的 Ember 项目/应用程序中有一个 Dropzone 文件上传区域。当我将文件添加到队列中时,FF 将“冻结”一个文件,例如一分钟,直到 FF 再次可用于进一步交互,例如按下上传按钮。
此行为与选择拖放或单击并选择无关。
如果所选文件最近在几分钟内上传或处理,则不会发生这种冻结,但如果所选文件中的单个文件(显然)被 FF“未知”,则会发生至少一分钟的延迟。这是否表明与缓存有联系......???令人困惑。
除了杀死 FF 之外,我不知道打破这种“冻结”的另一种方法,在此期间它一直在运行 25% 左右的 CPU(即 100% 的四个 CPU 之一)。在 kill 之后,我找不到任何关于这种繁重 CPU 活动的原因或位置的踪迹。
FF 在 Kubuntu 和 W10 上都失败了。Chrome 或 Edge 不会发生此行为。
随附的代码描述是仅用于显示基本思想的摘录。我没有考虑任何 autoProcessQueue 替代方案,但希望在上传之前有一个概述和编辑机会:
...
export default Ember.Component.extend({
classNames: ['dropzone'],
...
parallelUploads: 8,
addRemoveLinks: true,
thumbnailWidth: 100,
thumbnailHeight: 100,
acceptedFiles: 'image/*',
autoProcessQueue: false,
... // all others null or empty
...
init: function () {
onDragEnterLeaveHandler(this);
this.on("addedfile", function(file) {
document.getElementById("uploadPics").style.display = "inline"; // button processFileQueue
document.getElementById("removeAll").style.display = "inline"; // " removeAllFiles
var namepic = file.name.replace(/.[^.]*$/, ""); // remove ext
file.status = Dropzone.ADDED;
});
this.on("queuecomplete", function() {
document.getElementById("uploadPics").style.display = "none";
});
},
...
actions: {
processFileQueue() {
return new Ember.RSVP.Promise ( () => {
qlen = this.myDropzone.getQueuedFiles().length;
if (qlen > 0) {
this.myDropzone.processQueue ();
}
}).then (null);
},
removeAllFiles() {
this.myDropzone.removeAllFiles();
document.getElementById("removeAll").style.display = "none";
},
...
}
});