Tous les filtres sont convertis en expressions régulières en interne, même ceux qui n'ont pas été spécifiés en tant que tel. Par exemple, le filtre ad*banner.gif|
sera traduit dans l'expression régulière /ad.*banner\.gif$/
. Cependant, lorsqu'Adblock Plus indique une adresse devant être vérifiée à partir de tous les filtres, elle ne teste pas simplement chaque filtre l'un après l'autre — cela ralentirait inutilement votre surf.
En plus de convertir les filtres en expressions régulières, Adblock Plus essaie aussi d'en extraire des informations textuelles. Ce dont elle a besoin est une séquence unique de huit caractères (un "raccourci") qui devra se trouver dans toutes les adresses coïncidant au filtre (la longueur est arbitraire, huit semblerait être raisonnable ici). Par exemple, si vous avez un filtre |http://ad.*
alors Adblock Plus aura le choix entre "http://a", "ttp://ad" et "tp://ad.", n'importe laquelle de ces séquences se trouvera toujours dans quoi que ce que le filtre bloquera. Malheureusement, trouver un raccourci pour des filtres qui n'ont pas de chaîne de huit caractères sans comporter de joker ou pour des filtres qui ont été spécifiés en utilisant des expressions régulières est impossible.
Tous les raccourcis sont placés dans une table consultable par Adblock Plus pour trouver les filtres à partir des raccourcis de manière très efficaces. Ensuite, lorsqu'une adresse spécifique doit être testée Adblock Plus vérifiera dans cette table s'il y existe des raccourcis (cela peut se faire très rapidement, le temps pris est presque indépendant du nombre de raccourcis). La chaîne de caractère sera testée à partir de l'expression régulière correspondant au filtre uniquement si un raccourci a été trouvé. Cependant, les filtres sans raccourcis devront être testés les uns après les autres, ce qui se fait lentement.
Pour résumer: quels types de filtres devraient être utilisés pour obtenir une liste de filtres rapide ? Vous devriez utiliser le moins d'expressions régulières possibles, elles sont toujours lentes. Vous devriez également vérifier qu'une séquence d'au moins 8 caractères sans joker est présente dans les filtres (cela veut dire que la séquence ne comporte pas de * par exemple), sinon, ils seront aussi lent que des expressions régulières. Mais avec des filtres qualifiant, le nombre de filtres n'a aucune importance, le temps de traitement est toujours le même. Cela signifie que si vous avez besoin de 20 filtres simples pour remplacer une expression régulière, cela lui donne quand même une signification. En parlant de cela — le deregifier est tout à fait recommandable pour ce genre d'opération.
L'algorithme de correspondance de filtres en détail [en anglais]