Je suis en train d'essayer les web workers pour exécuter un script d'analyse de données qui prend beaucoup de temps dans mon application Angular 8, mais j'ai quelques difficultés à regrouper le worker. Je cherche de l'aide pour comprendre ce qui me manque.
J'ai généré un nouveau travailleur pour mon projet en utilisant les schémas inclus avec Angular-CLI 8.0.2 :
ng g webWorker suggestions --project=my-project
Cela génère une nouvelle suggestions.worker.ts
y tsconfig.worker.ts
et met à jour mon tsconfig.app.json
, angular.json
y package.json
. Ils me semblent corrects, mais je peux fournir des détails si nécessaire.
J'ai déplacé mon suggestions.worker.ts
dans le même dossier que le service qui instanciera le travailleur. La fonction d'instanciation du travailleur se présente comme suit :
async calculateSuggestions<T>(
data: T[]
): Promise<Suggestions<T>> {
const worker = new Worker('./suggestions.worker', {
type: 'module',
});
const result = new Promise((resolve, reject) => {
worker.onmessage = ({ data }) => {
resolve(data);
};
worker.onerror = ({ error }) => {
reject(error);
};
}) as Promise<Suggestions<T>>;
worker.postMessage({
data: data
});
return result;
}
Cependant, lorsque je construis mon projet, l'avertissement et l'erreur suivants apparaissent :
WARNING in new Worker() will only be bundled if passed a String.
ERROR in chunk suggestions-suggestions-module
suggestions-suggestions-module.js
{..} \node_modules\@ngtools\webpack\src\index.js! {..} \src\app\extractor\
No template for dependency: ConstDependency
Je pense que je n'ai pas instancié le fichier Worker
correctement, ce qui fait échouer le processus de regroupement.
L'avertissement semble indiquer que je devrais passer un fichier String
à la Worker
mais je le fais déjà.
En outre, le chemin derrière le point d'exclamation à la ligne 3 de l'erreur est en fait deux dossiers au-dessus de l'endroit où je stocke mon service et mes fichiers de travail. Peut-être est-ce un indice ?
Toute suggestion sera très appréciée !