所以我有一个相当大的应用程序构建在角度上,有很多嵌套状态,很多指令,数据表和东西。
我们最近决定切换到完整的单页,而不是只有几个小的单一应用程序部分(比如文章、人员、仪表板以前都是一个小的单页应用程序),所以我开始更多地处理性能。在 Chrome 中,你不会在视觉上注意到任何东西,而在 Firefox 中,我认为随着时间的推移,它会变得更慢。
所以我开始使用三快照技术来看看发生了什么。但我不完全确定该怎么做。
IMAGE https://i.stack.imgur.com/wwa5C.png
- 快照大小将每个快照的大小加倍(第一个 15mb、第二个 67mb、第三个 120mb),这意味着什么吗?
- 有很多红色 dom,例如 4000 个红色 div
现在我觉得那些红色的div、spans和anchor主要是我的错,我正在做一些不那么常见的事情来渲染这些数据表,使用我制作的这个指令,而且我还觉得一些堆对象是结果那些 dom 元素没有被正确删除。
这就是 table 指令的本质作用
var rows = '<div class="row" ng-repeat="item in items">';
_.each(columns, function(column) {
// pass cell as a string from $templateCache, instead of having <table-cell type="column.type"> which loaded correct templateUrl depending on what was passed via type attr
var cellTemplate = $templateCache.get(column.type);
rows += '<div class="column">' + cellTemplate + '</div>';
});
rows += '</div>';
// el is from directive link function
el.html(rows);
$compile(el.contents())(scope);
我这样做的原因是因为当我尝试使用嵌套时ng-repeat
对于行和列以及<table-cell>
对于单元格指令,渲染花费的时间太长,即使只有大约 6 列和 50 行。
所以我认为正在发生的事情是,该表中的所有 div 都没有被正确删除,因此每次加载该表指令时它们都会不断堆积。
现在即使我处理那个分离的 dom 树..所有其他东西怎么样,我怎么知道我应该尝试和处理哪些,以及哪些对于角度来说是常见的并且不会真正影响性能?
// 在 plunker 上编辑表指令http://plnkr.co/edit/1fZi6mVn2jBIGF0Q2a40?p=preview http://plnkr.co/edit/1fZi6mVn2jBIGF0Q2a40?p=preview