在JavaScript库(铆钉)中查找性能问题时,我发现垃圾收集在运行中发生了三到四次,占用了大约15%的执行时间(使用Chrome DevTools JS Profile).
由于垃圾收集的原因,至少有30个临时功能/对象被创建为潜在候选者的地方.
我想知道是否有办法找到哪些函数负责分配被垃圾收集的内存,所以我可以集中我的性能调优.
我记录了Heap Allocation TimeLine,但它没有区分垃圾收集的内存和仍然保存引用的内存(DevTools doc中没有指向灰色栏)
还记录堆分配配置文件没有运气.
javascript garbage-collection memory-management google-chrome-devtools
我使用JavaScript中的以下代码行动态创建元素:
const element = document.createElement("img");
Run Code Online (Sandbox Code Playgroud)
我能够访问和修改元素的属性,所以它显然存在,但我无法弄清楚它是存储在HTML节点树中的位置.
element.parentNode和element.previousSibling都返回null.有谁知道它实际位于何处?
我从来没有真正考虑垃圾收集,我不知道在制作小型javascript游戏/应用程序时是否有必要考虑.任何建议都表示赞赏,但最后我会问我的具体问题.
很多时候我都会编写这种形式的代码:
var foos=new Array();
generateFoos();
function generateFoos()
{
foos=[];
for (fooIndex=0;fooIndex<numberOfFoos;fooIndex++)
{
foos[fooIndex]=new foo(Math.random(),Math.random());
}
}
function foo(bar,bas)
{
this.bar=bar;
this.bas=bas;
}
Run Code Online (Sandbox Code Playgroud)
所以我的问题是,当我说foos=[](第5行)时,这是从内存中删除该数组中的对象还是在某处浮动,使程序变大和变慢?如果我想在generateFoos()每次用户按键时调用一次时间,我该怎么办?
谢谢!