Estoy desarrollando una aplicación electron/nodejs que usa algunas expresiones regulares , dos de ellas son las siguientes:
str= str.replace(/\((.*?)\)/, ""); str= str.match(/\d+/g);Estoy usando estas expresiones regulares dentro de una función que bloquea mi interfaz de usuario de electrones. Luego probé la función y descubrí que las expresiones regulares están tomando mucho tiempo.
Investigué este problema a través de SO, pero ¡ay! Rendimiento de expresiones regulares de JavaScript. Esto no me ayudó.
Editar: tengo miles de cadenas para ser probadas por expresiones regulares. ¡lo que crea un impacto muy malo incluso bloquea la interfaz de usuario de mi aplicación de electrones!
He realizado una tarea similar en archivos de registro con cientos de miles de entradas. Desafortunadamente, Node y Electron no son las mejores opciones para este tipo de tareas.
Si bien tal vez no sea ideal, la solución general que pude usar fue crear una pequeña aplicación en golang (aunque podría ser cualquier otro lenguaje más eficiente) que acepta un argumento de línea de comando simple y luego devuelve datos canalizados.
Después de esto, pude usar Node/Electron para generar el proceso secundario y llamar al programa golang y obtener la respuesta. Pude reducir los minutos de procesamiento a segundos y seguir disfrutando de mi maravillosa interfaz Electron.
A veces, un poco de creatividad da para mucho. No hay un solo idioma que sea estelar en todo, a veces es mejor sacar fortalezas de cada uno.
Desafortunadamente, hacer ese tipo de procesamiento en miles de cadenas probablemente no sea demasiado eficiente, independientemente de lo que haga.
No tengo ninguna experiencia con electrones, pero puede ver si es posible usar trabajadores web para dividir el trabajo entre varios subprocesos y hacer que el procesamiento pesado se realice más rápido. Consulte Uso de trabajadores web de MDN y la respuesta principal a esta publicación SO para obtener buena información sobre los trabajadores web.