Hi,
While making a more powerful tree-view code, I was making a Litelayer, that
doesn't have any events etc, but renders much faster, and I noticed that
there is a way to speed up the initial creation of dynlayers too.

I got it working on browsers supporting getElementById only, others remain
at the same speed (although document.all should work too)

What it is, is if you remove these lines from specificCreate():
     // this.elm=parentElement.children[parentElement.children.length-1];
     // this.css=this.elm.style;
     // this.doc=this.parent.doc;

the rendering of 1000 layers goes from 8.6 seconds to 5.4 seconds. (the
liteLayer does it in 3.7 sec)

the more layers, the bigger the difference.

Now of course we need this.elm to be set, but only if we are going to
manipulate a layer. So, if we add something like this:

DynLayer.prototype.getValues=function() {
 if(document.getElementById) {
  this.elm=document.getElementById(this.id)
  if(this.elm){
      this.css=this.elm.style;
      this.doc=this.parent.doc;
      this.css.zIndex=this.z;

      this.frame=this.parent.frame
      this.elm.lyrobj=this;
      return true
  }else{
      return false
  }
 }
}

this would set the this.elm variable, if it hasn't been set, and return true
or false, depending on whether the object had been created yet.

so in places that now contain the check:

if (this.css==null) return;
or
if (this.elm==null) return;

we could do this:
if (this.getValues()==false) return;

The whole thing means code like this:

  myDynLayer = new DynLayer(null,50,35,300,30,"yellow")
  myDynLayer.setHTML("hi")
  DynAPI.document.addChild(myDynLayer)

would render faster than code like this:

  myDynLayer = new DynLayer(null,50,35,300,30,"yellow")
  DynAPI.document.addChild(myDynLayer)
  myDynLayer.setHTML("hi")

Does anyone see any problems in this approach?

Cheers,
Richard.
www.richardinfo.com



_______________________________________________
Dynapi-Dev mailing list
[EMAIL PROTECTED]
http://www.mail-archive.com/dynapi-dev@lists.sourceforge.net/

Reply via email to