[CPS-devel] Re: [Nuxeo-checkins] r33366 - in CPSDocument/trunk: . skins/cps_document

Jean-Marc Orliaguet jmo at ita.chalmers.se
Thu Feb 23 19:18:35 CET 2006


Tarek Ziadé wrote:

>
>>Tarek,
>>
>>you only need to use a class if you want to pass some arguments to the
>>constructor otherwise use a literal object like
>>var CPSMystuff = {...}
>>
>>Besides, your pattern creates memory leaks!, if you instanciate a new
>>object or a class just to simulate a namespace, your browser will run
>>out of memory sooner or later.
>>    
>>
>
>?
>
>  
>

Your pattern of creating namespaces using classes creates memory leaks, 
I'll post a demo, so you can see for yourself..

>>think about what happens when you do:
>>
>>   var CPSMyStuff = Class.create();
>>
>>   CPSMyStuff.prototype = { buttonClick: function () {
>>   ...
>>   }
>>   }
>>
>>
>>   var my_stuff = new CPSMyStuff(); <==== put that in a loop and what
>>your browser die...
>>   my_stuff.buttonClick()
>>
>>    
>>
>:)
>
>why do you want to put that in a loop ?
>sorry i don't get that point, 
>put a loop over any instanciation and it consumes memory, yes.
>
>  
>

The browser's garbage collector is called when the page is closed or 
reloaded. So as long as you run the application on a same page, it is as 
if you
were inside a loop. Putting the code inside a loop helps you identify 
memory leaks as the ones you have just created.


>Jean-Marc,
>
>i think you are mixing for this particular use case,
>between the fonction concept, the class concept, and the namespace concept,
>the objective is not to create one instance of a given class type for
>just one function.
>
>  
>

I know, you could add as many functions in the example that I gave as 
you want, there would be no difference, but before that, look again how 
prototype.js or scriptaculous are written: top-level namespaces are 
object literal, then inside these objects (Form, Element, ..) you have 
functions, and classes, variables.

so it's not even as you say it is.


>like i said you can hook javascript code any way you want. but we should
>try  to think o-o a bit here, for reusability, on the top of prototype
>framework.
>
>  
>

yes, but not everything needs to be a class either, for instance in 
Element.getStyle(obj), Element is not a class because it doesn't need to 
be, it is a collection of object that are classes or function, but the 
object corresponding top the 'Element' namespace needs not be a class.

good example of classes are Effects, Widgets, ... because they 
correspond to individual instances that have a identity of their own.


>the o-o way would be to ask ourselves: where would the buttonClick
>function fit the best ?
>  
>

in OO way you should first have an object.

>is it a simple, independant function ? or is it related to an object ?
>could it be added in a class that gathers all functions aimed to
>interact with forms, with the
>whole container ?
>
you need an object first. In some cases when it makes no sense to 
associate functions to classes, you will simply place them under a same 
object's namespace, as it's the case in prototype's Position object 
(which gives some information about the position of an object on the 
page).  The reason Position is not a class is because you'd run out of 
memory very fast if instead of writing:

    var position = Position.page(element)

you wrote (as you've already suggested)

    var positionInfo = new Position(element);
    var position = positionInfo.page()

think about a drag-and-drop situation for instance.



> 
>can it evolve and start to interact with other functions ? etc...
>
>  
>

I know, I know, but that's not the point.

>I think we can discuss all this with the material i am doing  in the
>incoming CPS javascript guideline.
>
>thanks for this feedback, i really think the guideline will be improved
>through this kind of talks.
>
>
>Tarek
>
>  
>

what about the memory leaks?

/JM



More information about the cps-devel mailing list
More information about CPS: CPS project - CVS - API

Hosting: Nuxeo: Zope service provider


This list archive provided by Nuxeo, the leaders of open source ECM. Check out the Nuxeo 5 open source, standards-based ECM project.