List指令 使用的LS算法 在应付超大数组时 有性能问题
Closed this issue · 2 comments
目前版本 当你 没有选择 track by 语法时 (强烈建议0.4.0版本后的开发者使用track by 语法),比如
{#list Expression as item} // 普通
{#list Expression as item by item_index} // 而非高性能的 track by 语法
Regularjs 是使用的 莱文斯坦距离来解决的两数组的diff.
众所周知, 使用LS算法可以计算出最小编辑距离, 使得我们可以以最小的DOM代价来更新VIEW. 因为一般意义上,尽量规避DOM操作是一个性能的保证, 但是其实这是视场景而定。。。
这个算法的复杂度是 O(n^2) , 当数组大小超过一定数值时,性能会受到平方级的影响.
所以后续版本必须在大数组时,做必要的优化, 在dom操作和数组运算之间找一个平衡点。
也许会在0.5.0版本解决, 当然这个并不影响开发者使用Regularjs, 一切都是内部改动.
track by有啥用呢,不是不加也可以取到itemindex吗? 发自网易邮箱大师 在2015年12月07日 14:37 ,ZhengHaibo写道: 目前版本 当你 __没有选择 track by 语法时 __ (强烈建议0.4.0版本后的开发者使用track by 语法),比如 {#list Expression as item} // 普通
{#list Expression as item by item_index} // 而非高性能的 track by 语法 Regularjs 是使用的 莱文斯坦距离来解决的两数组的diff. 众所周知, 使用LS算法可以计算出最小编辑距离, 使得我们可以以最小的DOM代价来更新VIEW. 因为一般意义上,尽量规避DOM操作是一个性能的保证, 但是其实这是视场景而定。。。 这个算法的复杂度是 O(n^2) , 但数组大小超过一定数值时,性能会受到平方级的影响. 所以后续版本必须在大数组时,做必要的优化, 在dom操作和数组运算之间找一个平衡点。 也许会在0.5.0版本解决, 当然这个并不影响开发者使用Regularjs, 一切都是内部改动. — Reply to this email directly or view it on GitHub.