删除javascript中的大Blob
Deleting big blobs in javascript
我在客户端创建了巨大的Blob,用户可以将其作为文件下载。
以下示例只是为了演示问题
var x= "sdfslkdfjklsdjiflskdflsdf" ; for(var i = 0; i<19;i++) x=x+x
var blob = new Blob([x,x,x,x,x,x,x,x,x,x,x,x,x], {
type : "text/plain"
});
这将占用大量内存。当我完成blob时,我想释放内存。(我正在IE11 Edge中测试)
运行此脚本两次将失败,因为无法分配更多内存
我已经尝试过设置blob = null
或使用delete blob
,内存不会发生任何变化。
如何释放内存?
我想你会在这里碰壁的。Javascript是垃圾收集的,这意味着你能做的最好的事情就是"取消设置"变量,以有效地标记它们进行垃圾收集,当浏览器认为是时候了。
尽管看起来很有魅力,但设置为null
不会立即释放分配的内存,而只是删除一个引用——只有在垃圾回收实际发生时才可能释放内存(假设不存在对相关对象的其他引用):
var blobA = new Blob(...);
var blobB = blobA;
blobA = null;
console.log(blobB); // Blob, the object still exists
垃圾回收是自动的,并且在Javascript中没有方法来预测或检测何时发生垃圾回收。然而,有一种方法可以手动触发它:
window.location.reload();
这是正确的,对整个页面进行完全重新加载将触发垃圾收集,这实际上是实现AFAIK的唯一方法。在设计应用程序时,您可能需要考虑这一点。
相关文章:
- Javascript/Jquery Blob not showing Chrome PDF
- 将Excel BLOB转换为javascript数组
- 删除javascript中的大Blob
- Javascript-将类型化数组保存为blob,并作为二进制数据读回
- Fin上传器直接上传到Azure Blob存储-在Javascript中获取文件uri
- 是否可以将音频存储为javascript/jQuery中的blob数据
- 等待用户在Javascript中完成blob的下载
- 如何用Javascript从Chrome iOS下载blob文件
- Blob 对象到 JavaScript 中的 base64
- 使用 JavaScript 计算 Blob 的哈希值
- Javascript下载一个URL-Azure Blob存储
- 如何将音频blob从javascript发送到python
- 使用Javascript创建Azure Blob
- Javascript将blob转换为字符串并返回
- 将JAX-RS与ajax和javascript's blob对象,不'不起作用
- 将Blob文本转换为Javascript中的数组/JSON对象
- 使用 Javascript 将大文件上传到 Azure Blob
- Javascript Array 作为 BLOB(MIME TEXT 而不是 IMAGE)保存到 mySQL 数据库中
- Blob javascript对象在internet explorer浏览器中更改文件名
- 显示来自Blob Javascript的视频