Arrays 在javascript中创建太多对象是否会影响性能?
我正在开发一个web应用程序,并用JavaScript创建许多对象,我需要在整个会话期间或网站打开时维护这些对象,并且我正在使所有对象引用单个全局对象。它会影响webb应用程序的性能吗Arrays 在javascript中创建太多对象是否会影响性能?,arrays,performance,object,javascript,Arrays,Performance,Object,Javascript,我正在开发一个web应用程序,并用JavaScript创建许多对象,我需要在整个会话期间或网站打开时维护这些对象,并且我正在使所有对象引用单个全局对象。它会影响webb应用程序的性能吗 var Obj1 = somethig; var obj200 = something; window.global.Obj1 = Obj1; window.global.Obj200 = Obj200; 免责声明:我是InternetExplorer9及更高版本中ChakraJavaScript引擎的软件工程
var Obj1 = somethig;
var obj200 = something;
window.global.Obj1 = Obj1;
window.global.Obj200 = Obj200;
免责声明:我是InternetExplorer9及更高版本中ChakraJavaScript引擎的软件工程师(来自18号楼的您好!) 简而言之:“这取决于”-我们需要知道您正在创建多少对象,它们有多复杂(因为JavaScript没有类,但有原型和实例),您创建它们的频率,以及您的脚本/程序是否会导致GC收集对象(而GC运行并不漂亮) 一些提示:
var Obj1
与window.Obj1
是一样的
最后,一个protip:只给出构造函数的TitleCase
名称,否则所有其他函数(变量、参数、局部变量等)lowerCase
名称。调用实例Obj1
使我的脸抽搐
一如往常,黄金法则适用:过早优化是万恶之源-在对代码进行重大更改之前,先分析一下代码是否存在问题(顺便说一句,IE 11的F12工具非常适合检查代码的内存和处理性能-我不是没有偏见!)。“太多了”这意味着超出了需要,这本身就是一个问题。请注意,您显示的代码段没有创建任何对象。它只是分配变量和属性来指向已经存在的变量和属性。我假设
something
是一个对象文字。同样值得澄清的是,即使不使用var
关键字,变量也会自动成为window的一个属性,这实际上要糟糕得多,尤其是在函数内部。此外,不能删除使用var
关键字声明的变量:var x=7;删除x代码>将失败,其中y=3;删除y
将成功删除变量,并因此对其进行GCing。@Isos使用delete
运算符仅从其父对象中删除属性;它不一定触发GC,也不为GC提供内存,GC也不必首先收集对象。不必要的delete
ing属性只是浪费周期。因此,如果我在内存中有某个对象,这是window的一个属性,并且删除成功,该对象会发生什么情况?@istos如果任何其他对象持有对已删除属性持有的值的引用,则它将保留在内存中。如果GC确定没有对该对象的强引用(与弱引用比较,例如WeakMap),则将收集该对象并释放内存。GC传递是非确定性的,并且不是由delete
操作触发的。谢谢您,非常感谢。
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 );
}
var Obj1 = somethig;
var obj200 = something;
window.Obj1 = Obj1; // there is no `window.global` object
window.Obj200 = Obj200;