Tengo un código existente (que se ejecuta en el navegador), que sigue una determinada interfaz, que no quiero romper/refactorizar.
Hay una secuencia de llamadas a funciones. Una de esas funciones, que no está bajo mi control (proviene de alguna biblioteca), realiza cálculos pesados que congelan el hilo principal, lo que hace que la interfaz de usuario sea inútil durante unos 40 segundos.
Mi idea es usar un WebWorker, por supuesto. El problema es que, según los ejemplos que veo, un WebWorker requiere su propio script aislado, que se comunica con el hilo principal a través de "mensajes". Refactorizar mi código para que se ajuste a este "esquema" sería tedioso. Daré un ejemplo simplificado de lo que quiero lograr:
class MySimplifiedFacade{ consturctor(){ ... } someLightMethod(params){ //Do something light } //THIS IS THE FUNCTION I WOULD LIKE TO SOMEHOW ISOLATE INTO A WEBWORKER veryHeavyCalculations(params){ someExternalLibrary.heavySynchronousCalculation(params) } }Lo único en la secuencia de acciones, que en realidad requiere un WebWorker, es esta función llamada "veryHeavyCalculations" en el ejemplo.
¿Es posible aislar de alguna manera una "pieza de código" específica dentro de un WebWorker? El problema es, según tengo entendido, que cualquier cosa que pase a un WebWorker a través de mensajes debe ser "serializable", mientras que en mi caso necesitaría pasar una referencia a algún objeto existente.
¿Algunas ideas?