18

我注意到我在标题中提到的属性在我的页面中显着上升(尤其是“(关闭)”)。

此操作系统和/或浏览器是否受控制?我能做些什么吗?

(闭包)、(数组)、(编译代码)、(系统)等到底是什么?

另外,(数组)和“数组”有什么区别?

4

2 回答 2

17

关于你的问题:

问:(closure)(array)(compiled code)(system)等到底是什么?

Addy Osmani 的文章中的这段片段可能会有所帮助:

  • (全局属性) – 全局对象(如“窗口”)与其引用的对象之间的中间对象。如果一个对象是使用构造函数 Person 创建的并且由一个全局对象持有,则保留路径看起来像 [global] > (global property) > Person。这与对象直接相互引用的规范形成对比。出于性能原因,我们有中间对象。全局对象会定期修改,属性访问优化对非全局对象做得很好,但不适用于全局对象。

  • (roots) – 保留树视图中的根条目是具有对选定对象的引用的实体。这些也可以是引擎为其自身目的创建的引用。引擎缓存了哪些引用对象,但所有这些引用都是弱引用,并且不会阻止对象被收集,因为没有真正的强引用。

  • (closure) – 通过函数闭包对一组对象的引用计数

  • (array, string, number, regexp) – 对象类型列表,其属性引用 Array、String、Number 或正则表达式

  • (编译代码) ——简单地说,与编译代码相关的一切。脚本类似于函数,但对应于主体。SharedFunctionInfos (SFI) 是位于函数和编译代码之间的对象。函数通常有上下文,而 SFI 没有。

  • HTMLDivElement、HTMLAnchorElement、DocumentFragment等——对代码引用的特定类型的元素或文档对象的引用。

整篇文章还有许多其他有价值的关于堆分析的信息:http: //addyosmani.com/blog/taming-the-unicorn-easing-javascript-memory-profiling-in-devtools

还有你的另一个问题:

问:另外,(数组)和“数组”有什么区别?

根据 Addy 的描述,我的解释是这样的:(数组)是对象(任何类型)的集合,这些对象具有引用实际数组的属性。相反,Array是实际 Array 对象的列表。

于 2013-05-17T11:39:05.897 回答
2

闭包是一个能够引用在其直接范围之外声明的数据的函数。

这是一个例子:

var closure = (function() {
   var a = "some data";
   var b = "something else...";
   return function Closure() {
      // this function retains references to a and b.
   }
})();

在 Web 开发中,您最终使用闭包的最常见方式是将事件侦听器附加到 dom 节点。

前任:

$.ready(function() {
   var $elems = $("selector");
   var tools = new Tools();
   $elems.mousedown(function() { // <-- this has created a closure
      // We can refer to $elems and tools in here
      // and so as long as this function is held on to so are those variables to which
      // it has access
   });
});

如果您验证这一点并实际看到(关闭)计数上升

  1. 弹出打开铬
  2. 进行堆转储
  3. 跑: function DistinctName() {} function DistinctName2() {}

    在 javascript 控制台中

  4. 再做一个堆转储

  5. 从最底部的堆转储选项中选择“比较”。

您会看到它DistinctName并在该类别DistinctName2下显示为新的闭包。(closure)

v8 有一个“JIT”编译器,所以我假设(编译)是指 JIT 编译源。

我只能猜测(数组)和(系统)。

于 2012-05-20T23:51:14.890 回答