Worklet support
- Vorherrschende Sprache
- TypeScript
- Sterne
- 27k
- Forks
- 11.8k
- Ø Merge
- 14 Std. 23 Min.
- Gemergte PRs (30 T.)
- 162
Beschreibung
### Which @angular/* package(s) are relevant/related to the feature request?
compiler
### Description
The [worklets](https://developer.mozilla.org/en-US/docs/Web/API/Worklet) are light weighted version of web workers. Currently Angular supports web workers, but not worklets, this makes us unable to make use of Angular's Typescript and bundling support when writing a worklet (i.e. we have to write the worklet in pure Javasctript, or deal with compiling and bundling ourselves).
### Proposed solution
Support worklet like web workers.
### Alternatives considered
For now we have come to a hacky workaround:
1. Write the worklet as if it's a web worker. This is perfecly supported by Angular. Now the problem is, to load the compiled worker script, we don't have a trivial way to get its URL.
2. Wrap the worker code like this:
```js
if (typeof self !== "undefined") {
postMessage(self.location.href);
} else {
// do the worklet thing
}
```
When `self` is not `undefined`, we know this script is loaded as a webworker (in a worklet context it would be `undefined`). In this case, send the script's location by `postMessage`.
3. When trying to load the worklet, first load it as a web worker, wait for it to report the location, then terminate the worker and use the location to load the worklet.
E.g. load an audio worklet:
```typescript
// probe worker url
const worker = new Worker(
new URL("path/to/the/worker", import.meta.url),
);
const url = await new Promise((resolve, reject) => {
worker.onmessage = (e) => {
resolve(e.data);
worker.terminate();
};
worker.onmessageerror = reject;
});
await audioContext.audioWorklet.addModule(url);
```
Beitragsleitfaden
Rechercherichtung
Beginne damit, die vorhandene web-worker-Unterstützung des Compilers zu lesen und sie mit der in diesem Issue beschriebenen Worklet API zu vergleichen. Die Arbeit ist abgeschlossen, wenn Angular eine gleichwertige TypeScript-Kompilierungs- und Bundling-Unterstützung für Worklets bietet, mit Abdeckung für den angeforderten Ladeablauf.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- angular, typescript
- Bereich
- build-system
- Issue-Typ
- Feature
- Schwierigkeit
- 5/5
- Geschätzter Aufwand
- Über eine Woche
- Aktivitätsstatus
- Veraltet
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 35/100