Moodle Plugins directory: WebWorkers Support: Versions: 0.2.7 | Moodle.org
WebWorkers Support
Local plugins ::: local_webworkers
Maintained by
Darren Cocco
Web Workers Support
WebWorkers Support 0.2.7
Moodle 4.1, 4.2, 4.3, 4.4, 4.5
Released: Tuesday, 5 November 2024, 10:51 AM
Moodle Web Worker support
Adds a way of using Web Workers inside of YUI and AMD code
Web workers give you the ability to run JavaScript code in a thread that will not interrupt the main thread that all the DOM interactions etc run on.
TODO
- Add caching to worker.php (done)
- Test and add support for Service Workers
- Add Shared Workers tests (done)
Usage examples
For YUI use:
var exampleDedicatedWorker;
M.util.js_pending("YUI/yourScriptName/exampleDedicatedWorker");
require(["local_webworkers/web_worker"], function(webWorker) {
exampleDedicatedWorker = new Worker(webWorker.toURI("{plugin}/{component}"));
M.util.js_complete("YUI/yourScriptName/exampleDedicatedWorker");
});
exampleDedicatedWorker.onmessage = function(event) {
console.log(event.data);
};
For AMD use:
define(['local_webworkers/web_worker'], function({webWorker}) {
let dedicatedWorker = new Worker(webWorker.toURI('{plugin}/{component}'));
dedicatedWorker.addEventListener('message', function(event) {
console.log(event.data);
});
dedicatedWorker.postMessage('');
let sharedWorker = new SharedWorker(webWorker.toURI('{plugin}/{component}'));
sharedWorker.port.addEventListener('message', function(event) {
console.log(event.data);
});
sharedWorker.port.start();
sharedWorker.port.postMessage('');
});
Implement a Dedicated Worker:
define(['local_webworkers/web_worker'], function(webWorker) {
return {
init: function() {
self.addEventListener('message', function(e) {
self.postMessage({
type: 'TextMessage',
contentsString: e.data.contentsString,
});
});
webWorker.workerSetupComplete();
}
};
});
Implement a Shared Worker:
define(['local_webworkers/web_worker'], function(webWorker) {
return {
init: function() {
let portMap = [];
/**
* Generates a sequential set of numbers for the
* lifetime of the worker.
* @returns {Generator<number, void, *>}
*/
function* generatePortNumber() {
const start = 0;
const end = Infinity;
const step = 1;
for (let i = start; i < end; i += step) {
yield i;
}
}
let portNumber = generatePortNumber();
self.addEventListener("connect", (e) => {
let clientId = portNumber.next().value;
portMap[clientId] = e.ports[0];
e.ports[0].addEventListener("message", handleClientMessage(clientId));
e.ports[0].start();
});
let handleMessage = (clientId, e) => {
portMap.forEach(function (port, portId) {
if (clientId != portId) {
port.postMessage({
type: 'TextMessage',
clientId: clientId,
contentsString: e.data.contentsString,
});
} else {
port.postMessage({
type: 'Pong',
clientId: clientId,
contentsString: e.data.contentsString,
});
}
});
};
let handleClientMessage = (clientId) => {
return (e) => {
return handleMessage(clientId, e);
};
};
webWorker.workerSetupComplete();
}
};
});
Version information
- Version build number
- 2024110500
- Version release name
- 0.2.7
- Maturity
- Alpha
- MD5 Sum
- 0384ea46f982ef994c0b7b9474a98269
- Supported software
- Moodle 4.1, Moodle 4.2, Moodle 4.3, Moodle 4.4, Moodle 4.5
- Latest release for Moodle 4.1
- Latest release for Moodle 4.2
- Latest release for Moodle 4.3
- Latest release for Moodle 4.4
- Latest release for Moodle 4.5
Version control information
- Version control system (VCS)
- GIT
- VCS repository URL
- VCS tag
- v0.2.7
Default installation instructions for plugins of the type Local plugins
- Make sure you have all the required versions.
- Download and unpack the module.
- Place the folder in the "local" subdirectory.
- Visit http://yoursite.com/admin to finish the installation.