npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

taskman-lib

v1.0.3

Published

A library for adding tasks to be completed with a given priority.

Downloads

14

Readme

Taskman-lib

Taskman-lib — это библиотека, которая представляет собой мощный планировщик задач, который эффективно обрабатывает как обычные функции, так и функции-генераторы, позволяя выполнять задачи в основном потоке и в веб-воркерах. Этот планировщик обеспечивает оптимальную производительность, управляя выполнением задач на основе приоритетов и доступных ресурсов. Также можно запускать задачи отложенно.

Рекомендуется запускать задачу в воркере, если функция большая и её выполнение может занять много времени, чтобы не блокировать главный поток. Также в воркере нельзя запускать функции-генераторы.

Возможности

  • Поддержка обычных функций и функций-генераторов: Легко обрабатывайте различные типы задач с бесшовной интеграцией.
  • Выполнение в основном потоке: Приоритизируйте и выполняйте задачи с помощью requestIdleCallback, чтобы браузер оставался отзывчивым.
  • Интеграция с веб-воркерами: Переносите задачи в веб-воркеры для параллельной обработки с распределением задач на основе количества доступных потоков процессора.

Принцип работы

Типы задач

  1. Обычные функции
  2. Функции-генераторы

Типы выполнения

  1. Выполнение в основном потоке: Задачи выполняются напрямую в основном потоке, обеспечивая низкую задержку выполнения.
  2. Выполнение в веб-воркерах: Задачи передаются на выполнение в веб-воркеры для параллельной обработки, что идеально подходит для задач, требующих больших вычислительных ресурсов.

Оборачивание задач в Promises

Все задачи, независимо от того, выполняются ли они в основном потоке или в веб-воркерах, оборачиваются в Promises, обеспечивая асинхронное и неблокирующее выполнение.

Выполнение в основном потоке

  • Очередь с приоритетом: Для управления приоритетом задач используется бинарная куча. Задачи добавляются в очередь на основе их уровня приоритета и времени добавления в очередь, чтобы сортировка оставалась устойчивой.
    • Обычные функции: Напрямую добавляются в очередь с приоритетом.
    • Функции-генераторы: Итератор, полученный из генератора, добавляется в очередь.
  • Обработка задач: Когда в очереди есть задачи, они выполняются в свободное время браузера с помощью requestIdleCallback.
    • Обычные функции: Выполняются немедленно.
    • Итераторы: Обрабатываются по одной итерации за раз, и итератор заново помещается в очередь, если остаются другие итерации.

Выполнение в веб-воркерах

  • Неограниченное создание веб-воркеров: Хотя веб-воркеры можно создавать в неограниченном количестве, одновременно может работать только столько, сколько потоков в процессоре (ограничение библиотеки - navigator.hardwareConcurrency || 16).
    • Ограничения браузеров: Большинство браузеров накладывают ограничение на одновременную работу около 20 веб-воркеров.
  • Очередь с приоритетом для веб-воркеров: Отдельная очередь с приоритетом управляет задачами, предназначенными для веб-воркеров.
    • Инициализация пула веб-воркеров: Пул воркеров инициализируется с числом веб-воркеров, равным navigator.hardwareConcurrency или значением по умолчанию 16.
    • Распределение задач: Задачи отправляются в доступные веб-воркеры сразу после поступления в очередь. Как только воркер завершает задачу, он немедленно получает следующую задачу из очереди, если есть ожидающие задачи.

Установка

Для установки Taskman-lib используйте npm:

npm install taskman-lib
yarn add taskman-lib

Класс TaskManager

TaskManager — это класс, с помощью которого можно добавлять функции-задачи на выполнение.

Пример использования

import { TaskManager, TaskPriority } from "multitasking-lib";

const tm = new TaskManager();

const task1 = addTask({
  worker: true,
  priority: TaskPriority.HIGH,
  delay: 1000,
  task: () => {
    /* ... */
  },
});

task1.then((result) => {
  console.log(1);
});

const task2 = addTask({
  task: () => {
    /* ... */
  },
});

task2.then((result) => {
  console.log(2);
});

Конструктор

new TaskManager()

Описание: Создает новый экземпляр класса MyClass.

Методы

addTask(options)

Описание: Добавляет задачу в очередь и запускает её если поток освободился.

Параметры:

  • options (тип: Object): Объект с параметрами для настройки класса.
    • worker (тип: boolean, по умолчанию: false): признак выполнения задачи в веб воркере.
    • priority (тип: TaskPriority, по умолчанию: TaskPriority.DEFAULT): приоритет задачи.
    • delay (тип: number, по умолчанию: 0): тайм-аут (время в мс, после которого запускается задача).
    • task (тип: Function или GeneratorFunction, обязательный): задача (функция или генератор).

Возвращает:

  • Promise: Результат возвращаемый функцией-задачей или ошибку.

Дополнительная информация

  • Примечания: если поле worker = true, то поле task должно являться чистой функцией без аргументов и без каррирования, потому что мы её приводим к строке.

  • Планы на будущее: добавить поле arguments, чтобы можно было прокидывать аргументы для функции в воркер