- From: Anton Muhin <antonm@chromium.org>
- Date: Sat, 13 Feb 2010 21:33:17 +0300
- To: Ian Hickson <ian@hixie.ch>
- Cc: public-webapps@w3.org, Maciej Stachowiak <mjs@apple.com>
- Message-ID: <c42bef051002131033u7766c6ccmfc0a3b57e006a476@mail.gmail.com>
For me performance-wise both approaches seem fine, but to get numbers I need to run an experiment. My main concern would be that rules are overcomplicated imho. And I won't be surprised if IE and FF would just ignore them. But you understand all those matters better than I do. BTW, as the proposed change would reduce stress on GC, I don't quite see how this could reduce compatibility (but life is often more complicated than I can imagine.) yours, anton. On Sat, Feb 13, 2010 at 2:18 PM, Ian Hickson <ian@hixie.ch> wrote: > On Fri, Jan 22, 2010 at 5:11 AM, Anton Muhin <antonm@chromium.org> wrote: > > Good day. > > > > Currently DOM core 3 spec is somewhat inconsistent regarding if > > invocations of getElementsByTagName and alike must return a new > > NodeList or could cache this list. For Document it's mandated for > > both getElementsByTagName and getElementsByTagNameNS, but for Element, > > it's only worded for getElementsByTagNameNS, but not for > > getElementsByTagName. Maciej noticed as well difference between > > getElementsByTagName and other getElementsBy queries (see > > http://www.w3.org/Bugs/Public/show_bug.cgi?id=8792). And word "new" > > is missing from ECMAScript bindings spec: > > http://www.w3.org/TR/DOM-Level-3-Core/ecma-script-binding.html > > > > Is it possible to allow caching for those cases? Firefox caches those > > node lists for a long time (Maciej found the related bug > > https://bugzilla.mozilla.org/show_bug.cgi?id=140758). IE8 caches as > > well. Opera, Safari and Chrome do not. > > I'm concerned about the GC-sensitivity of such behaviour (we might end > up snookering ourselves in a situation where specific GC behaviour > actually matters for compatibility). > > How about the following compromise: these methods return a new object > each time, except if they are called with the same argument as the > previous invocation of the method? i.e. cache the last returned object > only. Would that be acceptable? It gives you a performance win in the > case where the author spins a loop using the same call over and over, > and is completely predictable. > > Alternatively, if we need to cache more than that, how about blowing > away the cache with each spin of the event loop, so that anything in a > tight loop is cached (and _not_ subject to GC — this could be a > problem if the script calls one of these methods with 10000 different > arguments and sets properties on each one), but not beyond one task? > (i.e. don't share objects in calls across setTimeout) > > For now for the objects in HTML5 I've gone with the first of these > suggested compromises. > > -- > Ian Hickson >
Received on Saturday, 13 February 2010 18:34:12 UTC