- From: Andrea Giammarchi <andrea.giammarchi@gmail.com>
- Date: Mon, 21 Oct 2013 09:22:41 -0700
- To: "public-nextweb@w3.org" <public-nextweb@w3.org>
- Message-ID: <CADA77mgp-odD+h0di9sfhaU6PoBEx0WwU7Rsfc1=iLeGAxww0g@mail.gmail.com>
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 Monday, 21 October 2013 16:23:08 UTC