Closed Bug 169531 Opened 22 years ago Closed 16 years ago

Creating new objects in Mozilla is sometimes even 5 times slower than in IE

Categories

(Core :: JavaScript Engine, defect)

x86
All
defect
Not set
normal

Tracking

()

RESOLVED WORKSFORME

People

(Reporter: zbraniecki, Unassigned)

References

Details

(Keywords: perf)

Attachments

(4 files)

On my machine (Athlon 750, Win2k) Mozilla was slower than IE, Opera and NS4 in creating Objects.
IE6: Creating empty object: 40 Creating object with one property: 90 Creating object with 3 properties: 121 Creating Number Object: 50 Creating String Object: 100 Creating RegExp Object: 130 Creating Array Object: 50 Mozilla 1.2 trunk (20020909) Creating empty object: 170 Creating object with one property: 391 Creating object with 3 properties: 440 Creating Number Object: 351 Creating String Object: 310 Creating RegExp Object: 431 Creating Array Object: 430
NS4.8: Creating empty object: 230 Creating object with one property: 291 Creating object with 3 properties: 390 Creating Number Object: 241 Creating String Object: 230 Creating RegExp Object: 301 Creating Array Object: 320 Opera 6.03: Creating empty object: 90 Creating object with one property: 170 Creating object with 3 properties: 230 Creating Number Object: 191 Creating String Object: 250 Creating RegExp Object: 981 Creating Array Object: 161
After Mazie's Comment in Bug #169442 i checked how it works locally: http://alladyn.art.pl/gandalf/MozillaObjects/index2.html IE6: Creating empty object: 311 Mozilla 1.2 trunk(20020909) : Creating empty object: 5328 I cannot explain this...
Reassigning to Kenton; cc'ing Mazie - Zbigniew, thank you for these tests! However, when I try to go to the first URL you have, in Comment #1, I get "Not Found": http://alladyn.art.pl/MozillaObjects/ Has the URL for the first test changed?
Assignee: rogerl → khanson
Ouch! Very sorry. http://alladyn.art.pl/gandalf/MozillaObjects/ I think that if we want to make Moz 1.2 faster, we should work with small problems, like this one or #169442 . I have few more from my friends, should i set Kenton as the Owner, and CC Mazie by myself next time? :)
> I have few more from my friends, should I set Kenton as the Owner, > and CC Mazie by myself next time? :) Zbigniew: thanks, that would be great! You are right, each issue should have its own separate bug. Furthermore, there is a meta bug for JavaScript Engine performance, also: bug 117611 [META] JS Engine Performance Issues Each separate bug, after it is filed, should be added as a "dependency" to this bug. To do this, go to bug 117611 and look for the phrase "Bug 117611 depends on: ". Then you can add the new performance bug number to the textbox, and hit "Commit". --- You raise a good question about the performance problems involving global variable access in the browser. This is because the Mozilla DOM does a security check every time a global variable is accessed (to guard against malicious code). IE does not do this, so IE is faster on global variable access (but less safe!). Any bug report concerning that issue should be filed against the DOM Level 0 component, not JavaScript Engine. The meta bug above is only for performance questions in the standalone JS Engine, not for DOM issues. Note there is a separate meta bug for the DOM: bug 21762 tracking: poor performance using DHTML Thanks for your help!!!
Blocks: js-perf
Keywords: perf
could upcoming fix for bug 123668 help ?
cc'ing brendan
I'm not sure if bug 123668 is related. Here we have big problems with different types of Objects. If new Object is only 4,5 times slower, new Array is 9 times slower!!! I think that we should wait for the patch in bug 123668 and see if it'll change anything here, but investigate this separatly.
I have edited the tests of Zbigniew Braniecki and tested them in the following browsers and shells. The variables are set locally to avoid DOM security checks. System: Windows 2000, Memory 256 MB, Processor: 1.7 GHz I am using trunk and branch builds of Mozilla from 2002091808. The XPCshells are from the same date. Testing object constructors in the browsers: IE6 Moz Trunk Moz Branch Array 32 ms 156 m 141 ms Object 31 ms 125 ms 109 ms RegExp 78 ms 250 ms 219 ms String 78 ms 172 ms 156 ms Date 63 ms 203 ms 188 ms Function 265 ms 516 ms 500 ms Number 32 ms 203 ms 188 ms Testing object constructors in the shell: Optimized JS Shell XPCshell Trunk XPCshell Branch Array 47 ms 109 ms 94 ms Object 15 ms 78 ms 62 ms RegExp 47 ms 125 ms 453 ms String 31 ms 94 ms 94 ms Date 16 ms 125 ms 94 ms Function 219 ms 625 ms 312 ms Number 46 ms 109 ms 110 ms Testing object literals in the browsers: IE6 Moz Trunk Moz Branch Array 15 ms 203 ms 156 ms Object 32 ms 125 ms 125 ms RegExp 31 ms 47 ms 31 ms String 0 ms 0 ms 0 ms Date n/a n/a n/a Function 31 ms 141 ms 109 ms Number 0 ms 0 ms 0 ms Testing object literals in the shell: Optimized JS Shell XPCshell Trunk XPCshell Branch Array 32 ms 78 ms 78 ms Object 31 ms 78 ms 78 ms RegExp 0 ms 0 ms 0 ms String 0 ms 0 ms 0 ms Date n/a n/a n/a Function 16 ms 63 ms 78 ms Number 0 ms 0 ms 15 ms
If mazie's numbers are from the same machine, then the JS shell beats IE6 for all but Array creation, and oddly, Number instances. Phil, a couple of thoughts: 1. Can we make this bug a meta-bug and track another non-meta bug for speeding up Array creation time? 2. Is the Number time reproducible? 3. Why is Mozilla so much slower than the JS shell? The xpcshell is slower, suggesting JS_THREADSAFE is partly to blame (it enables GC locking code that hasn't been optimized for the uncontested lock case). But Mozilla is slower still, and I don't know why. The GC may be running more. We could control for that, but it's still a head-to-head battle loss against IE. With some more investigation of where the cycles are going (jprof might help), this could be split out into another bug tracked from here. /be
Also, please try the patch from bug 123668 and report results, when you get a chance. Thanks! /be
mazie, can you use the technique (that doesn't include the missing var statements, only the conditional definition of WScript and the ellapsed time calculated *before* before the call to the print function) from http://bugzilla.mozilla.org/attachment.cgi?id=100277&action=view to test cscript [/noscript] too? comparing a shell to a web browser isn't fair especially when there's an equivalent shell available...
Current status: Mazie is trying to run performance tests in all the various shells: the JS shell with and without the patch from bug 123668, the XPCshell, and the CScript shell as timeless suggested above. However, she is running into an intermittent crash with the patch for bug 123668 applied. She will post details in that bug -
With Brendan's patch for bug 123668, I no longer crash. (http://bugzilla.mozilla.org/show_bug.cgi?id=123668#c31) I have also made CScript tests as timeless suggested. I will attach these below.
Actually, let me refer users to the JS, and CScript tests attached to bug 123668. I had to increase the number of interations to 10^6, not 10^4 as in the above tests, for greater resolution in the timing results. Here are my results with CScript, the optimized JS shell before and after the patch, and the XPCshell from today's Mozilla trunk build (2002092508): Number of iterations: 10^6 System: Windows 2000, Memory 256 MB, Processor: 1.7 GHz CScript: Microsoft (R) Windows Script Host Version 5.6 Testing constructors: CScript Opt JS(w/o patch) Opt JS(w/patch) Trunk XPCshell Array: 2578 ms 3672 ms 2875 ms 11875 ms Object: 2578 ms 2312 ms 1594 ms 9391 ms RegExp: 8687 ms 5672 ms 4141 ms 14687 ms String: 6797 ms 2187 ms 2344 ms 10735 ms Date: 5563 ms 3141 ms 3031 ms 12578 ms Function: 18859 ms 12891 ms 10172 ms 33406 ms Number: 2672 ms 2656 ms 2640 ms 12500 ms Testing literals: CScript Opt JS(w/o patch) Opt JS(w/patch) Trunk XPCshell Array: 2437 ms 3750 ms 2969 ms 12032 ms Object: 2375 ms 2359 ms 1703 ms 9406 ms RegExp: 2656 ms 406 ms 422 ms 312 ms String: 532 ms 406 ms 406 ms 313 ms Date: n/a n/a n/a n/a Function: 3296 ms 1954 ms 1250 ms 9641 ms Number: 422 ms 390 ms 390 ms 328 ms
Mazie: thanks! Now that we have these results, we see that the JS shell with Brendan's patch for bug 123668 compares favorably to the CScript shell. In fact, the new JS shell is faster on everything except Array creation, but even in that case it is nearly the same. Brendan: with these new results, would you still like me to make this a meta-bug, and file a separate non-meta bug on Array creation?
Ok, there are two problems remaining. First, and the one the summary best describes (so the one that should be tracked here): the slowdown due to thread safety in the xpcshell numbers, compared to the js shell numbers. Second, the new Array slowness. The latter should get its own bug. It can be fixed more readily with a patch to jsarray.c only (to avoid defining a length property on each Array instance, requiring a mutable scope for each instance). I'm actually patching the thread-safety performance problem in a new patch for bug 123668, which I should be able to attach later today. /be
Brendan: thanks - I have filed bug 171262, "Performance: improve speed of new Array creation" and have made it a dependency for the overall meta-bug on JS Engine performance, bug 117611
Blocks: 21762
Depends on: 123668
Assignee: khanson → general
QA Contact: pschwartau → general
Firefox RegExp is highly variable, probably from the arena malloc, but we have other bugs for that. Firefox 3: Array: 4 ms Object: 3 ms RegExp: 102 ms String: 8 ms Date: 40 ms Function: 33 ms Number: 3 ms IE: Array: 47 ms Object: 47 ms RegExp: 94 ms String: 31 ms Date: 16 ms Function: 62 ms Number: 32 ms
Status: NEW → RESOLVED
Closed: 16 years ago
Resolution: --- → WORKSFORME
(In reply to comment #25) > Firefox RegExp is highly variable, probably from the arena malloc, but we have > other bugs for that. > > Firefox 3: > Array: 4 ms > Object: 3 ms > RegExp: 102 ms > String: 8 ms > Date: 40 ms > Function: 33 ms > Number: 3 ms > > IE: > Array: 47 ms > Object: 47 ms > RegExp: 94 ms > String: 31 ms > Date: 16 ms > Function: 62 ms > Number: 32 ms What version of IE is this with?
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Creator:
Created:
Updated:
Size: