Chrome 中的 FileReader 内存泄漏

2024-04-23

我有一个具有文件上传功能的网页。上传以 5MB 块执行。我想在将每个块发送到服务器之前计算其哈希值。块表示为Blob https://developer.mozilla.org/en/docs/Web/API/Blob对象。为了计算哈希值,我将这样的 blob 读入一个数组缓冲区 https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer使用本机文件阅读器 https://developer.mozilla.org/en/docs/Web/API/FileReader。这是代码:

var reader = new FileReader();

var getHash = function (blob, callback) {
    reader.onloadend = function (e) {
        var hash = util.hash(e.target.result);
        callback(hash);
    };
    reader.readAsArrayBuffer(blob);
}

var processChunk = function (chunk) {
    if (chunk) {
        getHash(chunk, function (hash) {
            util.sendToServer(chunk, hash, function() {
                // this callback is called when chunk upload is finished
                processChunk(chunks.shift());
            });
        });
    }
}

var chunks = file.splitIntoChunks(); // gets an array of blobs
processChunk(chunks.shift());

问题:使用FileReader.readAsArrayBuffer似乎消耗了大量未释放的内存。到目前为止,我在以下浏览器上使用 5GB 文件进行了测试:

  • Chrome 55.0.2883.87 m(64 位):内存快速增加到 1-2GB,并在此范围内波动。有时它会一直上升并且浏览器选项卡崩溃。它可以使用比读取块的大小更多的内存。例如。读取 500MB 的块后,该进程已经使用了 700MB 的内存。

  • Firefox 50.1.0:内存使用量在 300-600MB 左右波动

我尝试过的代码调整 - 均无济于事:

  • 重复使用相同的FileReader所有块的实例(如这个问题 https://stackoverflow.com/questions/32102361/filereader-memory-leak)
  • 创造新的FileReader对于每个块
  • 在开始新块之前添加超时
  • 设置FileReaderArrayBuffer每次读取后为空

问题:有办法解决这个问题吗?这是 FileReader 实现中的错误还是我做错了什么?

EDIT:这是一个 JSFiddlehttps://jsfiddle.net/andy250/pjt9udeu/ https://jsfiddle.net/andy250/pjt9udeu/


这是 Windows 上 Chrome 的一个错误。报道如下:https://bugs.chromium.org/p/chromium/issues/detail?id=674903 https://bugs.chromium.org/p/chromium/issues/detail?id=674903

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

Chrome 中的 FileReader 内存泄漏 的相关文章

  • 如何过滤javascript对象数组

    我有两个数组 我正在使用 PubSidebar 过滤基于 groupKey 的内容 let groupKey oaDeal Journals Deposit This array of object will be filtering wi
  • CSS 文本装饰:反向

    我很惊讶 CSS 中没有 text decoration reverse 因为使用 JavaScript 来实现似乎非常尴尬 IE 将元素的前景色和背景色分别设置为父元素的背景色和前景色 我注意到了 JavaScript 技术here ht
  • React-Native 博览会 POST Blob

    我正在使用 React Native 和 expo 并尝试通过 fetch api 发布 blob 图像 我对正文使用表单数据格式 并且我有下一个代码 const blob await response blob const form ne
  • 处理量角器中的未知错误

    我有一个protractor通过配置多个浏览器进行设置multiCapabilities 在 browserstack 上运行测试 我的主要量角器规格 测试之一包含以下内容afterEach block afterEach function
  • 在 IOS9 中的 Cordova 应用程序上使用 JQuery/Javascript 的 window.history 问题

    我在 IOS9 测试版 下使用 Cordova 应用程序时遇到问题 我正在使用最新的 Cordova 和 JQuery 移动版本 window history 未更新 导致以下故障 window history go 1 无法返回页面 即使
  • 从 iframe 中打开 iframe fancybox,以便它在父级中打开

    我可以让它工作 从 iframe 中打开一个 fancybox IMAGE a href Open something a 我遇到的问题是我需要打开一个 fancybox IFRAME 示例代码或任何想法将不胜感激 Thanks 简单来说
  • 将键值对添加到数组中的所有对象

    我想向数组中的所有对象添加一个键 值参数 eg var arrOfObj name eve name john name jane 现在我想向所有对象添加一个新参数 isActive 以便生成的数组如下所示 eg name eve isAc
  • 有没有由 HTML + css + javascript 驱动的 sql 编辑器? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 语法高亮 sql代码格式 代码镜像 http codemirror net 会成功的 这太好了 非常容
  • 如何防止机器人程序和垃圾邮件 API 请求?

    我正在使用react native 开发一个Android 应用程序 该应用程序与我正在为该应用程序开发的API 进行通信 该 API 是使用 Laravel 和 Laravel Passport 构建的 我知道 Android 应用程序可
  • jquery javascript 在 codeigniter 中不起作用

    大家好 感恩节快乐 我在将此脚本包含在 codeigniter 中时遇到一些问题
  • 如何从 angularJS 模板调用encodeURIComponent?

    我的 Angular JS 模板中有一个块 a href foos foo id foo name a 但是 foo id 属性有时可能包含时髦字符 我想做这样的事情 a href foos encodeURIComponent foo i
  • 如何在 React JS 组件中预加载图像?

    我目前正在渲染一个子组件signInError发生 这signInError存储在父组件中 如果不为 null 则渲染
  • 创建地图后向 Google 地图 v3 添加标记

    我对使用 Google Maps API 比较陌生 现在我正在开发一个项目 用户可以选择各种搜索过滤器并查看结果自动显示在地图上 而无需重新加载页面 到目前为止 我的方法是创建一个控制地图的 Javascript 对象 以便我可以按照我的意
  • 规则和夏令时

    我在用着rrule https github com jakubroztocil rrule在我的数据库中创建和存储事件 一切正常 直到我发现我的重复事件与 3 月 31 日之后有一个小时的差异 在法国 这一天我们进行夏令时更改 实际上 我
  • Firefox:按下鼠标按钮时鼠标悬停不起作用

    这是我想做的 https gfycat com ValidEmbarrassedHochstettersfrog https gfycat com ValidEmbarrassedHochstettersfrog 我想强调一些 td 对象在
  • 在 d3v4 堆积条形图中使用 JSON

    我找到了一个d3v3堆积条形图示例 http bl ocks org mstanaland 6100713我想使用它 因为它使用 json 数据 还有一个d3v4规范条形图示例 https bl ocks org mbostock 3886
  • 更改 jQuery 中链接的标题

    我有一个 id 为 helpTopicAnchorId 的链接 我想在 jQuery 中更改其文本 我该怎么做呢 helpTopicAnchorId text newText P S the jQuery 文档 http docs jque
  • Nodejs Base64 中的读取文件

    我正在尝试从客户端读取以 base64 编码的图像 如何使用nodejs进行阅读 My code add to buffer base64 image var encondedImage new Buffer image name base
  • Firefox 扩展中的 localStorage

    我正在尝试从 Firefox 扩展访问页面的 localStorage 我的理解是content给出了参考window当前页面的 当我尝试访问页面的 localStorage 时content localStorage 我想我正在得到它的参
  • 让 hashchange 事件在所有浏览器(包括 IE7)中工作

    我有一些代码 由另一位开发人员编写 在 WordPress 内部进行 AJAX 页面加载 例如 没有页面重新加载 当您单击导航项时 AJAX 会刷新主要内容区域 我的问题是它在 IE7 中被破坏了 我不知道从哪里开始调试 最初的开场白是 v

随机推荐

  • 从列表转换为数字

    我正在从列表形式强制转换为数字形式 如果有用的话 列表最初是从一个因素中绘制的 并且是 1x33 行 我的列表定义为 tmpseqsf 1 其中规定 TradeValue 1 72914431 2 25325 3 20139 4 因此 根据
  • 与基于类的方法相比,使用 Hooks 设置状态后重新渲染有什么区别?

    类组件 在 React 类组件中 我们被告知setState always导致重新渲染 无论状态是否实际更改为新值 实际上 一个组件will当状态更新到时重新渲染same以前的价值 文档 setState API 参考 https reac
  • ViewPager内部的TextView拦截触摸事件

    我有一个ViewPager包含两个片段 在任何片段中我都可以触摸一个地方 滑动即可切换到另一个地方fragment 其中一个片段包含一个列表 列表中的项目包含一项TextView和一个ImageView 问题是 如果您是从点击开始拖动的Im
  • 未定义的索引:php 脚本中的错误

    在 php 页面中我有以下代码 if REQUEST c I get error on this line itself Why pidis int REQUEST c 我不断收到未定义索引错误 在谷歌搜索上 我设法理解 如果我们尝试访问的
  • Visual Studio 设置以在运行时删除对 dll 文件的依赖

    到处都有人建议当 Visual Studio 在运行时找不到 DLL 时如何让 Visual Studio 知道 但我想知道在哪里删除该选项 以便 Visual Studio 在运行时不会尝试查找 dll 文件 我昨天也有类似的问题 但没有
  • Spring XML 406错误

    我正在尝试使用 Java 制作 RESTful 服务 使用多个教程和许多 StackOverflow 条目 不幸的是 我似乎无法让我的代码工作 当我尝试到达端点时 我一直收到 Http 406 任何帮助表示赞赏 GreetingContro
  • 工厂中的依赖注入

    我对 DI 很陌生 但我真的很想尝试使用它 有件事我不明白 这是一个简单的工厂伪代码 我经常使用 class PageFactory public function construct dependency list save refere
  • CLLocationManagerDelegate 协议中的挂钩

    我已经 3 天遇到问题了 我想在 CLLocationManagerDelegate 协议中挂钩此方法 void locationManager CLLocationManager manager didUpdateLocations NS
  • 在 Corona sdk 上保存高分?

    我想保存游戏中创建的高分 并且当玩家点击高分按钮时可以在主菜单中看到 有人可以帮助我吗 您可以使用SQLITE https docs coronalabs com api library sqlite3 index html将高分保存到数据
  • 使用 Puppet 配置远程规则集

    我正在尝试使普罗米修斯自动化node exporter和我的普罗米修斯服务器 为了node exporter我已经编写了一个模块来安装所有需要的软件包 设置 ipaddress基于facter还有更多 现在我想确保收集到的信息 hostna
  • Haskell-Stack:构建期间出现访问冲突错误

    过去几天我一直在尝试使用堆栈构建我的 Haskell 项目 但遇到了访问冲突错误 据我了解 我有最新的堆栈版本和 GHC 这一切最初都是有效的 直到我将一个库添加到我的 cabal 文件中 我现在已经将其删除 但错误仍然出现 我也恢复到我的
  • Flutter ListView收缩包装——嵌套ListView

    我在 ListView 中有一个 ListView 内部 ListView 不知道它的高度应该是多少 所以我必须用例如 SizedBox 给它一个特定的高度 然而问题是 我实际上希望内部 ListView 收缩包装 这样它就不会滚动 占用父
  • iPhone如何将一个视图控制器的视图添加到另一个视图控制器的视图?

    这一直在我的脑海里 我真的不知道如何正确地将一个视图控制器管理的视图添加到另一个视图控制器的视图中 这不起作用 因为视图未完成加载 self messageViewController PopupMessagesViewController
  • 如何创建 3 列响应式布局?

    我有一个 3 列布局 当从桌面访问它时 它显示如下 columnleft columncenter columnright 我希望从手机 平板电脑 调整大小浏览器查看它时是这样的 columnleft columncenter column
  • python 2.6 cPickle.load 导致 EOFError

    我使用 cPickle 来腌制整数列表 使用 HIGHEST PROTOCOL cPickle dump l f HIGHEST PROTOCOL 当我尝试使用以下代码来取消它时 我收到 EOFError 我尝试在 unpickle 之前
  • CNN 模型分类错误:logits 和标签必须可广播:logits_size=[32,10] labels_size=[32,13]

    这里我尝试在图像分类上运行 CNN 模型 这是批量大小和 13 个标签 Image batch shape 32 32 32 3 Label batch shape 32 13 Watch Back Watch Chargers Watch
  • 计算聚类的 F 度量

    谁能帮我计算一下F measure的总和吗 我知道如何计算召回率和精度 但不知道对于给定的算法如何计算一个 F 测量值 举个例子 假设我的算法创建m集群 但我知道有n相同数据的聚类 由另一个基准算法创建 我找到了一份 pdf 但它没有用 因
  • pandas 数据框的元组列表列表

    我有这个数组 它是相似性计算的结果 它是一个像这样的元组列表 example a b c d a1 b1 c1 d2 在示例中 有 121044 个列表 每个列表有 30 个元组 我想要一个 pandas Dataframe 就像元组的第二
  • 在 Vuetify 组合框中通过 @change 传递目标元素

    我需要通过目标事件updateTags方法 这是下面的组合框 当我打电话给comboActive方法我可以获得目标事件 KeyboardEvent isTrusted true key y code KeyY location 0 ctrl
  • Chrome 中的 FileReader 内存泄漏

    我有一个具有文件上传功能的网页 上传以 5MB 块执行 我想在将每个块发送到服务器之前计算其哈希值 块表示为Blob https developer mozilla org en docs Web API Blob对象 为了计算哈希值 我将