@@ -248,58 +248,59 @@ const reducePropsToState = propsList => ({
248248 )
249249} ) ;
250250
251- const requestIdleCallback = ( ( ) => {
252- if (
253- typeof window !== "undefined" &&
254- typeof window . requestIdleCallback !== "undefined"
255- ) {
256- return window . requestIdleCallback ;
257- }
258-
259- return cb => {
260- const start = Date . now ( ) ;
261- return setTimeout ( ( ) => {
262- cb ( {
263- didTimeout : false ,
264- timeRemaining ( ) {
265- return Math . max ( 0 , 50 - ( Date . now ( ) - start ) ) ;
266- }
267- } ) ;
268- } , 1 ) ;
251+ const rafPolyfill = ( ( ) => {
252+ let clock = Date . now ( ) ;
253+
254+ return ( callback : Function ) => {
255+ const currentTime = Date . now ( ) ;
256+
257+ if ( currentTime - clock > 16 ) {
258+ clock = currentTime ;
259+ callback ( currentTime ) ;
260+ } else {
261+ setTimeout ( ( ) => {
262+ rafPolyfill ( callback ) ;
263+ } , 0 ) ;
264+ }
269265 } ;
270266} ) ( ) ;
271267
272- const cancelIdleCallback = ( ( ) => {
273- if (
274- typeof window !== "undefined" &&
275- typeof window . cancelIdleCallback !== "undefined"
276- ) {
277- return window . cancelIdleCallback ;
278- }
268+ const cafPolyfill = ( id : string | number ) => clearTimeout ( id ) ;
279269
280- return id => clearTimeout ( id ) ;
281- } ) ( ) ;
270+ const requestAnimationFrame = typeof window !== "undefined"
271+ ? window . requestAnimationFrame ||
272+ window . webkitRequestAnimationFrame ||
273+ window . mozRequestAnimationFrame ||
274+ rafPolyfill
275+ : global . requestAnimationFrame || rafPolyfill ;
276+
277+ const cancelAnimationFrame = typeof window !== "undefined"
278+ ? window . cancelAnimationFrame ||
279+ window . webkitCancelAnimationFrame ||
280+ window . mozCancelAnimationFrame ||
281+ cafPolyfill
282+ : global . cancelAnimationFrame || cafPolyfill ;
282283
283284const warn = msg => {
284285 return console && typeof console . warn === "function" && console . warn ( msg ) ;
285286} ;
286287
287- let _helmetIdleCallback = null ;
288+ let _helmetCallback = null ;
288289
289290const handleClientStateChange = newState => {
290- if ( _helmetIdleCallback ) {
291- cancelIdleCallback ( _helmetIdleCallback ) ;
291+ if ( _helmetCallback ) {
292+ cancelAnimationFrame ( _helmetCallback ) ;
292293 }
293294
294295 if ( newState . defer ) {
295- _helmetIdleCallback = requestIdleCallback ( ( ) => {
296+ _helmetCallback = requestAnimationFrame ( ( ) => {
296297 commitTagChanges ( newState , ( ) => {
297- _helmetIdleCallback = null ;
298+ _helmetCallback = null ;
298299 } ) ;
299300 } ) ;
300301 } else {
301302 commitTagChanges ( newState ) ;
302- _helmetIdleCallback = null ;
303+ _helmetCallback = null ;
303304 }
304305} ;
305306
@@ -637,5 +638,5 @@ export {convertReactPropstoHtmlAttributes};
637638export { handleClientStateChange } ;
638639export { mapStateOnServer } ;
639640export { reducePropsToState } ;
640- export { requestIdleCallback } ;
641+ export { requestAnimationFrame } ;
641642export { warn } ;
0 commit comments