javascript - One requestAnimationFrame invoked per redraw or multiple? -
what happens when there multiple requestanimationframe callbacks in relation screen redraws?
with 2 requestanimationframe blocks i.e.
(function a() { requestanimationframe(a); }()) (function b() { requestanimationframe(b); }())
will sequence of execution be:
1:
-> -> b -> screen redrawn -> -> b -> screen redrawn ...
2:
-> -> screen redrawn -> b -> screen redrawn -> -> screen redrawn ...
that's interesting question. based on read, mozbeforepaint
event should fired each registered callback before proceeding next frame. test, modified code (fiddle):
html
<button id="start">start</button> <button id="stop">stop</button>
css
var aid, bid; function a(ts) { console.log('a', ts); aid = requestanimationframe(a); } function b(ts) { console.log('b', ts); bid = requestanimationframe(b); } var startbutton = document.getelementbyid('start'); var stopbutton = document.getelementbyid('stop'); function stop() { window.cancelanimationframe(aid); window.cancelanimationframe(bid); } function start() { a(); b(); } startbutton.addeventlistener('click', start); stopbutton.addeventlistener('click', stop);
the output after clicking start
seems confirm expectation. first invocation of a()
, b()
log undefined timestamps, because they're starting animation straight rather responding callback. each subsequent invocation of a()
logs domhighrestimestamp
matches 1 logged invocation of b()
, suggesting it's same event firing both callbacks.
output
a undefined b undefined 123182.04999999944 b 123182.04999999944 123198.73199999893 b 123198.73199999893 123215.22000000004 b 123215.22000000004 123231.9179999995 b 123231.9179999995 123248.59099999958 b 123248.59099999958 123265.21899999898 b 123265.21899999898
caveats:
i have no specific firsthand knowledge of implementations; interpretation of documentation , test this test executed in mac os x chrome 35; other browsers may produce different results javascript html5
No comments:
Post a Comment