Closed
Bug 186133
Opened 22 years ago
Closed 22 years ago
DOM Performance Regression
Categories
(Core :: DOM: Core & HTML, defect, P1)
Core
DOM: Core & HTML
Tracking
()
RESOLVED
FIXED
mozilla1.3beta
People
(Reporter: markushuebner, Assigned: jst)
References
()
Details
(Keywords: perf, regression, topembed, Whiteboard: [HAVE FIX])
Attachments
(1 file)
(deleted),
patch
|
jag+mozilla
:
review+
alecf
:
superreview+
dbaron
:
approval1.3b+
dbaron
:
approval1.3+
|
Details | Diff | Splinter Review |
10 runs on each testcase on win-xp, 1.1ghz, 512ram.
On average we are doing 20% worse, comparing these
two trunk builds.
TEST Trunk 2002121108 : Trunk 2002121108 : MSIE6.0 SP1
-----------------------------------------------------------------------------
getElementById() 313ms : 287ms : 270ms
getElementsByTagName() 370ms : 305ms : 281ms
createElement() 702ms : 792ms : 231ms
getAttribute() 442ms : 378ms : 140ms
setAttribute() 407ms : 340ms : 144ms
Comment 1•22 years ago
|
||
Same mozilla build?
Reporter | ||
Comment 2•22 years ago
|
||
sorry - the second truk build is 2002082208 in the table!
Reporter | ||
Comment 3•22 years ago
|
||
Testing 1.2a and 1.2b have actually the same numbers as Trunk 2002121108.
Mozilla 1.1 was considerably faster though.
TEST Trunk 2002121108 : Mozilla 1.1
-----------------------------------------------------------
getElementById() 313ms : 284ms
getElementsByTagName() 370ms : 303ms
createElement() 702ms : 682ms
getAttribute() 442ms : 375ms
setAttribute() 407ms : 343ms
So it seems the regression happened somewhere in August 2002.
Notice that performance can be further improved when you cache document. Using
the following code:
var d=document;
for (var i=0;i<=10000;i++) d.getElementById("test");
IE (5.5) dropped from 694ms to 497ms. (!!)
Moz (1.3a) dropped from 958ms to 914ms.
And Opera 7b2 swifts through it in 404ms.
Caching objects is a common way to improve performance, I believe it should be
taken into account when comparing.
Comment 6•22 years ago
|
||
More tests, with more browsers (Athlon XP 2100+ Win 2k SP3 512 Mb DDR, no other
programs running but the browser)
Opera 7.0 Beta 2
getElementById --> Average (10runs) :110ms
getElementsByTagName() --> Average (10runs) :153ms
createElement() --> Average (10runs) :316ms
getAttribute() --> Average (10runs) :455ms
setAttribute() --> Average (10runs) :3299ms
IE 6 SP1
getElementById --> Average (10runs) :125ms
getElementsByTagName() --> Average (10runs) :119ms
createElement() --> Average (10runs) :104ms
getAttribute() --> Average (10runs) :52ms
setAttribute() --> Average (10runs) :59ms
Phoenix 0.5 (nightly 20021219)
getElementById --> Average (10runs) :127ms
getElementsByTagName() --> Average (10runs) :156ms
createElement() --> Average (10runs) :323ms
getAttribute() --> Average (10runs) :192ms
setAttribute() --> Average (10runs) :184ms
Mozilla (nightly 20021219)
getElementById --> Average (10runs) :141ms
getElementsByTagName() --> Average (10runs) :166ms
createElement() --> Average (10runs) :466ms
getAttribute() --> Average (10runs) :203ms
setAttribute() --> Average (10runs) :186ms
Mozilla 1.1 (20020826)
getElementById --> Average (10runs) :131ms
getElementsByTagName() --> Average (10runs) :156ms
createElement() --> Average (10runs) :406ms
getAttribute() --> Average (10runs) :197ms
setAttribute() --> Average (10runs) :175ms
K-meleon (Mozilla 1.2b 20021016)
getElementById --> Average (10runs) :139ms
getElementsByTagName() --> Average (10runs) :171ms
createElement() --> Average (10runs) :352ms
getAttribute() --> Average (10runs) :206ms
setAttribute() --> Average (10runs) :190ms
Comment 7•22 years ago
|
||
All of these tests with random old builds are _not_ helpful. If the regression
occurred between 1.2b and 12/11, then please test builds in that range to
narrow down the regression date. That would be helpful indeed.
any way we can narrow down to a smaller timeframe/builds for when regression
happened?
Comment 9•22 years ago
|
||
Where can people find old builds? Maybe try announce the problem somewhere and
see if someone has the time to test builds until finding the "guilty" checkin.
Comment 10•22 years ago
|
||
This are the results of my test. I only tested getElementById(). I didn't have
any release build hanging around, so only nightlies.
2002080708 297 100.0%
2002082305 297 100.0%
2002082808 303 102.0%
2002091205 297 100.0%
2002092708 293 98.7%
2002101508 316 106.4%
2002101808 308 103.7%
2002102508 295 99.3%
2002110108 283 95.3%
2002110808 305 102.7%
2002111408 302 101.7%
2002120322 295 99.3%
2002121308 299 100.7%
2002122008 287 97.6%
My conclusions: The variations measured are "noise". 1.1 jappend to be kind of
lucky.
Comment 11•22 years ago
|
||
> On average we are doing 20% worse, comparing these two trunk builds.
actually, it's 10% worse (on average), even according to your numbers.
the getElementsByTagName test (which, according to comment 0 took the biggest
hit), 10 runs each with linux on a PII-450MHz.
1.0.0 5308
1.1a 2116
1.1b 2256
1.1 2255
1.2a 2302
1.2b 2257
1.2.1 2321
20021220 2208
current trunk looks great. if there is a regression, it's not happening on in
Andrew-ville.
Reporter | ||
Comment 12•22 years ago
|
||
According to the results I posted in comment #3 we are doing worse as follows:
getElementById() 10,21%
getElementsByTagName() 22,11%
createElement() 2,93%
getAttribute() 17,87%
setAttribute() 18,66%
Comment 13•22 years ago
|
||
I forgot to mention that is did my test on linux on an AMD 2000XP. Each with 10
runs (Which should not matter, as one test is already 10000 calls of the function.)
Reporter | ||
Comment 14•22 years ago
|
||
Could it be that this just regressed on Win32 ?
Comment 15•22 years ago
|
||
We won't know until someone on windows tests more nightly builds. We need to
know what the variations are, and if there is some trend.
Only testing the releases is not enough. We need to know the amount of noise in
the measurements to know is the differences are significant.
My (linux) tests suggest that the noise is quite large, and the variantions are
not significant.
You can find some old nightlies on ftp://ftp.mozilla.org/pub/mozilla/nightly/
but not very far back. Find someone who has some on his local disk.
Comment 16•22 years ago
|
||
this bug is only about one regression... the one Markus is seeing. Markus sees
that current trunk (as of 12-11), 1.2a and 1.2b are significantly slower (~20%)
than 1.1 (comment 3). So he has narrowed down the regression to occurring
between 1.1 and 1.2a. If we test nightlies outside that range, we might find
another regression, but it would not be this bug.
Since I don't see a significant performance hit between 1.1 and 1.2a (only ~2%,
well within noise level), I don't see this regression. If other people running
linux have similar results (and people running windows have results similar to
Markus') then this bug is Windows only, regardless of what happens with the
nightlies.
Reporter | ||
Comment 17•22 years ago
|
||
Unfortunately ftp://ftp.mozilla.org/pub/mozilla/nightly/ is having builds just
back till the 10th of December.
Is there a way to get builds around August?
The oldest trunk build I have so far is 2002091208 and there is no regression.
Reporter | ||
Comment 18•22 years ago
|
||
Ups, should get more sleep - the trunk build 2002091208 of course shows the
regression.
Comment 19•22 years ago
|
||
Win98, Athlon 750, 320MB - I don't know if I see this regression... 1.1 performs
about the same as 1.2a, so looking at that I'd say I don't, but 2002073108 _was_
significantly faster (based on the roadmap this was from before 1.1 branched -
markus: did you really test 1.1 itself or did you stick with that 20020822
build? It might be that a fix was checked in on the trunk between 2002073108 and
2002080604, which was then ported to the branch between 2002082208 and
2002082400). On the other hand, the fluctuations are large enough that the
differences can be explained solely by that... (I don't know how accurate these
javascript tests are, but I see the results of one test jumping up and down in
increments of 10 or 50ms...)
_If_ Markus did indeed use 2002082208 in his comparison in comment 3, rather
than the real 1.1, and if somebody can find a checkin on the 1.1-branch between
2002082208 and 2002082400 which occurred on the trunk between 2002073108 and
2002080604, then I'd say that'd bear investigating.
2002073108 (trunk):
getElementById() 395
getElementsByTagName() 455
createElement() 966
getAttribute() 572
setAttribute() 520
2002080604 (trunk):
getElementById() 389
getElementsByTagName() 499
createElement() 960
getAttribute() 639
setAttribute() 593
2002080704 (trunk):
getElementById() 428
getElementsByTagName() 505
createElement() 1000
getAttribute() 627
setAttribute() 588
2002081204 (1.1-branch):
getElementById() 397
getElementsByTagName() 478
createElement() 1000
getAttribute() 577
setAttribute() 533
2002081308 (trunk):
getElementById() 419
getElementsByTagName() 500
createElement() 934
getAttribute() 664
setAttribute() 577
2002081716 (1.1-branch):
getElementById() 401
getElementsByTagName() 462
createElement() 961
getAttribute() 591
setAttribute() 541
2002082400 (1.1-branch):
getElementById() 422
getElementsByTagName() 527
createElement() 1033
getAttribute() 660
setAttribute() 587
2002082611 (1.1):
getElementById() 439
getElementsByTagName() 509
createElement() 985
getAttribute() 620
setAttribute() 565
2002091014 (1.2a):
getElementById() 433
getElementsByTagName() 500
createElement() 1033
getAttribute() 616
setAttribute() 576
2002121704 (current trunk):
getElementById() 445
getElementsByTagName() 528
createElement() 1237
getAttribute() 617
setAttribute() 585
Reporter | ||
Comment 20•22 years ago
|
||
I really did test with 1.1 - usergent info:
Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.1) Gecko/20020826
But it seems that something went wrong on the test (probably there was a
mozilla.exe still in memory when trying to open 1.1).
Here again the test with 1.1
TEST Mozilla 1.1
-----------------------------------------------------------
getElementById() 318ms
getElementsByTagName() 306ms
createElement() 671ms
getAttribute() 379ms
setAttribute() 350ms
Sander, so it seems I have the same as you and the time-frame you mentioned is
the one that needs analysis to track down the checkin.
Reporter | ||
Comment 21•22 years ago
|
||
Good performance regression infos also in bug 140789
Reporter | ||
Updated•22 years ago
|
Assignee | ||
Comment 22•22 years ago
|
||
Ok, I found the cause of this regression, it's the change that was made by alecf
to make nsID::Equals() use memcmp() in stead of manually comparing the nsID. If
I revert that change we get back the ~10% that was lost in performance since
Mozilla 1.1.
Status: NEW → ASSIGNED
Whiteboard: [HAVE FIX]
Assignee | ||
Comment 23•22 years ago
|
||
Oh, and that bug was bug 164580.
Comment 24•22 years ago
|
||
see bug 164580 comment 6 -- this bug (regression) does not occur on Linux.
Assignee | ||
Comment 25•22 years ago
|
||
Right, bug 164580 only affected non-unix platforms.
Assignee | ||
Comment 26•22 years ago
|
||
This reverts us back to not using memcmp() in nsID::Equals(), and thus gets us
back to the same speed as we had in 1.1.
Comment 27•22 years ago
|
||
Comment on attachment 113436 [details] [diff] [review]
Back out the fix for bug 164580.
sr=alecf
sorry, my bad :(
Attachment #113436 -
Flags: superreview+
Assignee | ||
Updated•22 years ago
|
Flags: blocking1.3b?
Priority: -- → P1
Target Milestone: --- → mozilla1.3beta
Comment 28•22 years ago
|
||
Attachment #113436 -
Flags: review+
Updated•22 years ago
|
Attachment #113436 -
Flags: approval1.3b?
Updated•22 years ago
|
Attachment #113436 -
Flags: approval1.3b? → approval1.3b+
Comment 29•22 years ago
|
||
This doesn't appear to have landed. Am I wrong?
Comment 30•22 years ago
|
||
moving blocking request out to 1.3final. We're done with beta.
Flags: blocking1.3b? → blocking1.3?
Comment 31•22 years ago
|
||
Comment on attachment 113436 [details] [diff] [review]
Back out the fix for bug 164580.
You planning to land this?
Attachment #113436 -
Flags: approval1.3+
Assignee | ||
Comment 32•22 years ago
|
||
Fixed. Sorry, I missed this approval :-(
Status: ASSIGNED → RESOLVED
Closed: 22 years ago
Resolution: --- → FIXED
Updated•22 years ago
|
Flags: blocking1.3?
Component: DOM: Core → DOM: Core & HTML
QA Contact: stummala → general
You need to log in
before you can comment on or make changes to this bug.
Description
•