-
Notifications
You must be signed in to change notification settings - Fork 109
Description
These are 3/4 braking changes that I would like to introduce in version: 3.0.0
I chose to transcribe them so if someone wants to participate or give an opinion we can discuss it together 😃@iljadaderko @Pigotz @gonzachr @JonatanSalas @z4o4z
PROPOSAL 1 - remove killWorker
remove killWorker from the values returned by thehook, and manage the status through a controller
Before:
const [sortWorker, workerStatus, killWorker] = useWorker(sortDates);
const res = await sortWorker()
function onButtonClick = () => workerController.killWorker()After
const [sortWorker, workerController] = useWorker(sortDates);
const res = await sortWorker()
function onButtonClick = () => workerController.killWorker()PROs 👍
- we can add any functionality through the controller without introducing breaking changes
CONS 👎:
- Anywhing?
PROPOSAL 2- remove workerStatus
remove workerStatus from the values returned by thehook, and manage the status through a controller
Before:
const [sortWorker, workerStatus, killWorker] = useWorker(sortDates);
// workerStatus WORKER_STATUS.PENDING
try{
const res = await sortWorker()
// workerStatus WORKER_STATUS.SUCCESS
}catch(status, e){
// workerStatus WORKER_STATUS.ERROR or WORKER_STATUS.TIMEOUT_EXPIRED
}After
const [sortWorker, workerController] = useWorker(sortDates);
let workerStatus = workerController.getStatus() // WORKER_STATUS.PENDING
try{
const res = await sortWorker()
workerStatus = workerController.getStatus() // WORKER_STATUS.SUCCESS
}catch(status, e){
workerStatus = workerController.getStatus() // WORKER_STATUS.ERROR or WORKER_STATUS.TIMEOUT_EXPIRED
}PROs 👍
- we can add any functionality through the controller without introducing breaking changes
CONS 👎:
- the state of the worker will no longer be reactive through the react life cycle since it will no longer be a state but a simple variable)
PROPOSAL 3 - Inline dependencies
currently the worker dependencies are urls that will be injected through importScripts, since react-scripts still does not support web workers, we could allow to inject functions and objects into the worker
Before:
const [sortWorker, sortWorkerStatus, killWorker] = useWorker(sortDates, {
dependencies: [
"https://cdnjs.cloudflare.com/ajax/libs/date-fns/1.30.1/date_fns.js"
],
}
const res = await sortWorker(dates)After
const utils = {
manipulate: { ....}
add: {...}
}
const sortDates = (date) => {
var foo = utils.manipulate(date)
return foo
}
const [sortWorker, sortWorkerStatus, killWorker] = useWorker(sortDates, {
remoteDependencies: [
"https://cdnjs.cloudflare.com/ajax/libs/date-fns/1.30.1/date_fns.js"
],
localDependencies: [{ utils: utils }]
}
const res = await sortWorker(dates)Doubts 🤔:
- it is probably useless because we could pass the utils object to the function
Example:
const res = await sortWorker(dates, utils)PROPOSAL 4 - useWorkers hook
Manage multiple workers with a new hook: useWorkers
Before:
const [sortWorker1, workerStatus1, killWorker1] = useWorker(sortDates);
const [numbersWorker, workerStatus2, killWorker2] = useWorker(sortNumbers);
const [sortWorke2r, workerStatus3, killWorker3] = useWorker(sortDates);
const res1 = await sortWorker1(dates)
const res2 = await numbersWorker(numbers)
const res3 = await sortWorker2(dates)
function onButtonClick = () => killWorker2.killWorker()After using Array
const [workers] = useWorkers([sortDates, sortNumber, sortDates], options); // array or object?
const res1 = await workers[0](dates)
const res2 = await workers[1](numbers)
const res3 = await workers[2](dates)
function onButtonClick = () => workers[1].killWorker()After using Object
const [workers] = useWorkers({ sort1: sortDates, sort2: sortNumber, sort3: sortDates }, options); // array or object?
const res1 = await workers.sort1(dates)
const res2 = await workers.sort2(numbers)
const res3 = await workers.sort3(dates)
function onButtonClick = () => workers[1].killWorker()Doubts 🤔:
- should the first parameter be an
arrayor anobject?
PROs 👍
- less verbose
- future implementation of a thread pool
CONS 👎:
- Anywhing?
PROPOSAL 5 - No-Hook
Allow the use and generation of a webworker without having to use a hook
PROs 👍
- use of webworkers also within normal functions, or sagas
CONS 👎:
- Anywhing?
Other proposals are welcome :)