删除 Javascript blob?

2023-11-25

我很难摆脱这些愚蠢的事情。我有几个处理大量媒体文件的 Chrome 应用程序;其中一个我能够使用一堆“删除”和一个window.URL.revokeObjectURL这最终阻止了他们在chrome://blob-internals/,但这另一个似乎没有任何帮助。我错过了什么吗?我确切地知道我什么时候能完成这该死的事情,但似乎我无能为力。

具体来说,我在块中使用 File 对象,如下所示:

ref.file(function(f) {
    // Do some stuff...
    // and now I'm done!
    delete f
});

这是我的应用程序的实际来源:

https://github.com/pkulak/photo-importer

这是我认为我实际上解决了问题的地方,但谁真正知道:

https://github.com/pkulak/drive-slideshow


这看起来像你有内存泄漏。

JavaScript没有您所说的意义上的“删除”,它会随着属性和变量变得孤立而进行垃圾收集。这delete运算符就是实现这一目标的一种方法 - 它从属性中删除属性的定义Object.
Using delete正确意味着在财产上使用它,而不是在var可以。它对某些变量起作用的原因是因为发生的情况var在全局命名空间中(即它们成为window)。这也意味着你不能delete一个参数。

此外,请注意,一旦函数完成调用,如果没有引用保持活动状态,则其所有内部都将被 GC 回收。

接下来,考虑

var o = {};
o.a = [];
o.b = o.a;
delete o.a;

What is o.b now?

`o.b; // []`

它仍然指向Array即使我们删除了o.a参考。这意味着Array won't被垃圾收集。

所以这对于你来说意味着什么?

为了摆脱你的Blobs,您需要销毁对它们的所有引用。

是的,撤销URI是其中的一部分,但您还需要从代码中删除引用。如果你觉得这很困难,我建议你把所有的东西都包起来Blobs这样你至少可以最小化问题。

var myBlob = (function () {
    var key, o;
    function myBlob(blob) {
        var url;
        this.blob = blob;
        blob = null;
        this.getURL = function () {
            if (url) return url;
            return url = URL.createObjectURL(this.blob);
        };
        this.dispose = function () {
            if (url) url = URL.revokeObjectURL(url), undefined;
            this.blob = null;
        };
    }
    o = new Blob();
    for (key in o)
        (function (key) {
            Object.defineProperty(myBlob.prototype, key, {
                enumerable: true,
                configurable: true,
                get: function () {return this.blob[key];}
            });
        }(key));
    o = key = undefined;
    return myBlob;
}());

现在,代替您的常规Blob创作使用new myBlob(blob) 当你制作你的斑点时立即,不保留对该 blob 的其他引用。然后当你完成你的Blob, call myWrappedBlob.dispose();并且它应该将其释放以进行GC。如果它是really需要通过Blob直接变成某物,我给了它属性myBlob.blob.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

删除 Javascript blob? 的相关文章

随机推荐

  • 使用 ArtistAnimation 在 matplotlib 中对 png 进行动画处理

    我一直在尝试使用有限元方法为二维热流问题创建一系列曲面图的动画 在每个时间步 我保存一个图而不是整个矩阵 以便更加高效 我遇到了麻烦FuncAnimation在 matplotlib animation 库中 所以我决定每次渲染一个曲面图
  • PHP 重命名数组的键

    如何重命名数组中的键 从这个名为 start array 的数组开始 0 gt date gt 2012 05 01 revenue gt 100 1 gt date gt 2012 05 02 revenue gt 200 并更改 日期
  • 为什么 Java 8 中的 Cloneable 没有默认的 clone()

    CloneableJava 本质上是破碎的 具体来说 我对接口的最大问题是它需要一种不定义方法本身的方法行为 所以如果遍历一个Cloneable列表中您必须使用反射来访问其定义的行为 然而 在 Java 8 中 我们现在有了默认方法 现在我
  • 使用 docker-entrypoint-initdb.d 脚本初始化 PostgreSQL 容器

    我正在尝试创建一个 PostgreSQL 11 5 docker 容器 在此过程中 我想运行一个 SQL 脚本来创建必要的用户 表等 但是 每当容器启动时 我都会看到以下错误 The files belonging to this data
  • Web api 路由和 http post [重复]

    这个问题在这里已经有答案了 我正在使用 WEB API 2 构建一个 API 我有以下 API 控制器 RoutePrefix api account public class AccountController ApiController
  • 如何在 AddModelError 消息中包含链接?

    我想添加一个 ModelState 错误 如下所示 ModelState AddModelError Some message a href controller action click here a 但是 该链接不会进行编码 因此会像文
  • emacs 完成或 IntelliSense 与 Visual Studio 上相同

    Linux 上的 emacs 22 2 1 我正在使用 emacs 进行一些 C C 编程 我想知道 emacs 是否支持补全 Visual Studio 中的 IntelliSense 例如 在填充结构时 我希望在键入点运算符或箭头运算符
  • 如何在netbeans中运行node.js文件?

    在net beans中 我安装了node js插件 但是我的简单节点程序无法工作 我收到错误 这是我的示例代码 var http require http http createServer function req res res wri
  • C/C++中Lua函数的引用

    我有一个函数嵌套在一组表中相对较深 C C 中有没有一种方法可以获取对该函数的 引用 并在需要使用它时将其 和参数 推送到堆栈上 这就是参考系统是为了 函数调用r luaL ref L LUA REGISTRYINDEX 将值存储在注册表中
  • $q.all 和嵌套的 Promise

    有一个关于在 Angular 中使用 q 时同步嵌套 Promise 的问题 下面的代码能否确保等待整个 Promise 链 这意味着对返回承诺的服务的嵌套调用是否会在 q all 块中等待 var call1 service1 get s
  • 使用 QTextStream 以非阻塞方式读取 stdin

    使用 Qt 我尝试以非阻塞方式读取标准输入流的内容 当套接字收到一些新数据时 我使用 QSocketNotifier 来提醒我 通知程序的设置如下所示 QSocketNotifier pNot new QSocketNotifier STD
  • 如何在 Scala 中使用库的多个版本?

    我正在 Scala 中使用一个库 例如 A 它依赖于另一个库 例如 Z 的 x 11 版本 现在 我还使用一个库 B 它依赖于 Z 的 x 31 版本 这会导致编译错误 因为我们将有两个版本的库 Z 我如何在 scala 的 sbt 中同时
  • 捕获标准输出并仍然将其显示在控制台窗口中

    我正在生成一个在可见控制台窗口中运行的子进程 它是运行 MSBuild 的批处理文件 并且我希望将进程生成的输出显示在可见控制台窗口中 并捕获该输出所以我可以用代码处理它 我已经阅读了其他几个问题和处理 ProcessStartInfo R
  • 在这种情况下,为什么调用父类方法而不是子类方法?

    我有一个父类 A 和它的子类 B 两者都有doSomething具有不同类型参数的方法 Class A package Inheritance public class A public void doSomething Object st
  • 添加类后 jQuery 单击事件不起作用

    在我的 JSP 页面中我添加了一些链接 a class applicationdata href Organization Data a a class applicationdata href Business Units a a cla
  • 为什么“cat”不会附加到“file”连接?

    我运行了这两个代码块 期望得到相同的输出 cattest lt file cattest txt cat First thing file cattest cat Second thing file cattest append TRUE
  • Laravel 如果 id 相同则验证唯一

    我有一个表 模型 其中每个用户包含多个相册 有没有办法说这个专栏title应该是唯一的 但仅限于具有相同的行user id 例子 http pastebin com 8dvM4a1T 正如您在示例中看到的 id 为 2 的用户创建了 2 个
  • 使用 ssh 密钥进行 cron git 推送

    我为github帐户设置了ssh密钥 因此不必每次都输入密码 效果很好 这是我使用的脚本 bin bash git push origin master 但是当我使用 cron 运行它时 它不会使用我的 ssh 密钥 这是输出 Permis
  • 状态栏和导航栏上的 Google Now 渐变/阴影

    我正在尝试制作与 Google Now 类似的状态栏和导航栏渐变 图片参考 如下所示的矩形区域 在 Android Marshmallow 上尝试以下选项后
  • 删除 Javascript blob?

    我很难摆脱这些愚蠢的事情 我有几个处理大量媒体文件的 Chrome 应用程序 其中一个我能够使用一堆 删除 和一个window URL revokeObjectURL这最终阻止了他们在chrome blob internals 但这另一个似