_.each性能问题 - Underscorejs

时间:2016-08-25 15:12:17

标签: underscore.js

对象数组包含700个对象。我使用下划线_.each进行计算以获得平均值。代码工作正常,但计算时滞后时间很长。请参考以下代码并告知我。

typesOverall=
Analytics:{[{
Analytics:{
area:"Digital"
category:"Analytics"
qId:"iBWmASYL6HQMtpzGH"
type:"Reinvent"
userId:"2PXk3uJqKrWeJW3RW"
val:1.333333333333333
},
{
Analytics:{
area:"Digital"
category:"Analytics"
qId:"iBWmASYL6HQMtpzGH"
type:"Reinvent"
userId:"2PXk3uJqKrWeJW3RW"
val:1.333333333333333
}...........]}

_.each(typesOverall, function(val, key) {
          result[key] = _.reduce(val, function(memo, v) {
            return memo + v.val;
          }, 0) / val.length * 10;
      });

1 个答案:

答案 0 :(得分:1)

这是下划线用于实现_.each功能的代码,

// The cornerstone, an `each` implementation, aka `forEach`.
// Handles raw objects in addition to array-likes. Treats all
// sparse array-likes as if they were dense.

_.each = _.forEach = function(obj, iteratee, context) {
  iteratee = optimizeCb(iteratee, context);
  var i, length;
  if (isArrayLike(obj)) {
    for (i = 0, length = obj.length; i < length; i++) {
      iteratee(obj[i], i, obj);
    }
  } else {
    var keys = _.keys(obj);
    for (i = 0, length = keys.length; i < length; i++) {
      iteratee(obj[keys[i]], keys[i], obj);
    }
  }
  return obj;
};
  

很明显,他们创建了这个功能,以便快速使用。它可用于任何更简单的数据或性能不是很大的问题。

     

但是,专家总是鼓励您实施自己的each功能以优化计算。

     

另一个重要的事情是,如果您非常关注code performance,那么您可以考虑更改data architecture并尽可能多地实施优化代码。

     

当它进入优化的代码实现时,您可能需要充分了解Big(O)符号,即最佳,最差和平均情况。