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列进行选择。