输入中带有base64编码图像的POST的Chrome内存泄漏 - 如何解决
Chrome memory leak with POST with base64 encoded image in a input - how to solve?
因此,出于某些原因,我需要使用 FORM 在输入中发布 base64 编码的图像。图像大小 ~1.1MB,大小 2500x1700。Base64 编码大小 ~1.5MB。
所以我在表单中有两个输入:输入文件和隐藏输入。下载图像到输入隐藏后(使用FileReader将图像转换为base64(,我清除了输入文件值,因此,没有额外的文件。
当我尝试提交表单页面时,冻结并且内存消耗从 50% 增加到 93%(4Gb RAM(,然后 Chrome 崩溃。
当我尝试在Firefox中运行此页面(总是缓慢且滞后(时,我得到了即时发布,没有额外的内存消耗。
当然,我会将其发布到 Chrome 问题,但现在我需要知道:有什么技巧可以避免它吗?好吧,也许我不是第一个发现此错误的人。
好的,所以,如果在FileReader的onload事件中使用input.value = e.target.result,我会得到内存泄漏。如果我将等长的自定义文本设置为input.value,则没有问题。所以,我不认为 e.target.result 可以保存对 FileReader 的引用(或者它可以?(,因为它是字符串。所以我们在接收文件读取器结果时遇到了原生 chrome 问题。
input.addEventListener("change", function() {
var reader = new FileReader();
reader.onload = function(e) {
document.getElementById("input_hidden").value = e.target.result;
};
reader.readAsDataURL(this.files[0]);
});
尝试使用不可见的<textarea>
而不是input hidden
。
它看起来像:
<textarea style="display:none" id="XXX">
$("XXX").value = base64
还要确保完全删除input file
,将其保留在表单标记之外,然后将其从 DOM 中删除。
希望这有帮助
相关文章:
- 如何解决Yii中的页面刷新问题
- 测试Angular Service解决错误回调中的promise
- 如何解决Access Control Allow Origin错误
- 如何解决这种情况下的非法调用类型错误
- 简单的ES6承诺问题-交换解决和拒绝参数
- 可以转换显示属性吗?如果没有,什么'这是最好的解决方案
- iPad虚拟键盘-哪一个-javasctript解决方案
- 重复应用 d3 转换导致的内存泄漏
- 在ES6 Promise中,我应该在解决/拒绝之前使用return吗
- 如何解决“;错误所请求的URL返回500-内部服务器错误”;
- 如何逃离<脚本>jquery html()中的标记.我使用了innerHTML和outerHTML来解决这个
- 如何解决'窗口未定义'终端上的节点JS出错
- IE7中的blockUI插件内存泄漏25kb
- 输入中带有base64编码图像的POST的Chrome内存泄漏 - 如何解决
- 使用$scope$destroy解决了内存泄漏,但破坏了指令
- 我可以使用iframe来解决内存泄漏吗
- 解决$.post中的Javascript/jQuery内存泄漏问题
- 解决来自jQuery源的泄漏
- jQuery泄漏解决了,但为什么呢?
- JavaScript承诺在未被拒绝或解决时是否会造成内存泄漏?