That does sound like a great improvement, Harbs. Congrats on the massive
memory improvements!

If the 'subclass' approach for attributes and text was not the main basis
for achieving the improvements, do you consider that we can avoid those
subclasses and restore the more conforming actionscript 3 implementation?

If that change with subclasses was for ease of debugging only, then I'd be
keen to find better ways to make debugging easier as I mentioned elsewhere,
keeping language conformance for what is a core as3 type, and therefore
keeping the best chance of what we have working with all legacy code.






On Wed, Dec 11, 2019 at 1:55 AM Harbs <[email protected]> wrote:

> One thing to keep in mind with XML:
>
> If you keep even a single node (element or attribute) in memory, that will
> retain your entire tree.
>
> Make sure you use copy() (or setParent(null)) to get rid of parent
> references for leaf nodes that might be kept.
>
> HTH,
> Harbs
>
> > On Dec 10, 2019, at 1:14 PM, Piotr Zarzycki <[email protected]>
> wrote:
> >
> > Hi Harbs,
> >
> > Great work! We are using in our app XML - didn't check earlier memory
> > consumption, but it looks like really good improvement.
> >
> > Thanks,
> > Piotr
> >
> > wt., 10 gru 2019 o 11:04 Harbs <[email protected]> napisał(a):
> >
> >> I just added code like this to the constructor:
> >>
> >> if(!_class_initialized)
> >> {
> >>        Object.defineProperty(XML.prototype,"0",
> >>                        {
> >>                                "get": function():XML{return this as
> XML},
> >>                                "set": function():void{},
> >>                                enumerable: true,
> >>                                configurable: true
> >>                        }
> >>        );
> >>        _class_initialized = true;
> >> }
> >>
> >> where _class_initialized is a static boolean.
> >>
> >> This sliced the memory requirements for XML instances in roughly half!
> >>
> >> Not totally thrilled with the conditional code in the constructor, but I
> >> don’t have any better ideas at the moment.
> >>
> >> Between the improvements I’ve made to XML and aggressive work on
> removing
> >> extraneous object references (particularly XML), I’ve reduced the memory
> >> footprint of my app for a particularly complex document from about 155MB
> >> down to 103MB.
> >>
> >> The memory impact of using XML went from about 75MB down to 22MB.
> (That’s
> >> for well over 100,000 nodes kept in memory.)
> >>
> >> Not bad for a few days work… ;-)
> >>
> >> Harbs
> >>
> >>> On Dec 9, 2019, at 7:19 PM, Greg Dove <[email protected]> wrote:
> >>>
> >>> btw I am still happy to look into the possibility of doing a first time
> >>> 'get' access for the Class itself on its package that runs static code,
> >> but
> >>> as Alex pointed out, it could have issues with the minified version, so
> >> it
> >>> is more at 'investigate' rather than 'solution' stage. I have not
> >>> prioritized this for now...
> >>>
> >>>
> >>> On Tue, Dec 10, 2019 at 6:13 AM Greg Dove <[email protected]> wrote:
> >>>
> >>>> This might be a good candidate for getting the static initialization
> >> code
> >>>> block working (it is currently not in js).
> >>>>
> >>>> We discussed that recently in another thread.
> >>>>
> >>>> public class MyClass{
> >>>>
> >>>> {//static init block
> >>>> COMPILE::JS{
> >>>> Object.defineProperty(MyClass.prototype,"0",
> >>>>       {
> >>>>               "get": function(){return this},
> >>>>               "set": function(){},
> >>>>               enumerable: true,
> >>>>               configurable: true
> >>>>       }
> >>>> );
> >>>> }
> >>>> }
> >>>>
> >>>> public function  MyClass (){
> >>>>
> >>>> }
> >>>>
> >>>> }
> >>>>
> >>>> On Tue, Dec 10, 2019 at 6:00 AM Alex Harui <[email protected]>
> >>>> wrote:
> >>>>
> >>>>> Did you try:
> >>>>>
> >>>>> function get 0():XML { return this; }
> >>>>> function set 0(value:XML) {}
> >>>>>
> >>>>> Within a COMPILE::JS, I think the variables:
> >>>>>
> >>>>>  this["constructor"]
> >>>>>  this["__proto__"]
> >>>>>
> >>>>> are available.
> >>>>>
> >>>>> HTH,
> >>>>> -Alex
> >>>>>
> >>>>> On 12/9/19, 8:27 AM, "Harbs" <[email protected]> wrote:
> >>>>>
> >>>>>   In my question to minimize memory requirements in XML, I’d like to
> >>>>> optimize the zero index accessor.
> >>>>>
> >>>>>   Right now, we have Object.defineProperty in the XML constructor.
> The
> >>>>> byproduct of that is we have a function defined on every single
> >> instance of
> >>>>> XML. Ideally that should be on the prototype object. This should
> >>>>> drastically reduce the memory requirements for instantiating XML.
> >>>>>
> >>>>>   In JS, that’s pretty easy to do:
> >>>>>
> >>>>>   Object.defineProperty(thePrototype,"0",
> >>>>>       {
> >>>>>               "get": function(){return this},
> >>>>>               "set": function(){},
> >>>>>               enumerable: true,
> >>>>>               configurable: true
> >>>>>       }
> >>>>>   );
> >>>>>
> >>>>>   I’m struggling with how to do it in AS3. How can we get a reference
> >>>>> to the prototype outside the constructor or have the compiler
> construct
> >>>>> this kind of function automatically?
> >>>>>
> >>>>>   Thoughts?
> >>>>>   Harbs
> >>>>>
> >>>>>
> >>
> >>
> >
> > --
> >
> > Piotr Zarzycki
> >
> > Patreon: *https://www.patreon.com/piotrzarzycki
> > <https://www.patreon.com/piotrzarzycki>*
>
>

Reply via email to