我正在开发一个Web应用程序并在JavaScript中创建许多对象,我需要在整个会话期间或网站打开时维护这些对象,并且我将所有对象引用到单个全局对象。它会影响webb app的性能吗?
var Obj1 = somethig;
var obj200 = something;
window.global.Obj1 = Obj1;
window.global.Obj200 = Obj200;
答案 0 :(得分:9)
免责声明:我是Internet Explorer 9及更高版本中Chakra Javascript引擎的软件工程师(来自18号楼的Hello!)
简而言之:“它取决于” - 我们需要知道你正在创建多少个对象,它们有多复杂(因为JavaScript没有类,但是原型和实例),创建它们的频率,以及如果你的脚本/程序会导致GC收集对象(并且GC运行不是很好)。
一些提示:
为:
for(var i = 0; i < 1000; i++ ) {
var foo = { baz: function() { return 5; } };
foo.bar();
}
好:
function Foo() { } // `Foo` constructor.
Foo.prototype.baz = function() { return 5; };
for(var i=0; i < 1000; i++ ) {
var foo = new Foo();
foo.bar();
}
也很好:
function Foo() { }
Foo.baz = function(foo) { return 5; };
for(var i=0; i < 1000; i++ ) {
var foo = new Foo();
Foo.bar( foo );
}
至于您的代码示例,如果您位于根范围(称为global
,在浏览器中由window
对象设置别名),则var
关键字具有效果制作财产。所以这个:
var Obj1 = somethig;
var obj200 = something;
window.Obj1 = Obj1; // there is no `window.global` object
window.Obj200 = Obj200;
...实际上并没有做任何事情:var Obj1
与window.Obj1
相同。
最后,一个protip:只给出Constructor函数TitleCase
名称,否则其他所有(vars,parameters,locals等)lowerCase
名称。调用实例Obj1
让我的脸抽搐。
与往常一样,黄金法则适用:过早优化是万恶之源 - 在对您的代码进行重大更改之前,先查看代码 以查看是否存在问题代码(和IE 11的F12工具非常适合检查代码的内存和处理性能,顺便说一下 - 不是我没有偏见!)。