我注意到我在标题中提到的属性在我的页面中显着上升(尤其是“(关闭)”)。
此操作系统和/或浏览器是否受控制?我能做些什么吗?
(闭包)、(数组)、(编译代码)、(系统)等到底是什么?
另外,(数组)和“数组”有什么区别?
我注意到我在标题中提到的属性在我的页面中显着上升(尤其是“(关闭)”)。
此操作系统和/或浏览器是否受控制?我能做些什么吗?
(闭包)、(数组)、(编译代码)、(系统)等到底是什么?
另外,(数组)和“数组”有什么区别?
关于你的问题:
问:(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 对象的列表。
闭包是一个能够引用在其直接范围之外声明的数据的函数。
这是一个例子:
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
});
});
如果您验证这一点并实际看到(关闭)计数上升
跑:
function DistinctName() {}
function DistinctName2() {}
在 javascript 控制台中
再做一个堆转储
您会看到它DistinctName
并在该类别DistinctName2
下显示为新的闭包。(closure)
v8 有一个“JIT”编译器,所以我假设(编译)是指 JIT 编译源。
我只能猜测(数组)和(系统)。