Open Bug 940813 Opened 11 years ago Updated 7 months ago

Browsermark "DOM Advanced Search" is 1.6x slower than Chrome

Categories

(Core :: JavaScript Engine, defect)

defect

Tracking

()

People

(Reporter: cpeterson, Unassigned)

References

(Blocks 1 open bug)

Details

From Naveed's Browsermark "DOM Advanced Search" test results (bigger is better): * Chrome 31 = 13,557 * Chrome 27 = 14,034 * Firefox 25 = 8,275 * Firefox 22 = 3,461 * IE11 = 7,613 The good news is that Firefox 25 is 2.4x faster than Firefox 22, but still 1.6x slower than Chrome 31.
Is there a way I can get access to the source of this test?
(In reply to Boris Zbarsky [:bz] from comment #1) > Is there a way I can get access to the source of this test? Yes. I believe Naveed and sstangl have the test sources. I asked Naveed to where other people can get them.
Component: General → DOM
So Sean got me the benchmarks in question and I took a look at this benchmark and did some profiling. First off, the benchmark is largely doing jQuery access to the DOM, not direct DOM calls. It grabs a few lists of nodes, then does each() on them with some callback functions that check for some criteria and if the criteria match pushes the element into a results array, etc. Which brings me to the profile. * Somewhere about 10% is jitcode. * 13% is under js::SetObjectElement, largely calling into DefinePropertyOrElement via SetPropertyHelper. Lots of malloc() for the growElements() that results. This is being called from jitcode, so probably not the results array pushes in the test itself. * 10% is under js::GetProperty. Eventually this ends up doing a .nodeType on a node or a .documentElement on a document. Why are we ending up with the slow stubcalls here instead of the optimized DOM ICs? * 9% is under js_fun_apply. Most of this is array_push or array_concat. * 5% is the innerHTML getter on elements, being called via the generic JSNative IC, not the fast ion LGetDOMProperty thing. Most of this is string ops serializing the DOM fragment. * 5% is str_replace; almost half is self time in that function and the rest is smeared across RegExpShared::execute, RegExpShared::executeMatchOnly, and StringRegExpGuard::init. * 5% is js::CreateThisForFunctionWithProto: getNewType, NewObjectWithType. Then there's a long tail. I will claim that this is fundamentally not a DOM benchmark, except maybe for that innerHTML getter. ;) The speedups from fx22 are probably from the existing work jandem has done on optimizing jQuery stuff.
Component: DOM → JavaScript Engine
Oh, and we should figure out why we have that js::GetProperty stubcall!
(In reply to Boris Zbarsky [:bz] from comment #3) > The speedups from fx22 are probably from the existing work jandem has done > on optimizing jQuery stuff. Do you happen to have numbers for FF 28? Comment 0 has numbers for 25 but a bunch of optimizations for jQuery landed after that, so I wonder if there's any difference between 25 and Nightly.
Sure. So the caveat is that I'm testing on Mac (64-bit, therefore) and we may care more about Windows 32-bit numbers here. But here's what I see for the "Final Score" number for this test: Firefox 22: 1466 Firefox 25: 4049 Today's nightly: 3730 Not sure why that last is slower, offhand.
Oh, and on the same machine as comment 6 I have: Chrome: 6248 Safari: 8626
One other note. For my own local build, I get 4017. Also, if I make HTMLDocument not be a proxy, that doesn't change performance here.
Depends on: 1094255
Severity: normal → S3
You need to log in before you can comment on or make changes to this bug.