viernes, 6 de marzo de 2009

Dificultades superadas

En un principio el programa analizaba una edición tras otra, de forma secuencial. Este sistema era bastante lento, pues había que esperar a que se terminara de comprobar una edición para saltar a la siguiente y en Wikipedia en español el ritmo de modicaciones a veces superaba al ritmo de análisis. Para evitar esto se introdujo el uso de hilos, mediante la librería thread. Con esta solución, cada vez que llegan los datos de un cambio, se llama a la función de análisis. Si llegan varias modificaciones a la vez, no se espera a que termine una para empezar con la siguiente, ya que son independientes.

Otro aspecto relevante es el precompilado de expresiones. Cada vez que era analizada una edición, había que pasar la lista de expresiones (varios cientos de ellas) sobre un texto que en algunas ocasiones era bastante extenso. Este proceso requería los siguientes pasos:
  1. Leer la expresión regular.
  2. Compilar la expresión regular.
  3. Pasar la expresión regular compilada al texto objetivo.
  4. Volver al paso 1 con la siguiente expresión.
Se puede evitar la compilación continua de una misma expresión si guardamos el resultado de dicha compilación. Por ello, se implentó una mejora en el cargador de expresiones, que en vez de guardar sólamente la expresión en cruda, guarda su compilación. La mejora fue drástica. De tener que compilar entorno a 600 expresiones por cada página analizada, lo que hacía que el proceso de análisis consumiera unos 10 segundos, se pasó a menos de una milésima de segundo por análisis. Denitivamente esta fue una mejora crucial en el programa.