One minor improvement:

+Instance.prototype.addProperties(['addProperty', function addProperty(name, 
value) {
+      this.addProperties(arguments);
+    }]);

It's more efficient to create an array here instead of using the arguments object. The array solution was about 20%-30% faster, tested with swf8, swf9, dhtml (FF3, Saf3, Opera9). You can verify with this simple testcase:

<canvas debug="true">
<button>
  <handler name="onclick"><![CDATA[
    var o = {
      addProps: function (a) {}
     ,addProp: function (n,v) {
        // this.addProps(arguments);
        // accessing arguments is slow
        this.addProps([n,v]);
      }
    }

    if ($as3) {
      var MAX = 1000000;
    } else {
      var MAX = 100000;
    }
    var start = new Date();
    for (var i = 0; i < MAX; ++i) {
      o.addProp("foo", null);
    }
    Debug.write(new Date().getTime() - start);
  ]]></handler>
</button>
</canvas>



On 5/2/2009 1:03 AM, P T Withington wrote:
[Looking for a volunteer to review. Max or Henry, if you can try using this to profile wt and attach the results to 8106 that would be great (feel free to delete the older profile results).]

Change 20090501-ptw-Y by [email protected] on 2009-05-01 18:33:57 EDT
    in /Users/ptw/OpenLaszlo/trunk-2
    for http://svn.openlaszlo.org/openlaszlo/trunk

Summary: Repair profiler for DHTML, tweak Class substrate

Bugs Fixed:
LPP-5637  profiler does not give class method belongs to in DHTML
LPP-8016  Performance differences between OL 4.0.x and 4.3.x (partial)

Technical Reviewer: (pending)
QA Reviewer: (pending)
Doc Reviewer: (pending)

Details:
    LaszloEvents: Note class name on event

    platform/js2/Instance.js: Remove unused

    Class: Hoist the loop around addProperty into addProperties to
    reduce function call overhead.  Remove static initializers --
    these were not supported by JS2 classes, so we no longer use
    them.  Remove validateClassStructure, no longer needed.
    Hand-optimize `is` to `instanceof`, remove unnecessary `call` and
    `apply`.  Add some profiling names.

    JavascriptGenerator, CodeGenerator: optimize profiling annotation
    slightly.

    JavascriptGenerator: Correct profiling function name annotation.

Tests:
    Run the profiler in DHTML, see the class names.  Notice slight
    improvement in cost of addProperty.

Files:
M      WEB-INF/lps/lfc/events/LaszloEvents.lzs
D      WEB-INF/lps/lfc/compiler/platform
D      WEB-INF/lps/lfc/compiler/platform/js2
D      WEB-INF/lps/lfc/compiler/platform/js2/Instance.js
M      WEB-INF/lps/lfc/compiler/Class.lzs
M      WEB-INF/lps/server/src/org/openlaszlo/sc/JavascriptGenerator.java
M      WEB-INF/lps/server/src/org/openlaszlo/sc/CodeGenerator.java

Changeset: http://svn.openlaszlo.org/openlaszlo/patches/20090501-ptw-Y.tar

Reply via email to