- From: Brian Kardell <bkardell@gmail.com>
- Date: Wed, 23 Oct 2013 09:10:01 -0400
- To: Andrea Giammarchi <andrea.giammarchi@gmail.com>
- Cc: public-nextweb@w3.org
- Message-ID: <CADC=+jcxDOhk3hP8gZyQgo9NzfRP4q=dQUVH866dwt7C2rj+WQ@mail.gmail.com>
Transaction? On Oct 21, 2013 12:23 PM, "Andrea Giammarchi" <andrea.giammarchi@gmail.com> wrote: > up > > > On Thu, Oct 17, 2013 at 4:47 PM, Andrea Giammarchi < > andrea.giammarchi@gmail.com> wrote: > >> Something pointless to discuss on Twitter as I am doing right now :-) >> >> I wonder if I am the only one that would like to have the possibility to >> avoid any visual rendering on the screen during multiple DOM actions such >> adding classes to different nodes, change the scrollTop after dropping an >> element that is not even visible on the screen but up there in the body >> content or who know what else. >> >> It's not the first time I find myself in a situation where >> requestAnimationFrame is badly/hopefully used only to speed up the amount >> of flicks I could have with multiple changes at once and specially in the >> mobile world (on desktop things are fast enough I cannot notice). >> >> I understand that browsers should optimize already multiple operations at >> once but these are inevitably in troubles doing this implicitly when it >> comes to access classes, add more that could change layout for everything >> else around, etcetera, etcetera. >> >> How much effort would be to be able to explicitly inform the browser that >> many DOM operations will be performed at once and that all computation >> (reflow, repaint) should be avoided until the callback has finished its >> execution ? >> >> Similar, but actually simpler, mechanism we have for >> `requestAnimationFrame` except this one will take care of "transitions" (or >> the equivalent of SQL transitions) >> >> ```javascript >> >> // example >> requestTransition(function () { >> // do anything you want >> document.body.classList.add('whatever'); >> documentquerySelector('div.stuff').appendChild( >> document.createElement('p') >> ).classList.add('a', 'b', 'c'); >> document.querySelector('div.drop').remove(); >> // offsetHeight of that element will the the one >> // **before** this transition, no need to reflow, repaint >> // nothing in here, the DOM is still as it was before >> // this callback ws executed >> document.body.scrollTop -= >> document.querySelector('div.drop').offsetHeight; >> transitionCompleted(); >> }); >> >> // invoked later on >> function transitionCompleted() { >> // now the screen is showing >> // the DOM after all things happened before >> // we have just avoided N potential flicks >> // and maybe lagged some extra ms ... who cares ? >> // flicking is worse than a tiny delay, imho >> } >> >> ``` >> >> At least in my experience a similar approach could solve TONS of modern >> WebApp problems but of course I would like to know if anything I've written >> or proposed makes sense to you too. >> >> Thoughts? >> >> Thanks for reading and Best Regards, >> Andrea Giammarchi >> >> >> >> >
Received on Wednesday, 23 October 2013 13:10:32 UTC