bli*_*lum 5 javascript garbage-collection memory-management google-chrome-devtools
在JavaScript库(铆钉)中查找性能问题时,我发现垃圾收集在运行中发生了三到四次,占用了大约15%的执行时间(使用Chrome DevTools JS Profile).
由于垃圾收集的原因,至少有30个临时功能/对象被创建为潜在候选者的地方.
我想知道是否有办法找到哪些函数负责分配被垃圾收集的内存,所以我可以集中我的性能调优.
我记录了Heap Allocation TimeLine,但它没有区分垃圾收集的内存和仍然保存引用的内存(DevTools doc中没有指向灰色栏)
还记录堆分配配置文件没有运气.
在Profiles
选项卡处DevTools
选择Record Heap Allocation
. Wrapjavascript
应该在调用中进行评估,setTimeout()
并将持续时间设置为足够的时间,以便在调用Start
传递给的函数之前单击;setTimeout
例如
<!DOCTYPE html>
<html>
<head>
<script>
t = 5;
setTimeout(function() {
(function test1() {
var a = 123;
function abc() {
return a
}
abc();
}());
}, 10000)
</script>
</head>
<body></body>
</html>
Run Code Online (Sandbox Code Playgroud)
当setTimeout
被称为蓝色条时,时间轴上可能会出现一个灰色条。点击Ctr+E
可停止记录堆配置文件。
在时间线图表中选择蓝色或灰色条。在下拉菜单中选择Containment
,默认选项为Summary
。选择
[1] :: (GC roots) @n
Run Code Online (Sandbox Code Playgroud)
在哪里n
是一个数字。
单击 左侧的三角形来展开选择[1] :: (GC roots)
。选择 的一个元素[1] :: (GC roots)
,查看显示的Distance
、Shallow Size
和Retained Size
列以进行选择。
要检查特定功能,请滚动至
[2] :: (External strings) @n
Run Code Online (Sandbox Code Playgroud)
应该列出全局变量和函数调用的位置;即,"t"
从"setTimeout"
上面javascrip
。检查相应的Distance
、Shallow Size
、 和Retained Size
列进行选择。