我正在尝试比较角度的$ filter服务和javascript的Array.filter方法所花费的时间。
此问题仅可在chrome中重现。
如果我同时运行这两种方法,那么每次一个过滤器与其他过滤器相比,过滤阵列的时间几乎要多10倍,但是如果我分别运行它们,那么它们两者的时间几乎相等。
使用Array.filter方法: -
arr.filter(function(a){
return ((a.buyout - 33333333) === 0);
});
使用$ filter: -
$filter('filter')(resp.alliance.auctions, function(data){
return ((data.buyout - 33333333) === 0);
});
这里有过滤器的任何缓存问题(或功能)吗?
带有工作代码的plnkr: - http://plnkr.co/edit/A5UeZK6Jnafp9SkVBxZi
答案 0 :(得分:3)
代码优化将在这里发挥作用。将首先执行的代码变体将首次访问返回的结构。 Chrome可能在第一次访问实际发生之前保存了一些资源,但是一旦您 进行访问,Chrome就必须动态访问这些数据。
当您更改实际执行的顺序时,例如通过将Array#filter
块包装在setTimeout
中,您会注意到$filter
方法会消耗更多时间,{ {1}}一个胜利。实际上,首先执行的开销比第二个开销更多。
为了进行正确的比较,您必须首先访问输入数组Array#filter
而不测量时间,然后才执行这两个变体,以便它们在相同的情况下尽可能多地启动。
通过以下安排,时间消耗的差异非常小:
$filter
查看您的updated plunker