开发者

Memory efficiency in objects

Is either of these patterns more or less efficient than the other?

Pattern 1:

var jso = new Class({
   initialize: function () {
     // code
   },
   hiliteField: function () {
     // code
   }
});

Pattern 2:

var jso = new Class({
   initialize: function () {开发者_开发知识库
     this.hiliteField = hiliteField.bind(this);
     // code  
   }
});
var hiliteField = function () {
  // code
}


Having multiple methods that are external to the class and up the scope chain, as opposed to behind the class as 'namespaced' methods can't be better, imo.

Don't like pattern #2 for several reasons:

  • manageability - having to bind a reference to each external function into the class is going to be hard to do.
  • readability - having to indicate which function is being used by what class is going to be a task
  • extendibility - because the functions are outside of the jso class prototype, classes that extend jso or use it as a mixin won't be able to access the external methods.

That being said, from a memory standpoint - just do a test but I would say, pattern 1 is likely to have a smaller overhead because it's defined once on the prototype and not in every instance individually.


Pattern 2 will use more memory! It's the basics of prototypal inheritance

Why? In Pattern 1 every instance of jso will reference jsoInstanceX.hiliteField to jso.prototype.hiliteField. Read: hiliteField will not be a copy, it will only exist in jso.prototype.

In Pattern 2 you create a function wrapper each time you assign hiliteField.bind(this);. The additional memory is not much, but it's also slower, especially with impact on Class initialization.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜