【发布时间】:2011-05-27 07:04:29
【问题描述】:
我想知道哪种情况的“开销”更大:
1) 案例 1:500 万个对象共享 30 个功能。每次调用函数时,都会产生开销,因为需要执行 f.call(instance, arg1, arg2, etc)
//example code
function makeObject()
{
return { method1:func1,
method2:func2,
...
method30:func30 };
}
2) 案例 2:500 万个对象,每个对象有 30 个函数(= 1.5 亿个单独的函数实例)。每次调用函数时,都没有“路由开销”,但当然会牺牲更多实例
//example code
function makeObject()
{
return { method1:func1.bind(asd),
method2:func2.bind(asd),
...
method30:func30.bind(asd) };
}
500 万只是我的手指打出的一个数字,而我的大脑仍在计算一个很好的数字作为示例。
基本上我想知道我们应该尽可能共享函数还是创建新函数?
(你可以假设我永远不会在整个页面的任何地方使用 eval 函数)
【问题讨论】:
-
我假设这 5m 个对象是动态创建的?
-
运行测试。这是唯一知道或确定的方法。 (为什么不直接使用“原型链”,让引擎“共享”功能?)
-
500 万将是不现实的,可能仅用于基准测试目的