¿Escribirías un lexer / parser para analizar HTML (por ejemplo, validador) en C ++ o Javascript y por qué?

Use Javascript del lado del cliente. JSLint ya analiza JavaScript, por lo que no es un problema con respecto al rendimiento: la herramienta de calidad de código de JavaScript

Hemos aprovechado JSLint y un analizador HTML personalizado para validar tanto el HTML como el Javascript para una página en el pasado, y puedo confirmar que el rendimiento no es una preocupación (es parte de un sistema propietario que lamentablemente no puedo compartir, pero ya puede vea lo que debe hacer sumergiéndose en el código JSLint de código abierto).

No use Node, no está diseñado para operaciones de cómputo como este. Pérdida de personas que están pasando por el nodo, pero tiene desventajas, y su mayor es que no es del todo adecuado como servidor de cómputo. Otro equipo de mi empresa quedó impresionado por la velocidad del motor V8, y pensó que podrían descargar las operaciones de cálculo de números (es una aplicación de informes con un poco de visualización del lado del cliente) a un servidor de nodo, y funcionó realmente bien en desarrollo hasta que pusieron en línea y tenía 100 solicitudes concurrentes; hilo único – ¡boom!

C ++ o similar crearía una aplicación independiente que debe crear desde cero, mientras que hacerlo en el navegador hace que la UI / UX sea mucho más simple y esté más disponible para los usuarios (sería una página web, muy similar al enlace de JSLint anterior) . Otra cosa buena de tenerlo como una página web en línea es que ni siquiera tiene que cargar la fuente; solo dale una URL y desaparecerá y analizará la página y se podría hacer que recorra múltiples fuentes de la página y comente cosas como dependencias y bibliotecas públicas desactualizadas.

Es poco probable que importe

  • El cuello de botella va a ser el tiempo dedicado a descargar archivos, no a analizarlos.
  • Chrome tiene que ejecutar aplicaciones web de JavaScript en tiempo real mientras un usuario mira e interactúa con la página, por lo que los requisitos de rendimiento en tiempo real son más altos de lo que serían para el procesamiento fuera de línea o por lotes

No, debe aprovechar el arduo trabajo que ya se ha realizado en C ++ en la construcción de V8 y las herramientas de análisis de DOM comunes en JavaScript. Puede tener una buena solución ejecutándose en NodeJS más rápido de lo que puede aprender suficiente C ++ para comenzar a construir una solución que probablemente no sea tan buena.

Teóricamente, podría escribir usted mismo un analizador y analizador C ++ altamente eficiente, lo que podría ser un desafío interesante para aprender, pero es un riesgo más alto y una estrategia mucho más costosa (el costo más importante es su propio tiempo).

No usaría un lenguaje con script para analizar ningún archivo de texto, especialmente los grandes, debido a consideraciones de rendimiento. Pero podría usar C # o Embarcadero Delphi para analizar el HTML. (VB también sería una opción, pero no me gusta VB.) También usaría expresiones regulares para parte del análisis. Pero si el lexer / parser necesita ejecutarse en Linux, OS X, Windows y otras plataformas, usaría C ++.

Pero depende del análisis exacto que desee hacer.