在大多數(shù)現(xiàn)代瀏覽器中,渲染循環(huán)使用requestAnimationFrame (RAF)方法刷允。如果RAF不可用青团,它將用一個(gè)16毫秒的定時(shí)器進(jìn)行微調(diào)饮笛。
在cornerstone中渲染循環(huán)功能基于元素啟用的判导。在cornerstone中用enable(element)或disable(element)來(lái)啟用和禁用元素嫉父。
執(zhí)行情況如下:
- 在RAF注冊(cè)draw()回調(diào);
- 在屏幕上顯示幀之后,瀏覽器調(diào)用draw();
- Once called,
- 如果元素計(jì)劃重新呈現(xiàn)眼刃,則它將被呈現(xiàn)并重新向RAF注冊(cè)draw();
- 如果元素計(jì)劃重新呈現(xiàn),則不執(zhí)行任何工作摇肌,回調(diào)將重新注冊(cè)到RAF;
- 如果元素已經(jīng)被禁用擂红,回調(diào)返回是not重新注冊(cè)結(jié)束渲染循環(huán)。
這意味著:
- cornerstone.draw()和cornerstone.invalidate()不再觸發(fā)立即渲染視圖围小,而是將圖像標(biāo)記為需要重新呈現(xiàn);
- 每個(gè)cornerstone 元素注冊(cè)自己的RAF循環(huán);
- 如果在一個(gè)60赫茲的系統(tǒng)中渲染時(shí)間超過(guò)16毫秒昵骤,則跳過(guò)渲染幀;
- 即使渲染時(shí)間遠(yuǎn)低于16ms,每個(gè)幀只能有一個(gè)渲染;
- 所有的交互(平移肯适、縮放等)都被合并并呈現(xiàn)在下一幀中变秦。