Estoy trabajando en una aplicación de JavaScript que realizará algunos cálculos en el lado del cliente (dentro del navegador). Sin embargo, más adelante se encontrará que el cálculo es bastante costoso, y ejecutarlos en el subproceso principal bloqueará la interfaz de usuario. Así que decidí ejecutarlos en el trabajador web.
Dado que la lógica para el cálculo ya está escrita en módulos de JavaScript y se incluye con un paquete web (para ser exactos, son módulos de mecanografiado como parte de una aplicación de reacción), el enfoque más natural es usar el module de trabajador con tipo. Sin embargo, como en 2022, esta función no es compatible con los navegadores más antiguos, en particular, Firefox no la admite. Esto me impide usar esta característica.
Con solo el trabajador clásico, la única solución que se me ocurrió es copiar todos estos módulos (y su dependencia) en un solo archivo js, lo que será una pesadilla para la capacidad de mantenimiento. ¿Hay alguna forma de solucionar este problema (por ejemplo, generar este único archivo js mediante programación sin alterar el código existente)? En particular, dado que estoy usando un paquete web, pensé en crear un paquete separado de todo el código del módulo para el trabajador. Pero no estoy lo suficientemente familiarizado con el paquete web para intentarlo.
La versión 5 de WebPack ofrece soporte para trabajadores listo para usar.
Es relativamente fácil incluir worker-loader para que algo similar funcione en la versión 4 de Webpack.
Sin embargo, si el objetivo es tener una conversación con el trabajador web (es decir, pasar parámetros, obtener resultados), entonces podría valer la pena buscar en el enlace de comunicación de comlink o incluso integrar el comlink-loader en la configuración de su paquete web.
Comlink hace que WebWorkers sea agradable. Comlink es una pequeña biblioteca (1.1kB), que elimina la barrera mental de pensar en postMessage y oculta el hecho de que está trabajando con trabajadores.