Socket
Socket
Sign inDemoInstall

raf-schd

Package Overview
Dependencies
0
Maintainers
1
Versions
13
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

    raf-schd

A scheduler based on requestAnimationFrame


Version published
Weekly downloads
1.6M
decreased by-14.6%
Maintainers
1
Install size
11.3 kB
Created
Weekly downloads
 

Package description

What is raf-schd?

The raf-schd package is a small utility that creates a throttled function that only invokes the provided function at most once per animation frame. It's useful for optimizing performance by reducing the number of times a function is called during rapid events such as scrolling, resizing, or animations.

What are raf-schd's main functionalities?

Throttling function calls

This code sample demonstrates how to create a throttled version of an expensive function that is called at most once per animation frame. This is useful for attaching to events that fire rapidly, such as 'resize' or 'scroll' events.

import schedule from 'raf-schd';

const expensiveFunction = () => {
  // Expensive operation
};

const throttledFunction = schedule(expensiveFunction);

window.addEventListener('resize', throttledFunction);
window.addEventListener('scroll', throttledFunction);

Other packages similar to raf-schd

Readme

Source

raf-schd

A throttle function that uses requestAnimationFrame to limit the rate at which a function is called.

Build Status dependencies npm SemVer

For background information on rate limiting functions, see Rate limiting functions from scratch

import rafSchd from 'raf-schd';

const expensiveFn = arg => {
  //...
  console.log(arg);
};

const schedule = rafSchd(expensiveFn);

schedule('foo');
schedule('bar');
schedule('baz');

// animation frame fires

// => 'baz'

Why?

raf-schd supports the use case where you want to limit the rate at which your functions are called based on requestAnimationFrame. Unlike a standard throttle function, raf-schd uses requestAnimationFrame to rate limit, rather than waiting a fixed amount of time. Using requestAnimationFrame for throttling is powerful because the browser will automatically reduce the amount of frames provided based on the available resources. So if the browser only provides 30fps then your throttled function will only be called 30 times.

raf-schd is an extremely useful performance utility.

Without raf-schd

Optimised scroll listener example taken from MDN

var last_known_scroll_position = 0;
var ticking = false;

function doSomething(scroll_pos) {
  // do something with the scroll position
}

window.addEventListener('scroll', function(e) {
  last_known_scroll_position = window.scrollY;
  if (!ticking) {
    window.requestAnimationFrame(function() {
      doSomething(last_known_scroll_position);
      ticking = false;
    });
  }
  ticking = true;
});

With raf-schd

import rafSchd from 'raf-schd';

function doSomething(scroll_pos) {
  // do something with the scroll position
}

const schedule = rafSchd(doSomething);

window.addEventListener('scroll', function() {
  schedule(window.scrollY);
});

At the top level raf-schd accepts any function a returns a new ResultFn (a function that wraps your original function).

The ResultFn will execute your function with the latest arguments provided to it on the next animation frame.

Throttled with latest argument

import rafSchd from 'raf-schd';

const doSomething = () => {...};

const schedule = rafSchd(doSomething);

schedule(1, 2);
schedule(3, 4);
schedule(5, 6);

// animation frame fires

// do something called with => '5, 6'

Cancelling a frame with .cancel

raf-schd adds a .cancel property to the ResultFn so that it can be easily cancelled. The frame will only be cancelled if it has not yet executed.

const schedule = rafSchd(doSomething);

schedule('foo');

schedule.cancel();

// now doSomething will not be executed in the next animation frame

Types

rafSchedule

type rafSchedule = (fn: Function) => ResultFn;

// Adding a .cancel property to the WrapperFn

type WrapperFn = (...arg: mixed[]) => void;
type CancelFn = {|
  cancel: () => void,
|};
type ResultFn = WrapperFn & CancelFn;

Testing your code

If you want to really ensure that your code is working how you intend it to - use raf-stub to test your animation frame logic.

Installation

# yarn
yarn add raf-schd

# npm
npm install raf-schd --save

Module usage

ES6 module

import rafSchd from 'raf-schd';

CommonJS

If you are in a CommonJS environment (eg Node), then you will need add .default to your import:

const rafSchd = require('raf-schd').default;

Keywords

FAQs

Last updated on 13 Apr 2021

Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc