1

我正在构建一个带有几个搜索属性的简单搜索面板和一个结果面板的应用程序。在结果面板中,我使用Slickgrid以表格形式呈现数据。

经过几次搜索(对服务器的 AJAX 调用),页面加载太多,最终在一段时间后崩溃。我检查了 DOM 计数和 JavaScript 堆使用情况是否存在内存泄漏。我在那里找不到任何问题。但是,当我运行实验性本机内存分析器时,我看到“JavaScript 外部资源”部分使用了 600+ MB 内存。在运行垃圾收集器时,它正在下降到几 MB。我在这里有几个问题:

  1. 什么有助于“JavaScript 外部资源”部分?我认为它对应于从服务器传输的 JSON 数据/JavaScript 源。仅供参考,来自服务器的 gzip 压缩 JSON 响应约为 1MB。
  2. 为什么 Chrome 不主动释放内存而不是使页面崩溃?同样,当我手动运行垃圾收集器时,它正在释放“JavaScript 外部资源”使用的内存。

如何解决原来的问题?

4

1 回答 1

1

JS Heap Profiler 对 javascript 中的对象进行快照,但 javascript 代码可能会在“Int8Array”、“Uint8Array”、“Uint8ClampedArray”、“Int16Array”、“Uint16Array”、“Int32Array”、“Uint32Array”的帮助下使用本机内存, “Float32Array”和“Float64Array”。因此,当您拍摄快照时,它将只有指向本机内存块的小型包装器。不幸的是,堆快照不提供有关用于此类对象的本机内存的数据。本机堆快照能够计算该内存,现在我们知道该页面通过数组或外部字符串使用本机内存。

我想知道你是如何检查页面没有内存泄漏的?您是使用三个快照技术还是只检查特定对象? 追踪 JavaScript 内存泄漏的工具

于 2013-02-13T06:47:24.400 回答