2013-02-14 56 views
0

这个问题可能与此有重复,但我还没有完全找到具体解决我的问题的方法。Javascript对象性能偏好

假设我建立一个web应用程序,将包含以下之一:

  1. 甲JS对象与约100性能,其中5是具有也许10或15的属性每次约2子对象/ 3是功能。因此,像:

    Obj={ 
        x:y, 
        y:z, 
        obj1:{ 
         func:func(), 
         num:1, 
         func2:func2() 
        }, 
        obj2:etc 
    } 
    
  2. 或几个不同的对象那里仍然是一个有100点左右的属性,但其他对象将运行功能将生活在全局命名空间中,这样的事情:

    Obj={ 
        x:y, 
        y:z, 
        etc:andthensome 
    } 
    obj1={ 
        func:func(), 
        num:1, 
        func2:func2() 
    } 
    obj2={ 
        etc:'I am also a larger objects with functions' 
    } 
    

第一种方式保持了全局命名空间更清洁,反而使得更多的递归特性和功能进行搜索,并可能使得保持this直稍微混乱。

第二种方式更容易理解,但是将更多的对象添加到全局名称空间中,并且也可能执行较慢(这是问题类型)。

我的问题是,使用某种方式或其他方式有什么重大的好处 - 或者它们都是“好的”,都是“坏的”?

我知道有很多有开发者优先做的,所以问过类似的问题的另一种方式 - 接近我真的很想知道:

是使用许多更小的物体时对性能的影响更大,或一个或几个大对象与大量的子对象和功能等?

+0

为什么不对[jsperf](http://jsperf.com/)运行一些测试? – zzzzBov 2013-02-14 17:15:38

回答

0

查找不应该有任何显着的性能影响,代码结构与此无关。这些结构中的任何一个仍然只包含对象的引用,这些对象的查找时间无论如何都是相同的。

您应该构建您的对象以匹配您的数据并提高代码的清晰度。如果一个对象与另一个对象分开关注,请不要将它作为属性。如果它直接相关,那么它可能是另一个对象的属性。这里没有真正的性能问题,这是关于如何构建代码,使其易读,清晰和易于使用。

+0

你有任何数据来备份你的声明吗? – zzzzBov 2013-02-14 17:15:03

2

Fewer lookups are more performant,但没关系。

您应该优化代码以便于维护,并且只有在性能成为问题时才担心性能。

更重要的是,如果性能成为问题,请使用性能分析工具来查找代码中的瓶颈。至于更多的全球性污染,除非你明确地希望它们在那里,否则不应该将对象添加到全局命名空间。为避免污染,所有代码都属于Immediately Invoked Function Expression (IIFE)

(function() { 
    var obj = { 
     foo: 'bar', 
     ... 
    }; 
}()); 
console.log(window.obj); //undefined, no accidental global pollution