Non aux brevets logiciels

SpipLab

TachesDeFond

PagePrincipale :: DerniersChangements :: Vous êtes 38.103.63.16 (Connexion)

Le problème

Dans le mécanisme traditionnel de SPIP, les tâches de fond sont appelées à chaque fin de page de l’espace public. Cela entraîne des possibilités de ralentissements voire de timeouts PHP, ce qui implique d’éparpiller au maximum les calculs, donc de mettre en place un mécanisme compliqué, potentiellement buggé (voir les problèmes d’indexation sur certains sites), et ralentissant certaines tâches (indexation très longue sur un gros site).

Le principe

Le nouveau mécanisme est totalement différent.

Les tâches de fond sont appelées via un script séparé (spip_background.php) renvoyant une image transparente. Le script est référencé dans l’attribut "background-image" d’un <div> inséré automatiquement au bas des pages. Cela a plusieurs avantages :

-  les navigateurs courants (Mozilla, Internet Explorer, Konqueror...) affichent entièrement la page sans attendre que le script spip_background.php ait terminé ; tout se passe comme si la page était déjà chargée, le visiteur ne remarque rien ; aucun délai (avec un <img> plutôt qu’un "background-image", le brouteur se comporterait comme si la page était encore en chargement, ce qui est un peu pénible)

-  les robots débiles (aspirateurs mal réglés, moteurs de recherche) ne déclenchent pas de tâches de fond lorsqu’ils font des requêtes en rafale (puisqu’ils ne lisent pas les feuilles de style) : on évite de mettre à plat le serveur en cas d’attaque d’un tel robot

-  on peut faire beaucoup plus de travail à chaque appel des tâches de fond : ainsi la version actuelle indexe dix nouveaux objets à chaque fois, ce qui accélère radicalement la vitesse d’indexation d’un site

-  les tâches de fond sont désormais aussi appelées depuis l’espace privé (avec le même principe : <div> référençant un "background-image" transparent en fin de page) : cela évite que le moteur de recherche ne renvoie rien pendant des semaines quand on commence à travailler sur un site et qu’on n’a pas de visiteurs (problème courant et assez pénible)

Dans la version lab : Techniquement, le <div> est ajouté dans le HTML avant une balise fermante </body> ou </html>, si elle est trouvée. Cela assure que le mécanisme ne casse pas la validité du code (X)HTML envoyé au brouteur (le <div> apparaît bien à un endroit autorisé).

Dans la version officielle : Le <div> n’est pas ajouté automatiquement, il faut ajouter la balise #SPIP_CRON dans le squelette d’une page fréquentée. Cela assure encore plus que le mécanisme ne casse rien.

Optimisation du mécanisme

Le script spip_background.php interdit de faire plus d’un appel par seconde, afin d’éviter de marteler le serveur en cas de pic de fréquentation (précaution supplémentaire en plus du fait qu’il soit appelé par une feuille de style). Lorsqu’aucune tâche de fond n’est effectuée, le script est extrêmement rapide (20 fois plus rapide que l’appel d’une page SPIP depuis le cache), ce qui élimine tout risque de surcharge.

Exécution manuelle

Pour ceux qui ont accès à leur serveur, il est possible de lancer les tâches de fond en ligne de commande, en aspirant le spip_background.php. Il faut pour cela l’appeler avec le paramètre forcer=oui, ce qui désactive la protection mentionnée ci-dessus. Par exemple (avec ApacheBench) :

/usr/sbin/ab -n 100 http://www.monsite.com/(...)/spip_background.php?forcer=oui