SPIP-Contrib

SPIP-Contrib

عربي | Deutsch | English | Español | français | italiano | Nederlands

288 Plugins, 197 contribs sur SPIP-Zone, 244 visiteurs en ce moment

Accueil > Documentation > Tutoriaux pour le code de SPIP > Archives tutoriaux code SPIP > La genèse du nouveau compilateur > Un nouveau compilateur de squelettes

Un nouveau compilateur de squelettes

19 mars 2004 – par Antoine, Déesse A.

1 vote

Ceci est une archive périmée mais qui reste intéressante, parfois autant pour l’article que les commentaires associés.

Division par 2 de la taille des squelettes produits et corrections de qq bugs

Débutant en SPIP il y a 2 mois, j’ai été gêné par l’absence de messages d’erreur en cas de paramètres de boucle ineptes. Du coup, j’ai regardé le code du fichier inc-calcul-squel.php3, et l’ai modifié en appliquant des techniques standards de compilation pour clarifier le code produit, savoir :

-  éliminer l’affectation d’une variable inutilisée ou réaffectée dans la suite du code ;

-  éliminer l’affectation d’une variable utilisée une seule fois dans la suite du code,
en remplaçant cette unique occurrence par la partie droite de l’affectation ;

-  remplacer toutes les occurrences d’une variable par sa valeur lorsque celle-ci est connue à la compilation ;

-  remplacer « if condition alors sinon » par l’alternant approprié lorsque la condition est connue à la compilation (constante ou objet non vide typiquement)

-  éliminer « while condition {} » (cas se produisant avec TOTAL_BOUCLE, qui est en fait équivalent à num_rows ce que SPIP ne permet pas de dire autrement qu’en
parcourant toute la table, ce qui n’est ainsi plus le cas).

Ces méthodes ont apporté un gain de 50% sur les squelettes standards :

Nom Taille initiale Taille finale
article-dist.php3 71140 36628
breve-dist.php3 45934 23435
forum-dist.php3 20518 10115
plan-dist.php3 23718 11188
resume-dist.php3 36398 18025
rubrique-dist.php3 48099 23781
sommaire-dist.php3 33499 16673
Total 298701 139845

Les bugs repérés :

-  en cas de hiérarchie, les Rows n’étaient pas transmises aux boucles internes (par suite d’une confusion entre la variable $boucles du compilo et $pile_boucle du squelette produit) et les doublons étaient mal calculés (même cause, avec $doublon et $instance->doublon) ;

-  dans la fonction principale du squelette, on pouvait référencer $id_instance qui n’y est pas définie (bug visible dans le squelette forum) ;

-  le + important : le séparateur (paramètre comme {", "}) était rajouté à chaque tour de boucle, et non à chaque fois qu’un résultat nouveau est produit, ce qui n’est pas la même chose en cas de boucles imbriquées (voir exemple utile en pièce jointe : calcul de tous les mots-clés de toutes les rubriques).

En outre, un paramètre fautif est dénoncé (ceux de BIOSPIP oublient les guillemets, d’où absence de séparateur, sans explication ; j’ai prévenu l’auteur qui a corrigé).

Les optimisations réalisées devraient diminuer la taille des processus (moins d’allocation de mémoire) et autoriser les squelettes à rester plus longtemps dans le cache disque du serveur. Sur la durée d’exécution du processus lui-même une amélioration n’est perceptible que sur des exemples où la base de donnée est
réduite, car les réponses de MySQL sont le plus gourmand en temps.

Une suite à mon travail serait précisément de calculer les champs effectivement utilisés dans un squelette pour minimiser ces réponses (c’est d’ailleurs ce qui est
fait depuis longtemps pour la table ARTICLE). Je veux bien me lancer là-dedans,
mais il faudrait d’abord intégrer ce que j’ai fait au CVS. J’étais parti de la version
1.6 officielle (fichier inc-calcul-squel du 10 Mai), je veux bien prendre le temps de synchroniser avec la dernière version sur CVS (le diff avec la 1.6 est encore assez petit) si vous souhaitez adopter mon travail. A signaler que j’ai éclaté ce fichier en
5 (parsing/production/debug/écriture/donnees) ce qui réduira d’ailleurs les conflits
d’accès sous CVS par la suite.

La première pièce jointe contient les 5+1 fichiers PHP.
La deuxième est une modif du squelette sommaire, comportant le calcul de tous les mot-clés du site.

Tout commentaire est évidemment le bienvenu.

P.-S.

Mille mercis à Antoine de m’avoir donné le tuyau de l’Apache Benchmark (/usr/sbin/ab) et surtout d’avoir copieusement éprouvé une première version.

Dernière modification de cette page le 16 juin 2007

Retour en haut de la page

Répondre à cet article

Qui êtes-vous ?

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici Les choses à faire avant de poser une question (Prolégomènes aux rapports de bugs. )
Ajouter un document

Retour en haut de la page

Ça discute par ici

  • Serveur HTTP abstrait

    25 novembre 2013 – commentaires

    Un plugin-outil pour aider les développeurs à implémenter des API orientées REST, basées sur les méthodes HTTP (get, post, put, delete). Ce plugin a pour but premier de normaliser des URL que l’on pourra appeler pour manipuler les données du site. À (...)

  • Agenda Fullcalendar facile

    29 octobre 2016 – 33 commentaires

    Dans un précédent article, nous expliquions comment afficher un agenda Fullcalendar sur son site avec le plugin agenda. Cependant, ceci nécessite des manipulation de squelettes, ce qui n’est pas toujours évident lorsqu’on débute. La présente (...)

  • LinkCheck : vérificateur de liens

    13 février 2015 – 93 commentaires

    Ce plugin permet de chercher et tester l’ensemble des liens présents dans les objets. Vous pourrez donc en quelques clics connaître les liens brisés ou défectueux qui se sont immiscés dans le contenu de votre site SPIP. La vérification s’effectue en (...)

  • Acces Restreint 3.0

    11 décembre 2008 – 804 commentaires

    Le plugin accès restreint permet de définir et de gérer des zones de l’espace public en accès restreint. Cette version du plugin a été redévelopée et optimisée tout spécialement pour SPIP 2.0. Il en découle une amélioration des performances sur les gros (...)

  • Abonnements

    31 janvier 2015 – 18 commentaires

    Gérer des abonnements à des offres, et uniquement cela. Ce plugin a pour but de regrouper tout ce qui est commun aux différents types d’abonnements possibles (à des zones restreintes, à des contenus précis, à une version papier pourquoi pas (...)

Ça spipe par là