Move public APIs into their own folder
And start writing actual tests for them
This commit is contained in:
parent
724361af6a
commit
960812308c
9 changed files with 192 additions and 6 deletions
35
api/limiter.js
Normal file
35
api/limiter.js
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
var FRAME_BUDGET = 16 // 60 frames per second = 1 call per 16 ms
|
||||
|
||||
module.exports = function($window, render) {
|
||||
var rAF = $window.requestAnimationFrame || $window.setTimeout
|
||||
var cAF = $window.cancelAnimationFrame || $window.clearTimeout
|
||||
|
||||
var last = 0
|
||||
var pending
|
||||
|
||||
return function() {
|
||||
var now = new Date()
|
||||
|
||||
// First render, OR if the time since the last render is greater
|
||||
// than the frame budget
|
||||
// just immediately render
|
||||
if(!last || now - last > FRAME_BUDGET) {
|
||||
last = now;
|
||||
|
||||
return render()
|
||||
}
|
||||
|
||||
// Redraw already pending, abort
|
||||
if(pending) {
|
||||
return
|
||||
}
|
||||
|
||||
// Schedule a redraw for the next tick
|
||||
pending = rAF(function() {
|
||||
render()
|
||||
|
||||
last = new Date()
|
||||
pending = null
|
||||
}, FRAME_BUDGET - (now - last))
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue