【问题标题】:How to keep track of how many arrays are created in Javascript?如何跟踪在 Javascript 中创建了多少个数组?
【发布时间】:2017-03-15 08:04:15
【问题描述】:

我希望能够跟踪某个程序使用了多少个数组,以便确定是否分配了不必要的内存。我遇到的问题是 Javascript 的构造,即数组文字 [] 没有触发Array#constructor。我还有其他方法可以跟踪数组的使用情况吗? ES5 和/或 ES6 及更高版本。

var arrayConstructor = Array // store reference
window.arrCount = 0
window.Array = function() {
  arrCount++;
  return new Array();
}

var arr1 = new Array
window.arrCount // 1

var arr2 = []
window.arrCount // 1 : NOT WORKING!

【问题讨论】:

  • 你能拦截到Array.__proto__.constructorObject.__proto__.constructor的电话吗?
  • @DavidEhrmann 不,我认为问题在于 javascript 在使用文字时会短路 Array 构造函数。
  • 不,您不能覆盖数组文字,请参阅:stackoverflow.com/questions/25084889/…
  • 另外,X/Y 问题。您真的在问“我如何分析 Javascript 代码?”
  • @DavidEhrmann 我很抱歉,我正在尝试找出其他语言可以轻松处理的一件事,我只是好奇 javascript,虽然改进了许多很棒的功能,但可以提供一个本机钩子来允许进行内部分析。

标签: javascript optimization ecmascript-6 benchmarking


【解决方案1】:

几乎每个网络浏览器都有一个 JavaScript 分析器。分析器的目的是跟踪内存使用情况、帧渲染速度、CPU 使用情况等。

  • 打开 Chrome 开发者工具 (F12)
  • 点击“时间轴”标签
  • 确保在名为“Capture”的栏中选中“Memory”
  • 按左上角的录制按钮
  • 刷新页面
  • 页面加载后停止录制
  • 查看“JS 堆”图表,了解您的内存去了哪里

例如,Chrome 的内存分析器在记录 Stack Overflow 的热门问题页面的加载时看起来像这样。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-15
    相关资源
    最近更新 更多