特权方法与公共方法,内存和性能考虑因素

时间:2013-10-04 23:47:33

标签: javascript

我正在重写一个Web应用程序,目前整个API的设计方式是所有对象的函数成员都是特权方法。如果我没有误解这些概念,特权方法会浪费内存,因为每个对象的实例都有一个副本,而公共方法可以节省内存,因为所有实例只有一个副本。在此之前没问题。

但是,我的应用程序中的大多数对象都是(动态创建的)DOM对象。目前它看起来或多或少是这样的:

function DOMObj(parent,tag,x,y,w,h,...){
   var obj = document.createElement(tag);
   .
   .
   .
   parent.appendChild(obj);
   obj.Method1 = function(){/* some code */}
   obj.Method2 = function(){/* some code */}
   .
   .
   .
   obj.MethodN = function(){/* some code */}
   return obj;
}
.
.
.
txt = DOMObj(document.body,"div",...); 
txt.innerHTML = "some text";

由于DOM本身负责创建对象,因此我不必使用 new 运算符,但是如果我将方法公开,我将不得不重写它:

function DOMObj(parent,tag,x,y,w,h,...){
   var obj = document.createElement(tag);
   .
   .
   .
   parent.appendChild(obj);
   this.DOMObj = obj;
}
DOMObj.prototype = {
   Method1: function(){/* some code */},
   Method2: function(){/* some code */},
   .
   .
   .
   MethodN: function(){/* some code */}
}
.
.
.
txt = new DOMObj(document.body,"div",...); 
txt.DOMObj.innerHTML = "some text";

在这种情况下,每次我创建一个新对象时,我都被迫使用 new 运算符,这显然会对内存消耗产生影响,但有多强?最重要的是,与我要节省的内存量相比,余额是正还是负?

我也会增加一小笔管理费用(如果你愿意的话,不知不觉),我读了某人的博客,与特权方法相比,如何说公共方法对绩效有积极影响,但他没有解释所谓的理由既没有显示数字是为了支持他的主张,那么这个说法是否属实?如果是的话,我将要添加的开销会使这个收益无效吗?还是我还会得到?如果是这样,至少在最慢的智能手机上是否会臭名昭着?

显然这个问题的答案取决于创建的对象的数量,方法的数量和Javascript引擎的内部,所以我(几乎)盲目地投入大量的精力去做一些可能有的东西可忽略不计或巨大的影响,这似乎不是很聪明,这也引出了我的核心问题:“有多大?”。或者换句话说,如何准确计算此类更改对我的应用程序性能的影响?,是否存在首先在某处执行此类计算所需的信息?至少我需要知道(根据一些可靠的数字)这样的改变是否值得付出努力。

任何有V8内部或任何其他JavaScript引擎经验的人都可以对此有所了解吗?

0 个答案:

没有答案