Bonjour,
pour mon appli j'ai écrit une lib composée d'un ensemble de classes ES6 gérant des données (c'est le "modèle" de mon appli), avec de l'héritage, des propriétés, des méthodes, des getters/setters et ces méthodes/propriétés/getters peuvent parfois renvoyer un autre objet lui-même instance d'une classe de la lib.
Jusqu'ici, tout va bien ...
Maintenant, certaines fonctionnalités-clés de mon appli peuvent executer des calculs qui sont déjà implémentés et marchent bien, mais qui sont un peu coûteux. Et comme ceux-ci ne font pas appel au DOM et ne modifient pas les données-source, je voudrais les "paralléliser" dans un WebWorker de façon a alléger le thread principal de ma page.
Et là ça se complique : lors du postMessage au worker, j'ai une erreur :
Si j'ai bien compris, c'est parce que JS n'arrive pas à cloner mes objets avec L'algorithme de clonage structuré.Failed to execute 'postMessage' on 'Worker': URL object could not be cloned
J'ai essayé de serialiser mon objet avec un JSON.stringify(), mais là j'ai une autre erreur à cause de références cycliques.
Or, dans le worker, j'ai vraiment besoin des méthodes de mes classes, donc je ne peux pas "réduire" mes objets à des types JS natifs : sans le code de mes classes, le worker n'aurait plus aucun intérêt.
D'où ma question :
=> Existe-t-il un moyen de personnaliser (de façon "intégrée" proprement au language) la façon dont les instances de mes classes sont clonées (par exemple en codant quelles propriétés sont clonées ou pas et comment ?).
=> A défaut, même question pour leur serialisation avec JSON.parse()
=> Si non, connaissez-vous des contournements qui me permettraient de passer au worker les données ET l'implem des traitements (= les méthodes de mes classes) ?
Merci d'avance
Partager