- From: Ojan Vafai <ojan@chromium.org>
- Date: Fri, 18 Nov 2011 10:20:57 -0800
- To: Anne van Kesteren <annevk@opera.com>
- Cc: "www-dom@w3.org" <www-dom@w3.org>
- Message-ID: <CANMdWTuEuTAkHmYjTJdcXfFMxttNtFkHWCP0xewB7JpVMY4NDg@mail.gmail.com>
On Fri, Nov 18, 2011 at 5:02 AM, Anne van Kesteren <annevk@opera.com> wrote: > Before: http://lists.w3.org/Archives/**Public/www-dom/2011OctDec/** > 0140.html<http://lists.w3.org/Archives/Public/www-dom/2011OctDec/0140.html> > > I forgot to explain before that we do not want to expose these methods > where they do not make sense. The current DOM has that, but I do no think > that is a particularly good design, and it is not a design we have used > elsewhere in the platform. Java and its casts are not a concern for the > platform. > > It seems however people do not want to restrict these methods so far you > get limitations. Taking that into account I think this is the API you end > up with: > > union ContentNode = DOMString Node; > > Document / DocumentFragment / Element > > prepend(ContentNode...) > append(ContentNode...) > > DocumentType / Element / CharacterData > > before(ContentNode...) > after(ContentNode...) > replace(ContentNode...) > remove(ContentNode...) > > The next question is whether we should impose restrictions on these > methods at the IDL or method implementation level. E.g. appending a > DocumentType to Document can be fine, but appending it to Element is never > fine. Also currently you know that appendChild(DocumentFragment) on an > Element is going to work. With these vararg methods you do not, unless the > arguments are restricted at the IDL level, or otherwise at the method > implementation level. I no longer feel strongly where we do this, but I > believe Ojan had some concerns with respect to performance. > Sorry, I never responded to this on the other thread. This is not a purity concern. It's a performance vs. simplicity tradeoff. Every check we need to do slows down the ultimate performance we can get out of these functions. The current appendChild/etc methods all have to do a bunch of special checks for Document and DocumentType. We could do away with some of these if we didn't support these methods. It wouldn't be a huge performance gain, but even small gains are worth it for these methods, which are often in the critical path of user-visible operations. The only use-case for having these methods on DocumentType and Document is so that you can pass any node to a generic DOM walker and have it be able to call these methods. I don't think this is valuable in practice. For example, calling before/after/remove/replace on a DocumentType will almost always throw an exception anyways due to the rules of what root elements a Document can have, same with calling append/prepend on Documents. The obscure, albeit legitimate cases where you might want to call these methods on DocumentType/Document are not worth any performance cost for such performance-critical methods. As to what these methods return, we should probably go with chaining. I'm > not a big fan, but it seems to be what all the cool kids are doing these > days, and the cost is negligible. > > > -- > Anne van Kesteren > http://annevankesteren.nl/ > >
Received on Friday, 18 November 2011 18:21:54 UTC