Todos los filtros se convierten internamente en expresiones regulares, incluso los que no están especificados como tales. Por ejemplo, el filtro ad*banner.gif|
se convertirá en la expresión regular /ad.*banner\.gif$/
. Sin embargo, cuando se le da una dirección a Adblock Plus para que la compare con los filtros no se limita a probarlos todos uno tras otro, pues eso ralentizaría innecesariamente el navegador.
Además de convertir los filtros en expresiones regulares, Adblock Plus intenta extraer de ellos información textual. Lo que necesita una única cadena de 8 caracteres (un "atajo") que debe estar presente en cualquier dirección que coincida con el filtro (esa longitud es arbitraria, sencillamente ocho caracteres parecía una cantidad razonable). Por ejemplo, si usted tiene un filtro como |http://ad.*
, Adblock Plus tiene que elegir entre "http://a", "ttp://ad" y "tp://ad."; cualquiera de esas cadenas estará siempre presente en cualquier filtro que coincida con la dirección. Lo malo es que no se puede encontrar una atajo para filtros que no tengan ocho caracteres que no estén separados por comodines, o que ya hayan sido especificados como expresiones regulares.
Todos los atajos se incluyen en una table de consulta, de modo que Adblock Plus puede encontrar de forma muy eficiente el filtro mediante su atajo. Cuando Adblock Plus tiene que probar una dirección concreta primero mira los atajos conocidos (esto se hará muy rápidamente, pues el tiempo necesario es casi independiente del número de atajos). Sólo cuando se encuentra un atajo se procede a comprobar la cadena de texto con la expresión regular del filtro correspondiente. Sin embargo, los filtros que no tienen atajo tienen que probarse uno a uno, lo que resulta lento.
En resumen: ¿qué filtros deben usarse para que la lista de filtros sea más rápida? Debe intentar usar el menor número de expresiones regulares posible, pues siempre serán lentas. También debe asegurarse de que los filtros simples tienen al menos ocho caracteres de texto sin interrupciones (es decir, sin contener caracteres especiales como *), pues en caso contrario el filtro será tan lento como una expresión regular. Pero con filtros que cumplan esa regla no importará cuántos tenga, el tiempo de procesamiento será siempre el mismo. Eso significa que si necesita 20 filtros simples para reemplazar una expresión regular, vale la pena hacerlo. Y ya que mencionamos el tema, es muy recomendable utilizar el deregifier (aplicación que deshace las expresiones regulares).
Explicación detallada del algoritmo de comprobación de filtros.