Socket
Socket
Sign inDemoInstall

@pixi/runner

Package Overview
Dependencies
0
Maintainers
3
Versions
112
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

@pixi/runner


Version published
Maintainers
3
Created

Package description

What is @pixi/runner?

@pixi/runner is a utility package for the PixiJS library that provides a mechanism to manage and execute a series of functions (runners) in a specific order. It is particularly useful for managing events and callbacks in a structured and efficient manner.

What are @pixi/runner's main functionalities?

Creating a Runner

This feature allows you to create a new Runner instance. The 'onEvent' string is the name of the event that the runner will manage.

const { Runner } = require('@pixi/runner');
const myRunner = new Runner('onEvent');

Adding Functions to a Runner

You can add multiple functions (callbacks) to a runner. These functions will be executed in the order they were added when the runner is triggered.

function callback1() { console.log('Callback 1 executed'); }
function callback2() { console.log('Callback 2 executed'); }
myRunner.add(callback1);
myRunner.add(callback2);

Executing a Runner

This feature allows you to execute all the functions added to the runner in the order they were added. In this example, 'Callback 1 executed' and 'Callback 2 executed' will be logged to the console.

myRunner.emit();

Removing Functions from a Runner

You can remove specific functions from the runner. After removal, the function will no longer be executed when the runner is triggered.

myRunner.remove(callback1);

Other packages similar to @pixi/runner

Readme

Source

@pixi/runner

A simple alternative to events and signals with an emphasis on performance.

Can be used as an alternative to events / signals.

Installation

npm install @pixi/runner

Usage

import { Runner } from '@pixi/runner';

const onComplete = new Runner('onComplete');

// listenerObject needs to have a 'onComplete' function
onComplete.add(listenerObject);

// emit() and all listeners will have their 'onComplete' functions called
onComplete.emit(data);

Can be used to execute a function on many objects. Handy for games. If you need to update you game elements each frame:

import { Runner } from '@pixi/runner';

const updateRunner = new Runner('update');

// gameItems should all have a 'update' function
updateRunner.add(gameItem1);
updateRunner.add(gameItem2);
updateRunner.add(gameItem3);

// Update game elements...
updateRunner.emit();

Features

  • Easy to use familiar API.
  • Under the hood it dynamically creates a looping function that is highly optimised.
  • Avoids using 'call' and runs the function directly (which is faster!).
  • You can pass parameters when emitting.

Pros:

  • Doesn't rely on strings.
  • Code-completion works properly.
  • Trying to dispatch or listen to an event type that doesn't exist throws errors (helps you find errors early).
  • No need to create constants to store string values.
  • Easy to identify which signals the object dispatch.
  • Favor composition over inheritance.
  • Doesn't mess with the prototype chain.
  • Its fast, a lot faster than events and signals.
  • Great for when performance matters.
  • Its light weight, with a tiny memory footprint (smaller than events and signals)

Cons:

  • Not quite as flexible. All listeners / items in the runner must have the correct function name specified within the runners constructor.

When to Use

In practice I have found the Runner incredibly useful and so thought it would be nice to share with the world. It currently forms the backbone of the messaging system in our game engine. Its working out great for things like update events, collision events etc.

Great to use if you are say looping through and array and calling the same function on each object. The resulting code is cleaner than a loop whilst still keeping the performance as fast as possible.

So yeah, if you are dispatching signals/events to a lot of listeners often (like everyframe often), then I would consider using this alternative. For most cases, this performance boost is not really important enough to switch from your current fave.

Think of this as a nice alternative for when speed really counts!

to run the tests, move to the runner-benchmark folder then run the following:

npm run benchmark

Next open you browser (http://localhost:9966). The test is run in the console. The test result above comes from macbook pro chrome 58.

Any thoughts or comments hit me up on twitter @doormat23, I'd love to hear them!

Keywords

FAQs

Last updated on 31 Oct 2022

Did you know?

Socket

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

Packages

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc