Je rechignais à mettre à jour ma version de shaarli pour deux raisons :
<br />, au sein de mes articles. Or, pour des raisons de sécurité, les versions ultérieures de shaarli les neutralisent.Trois points m'ont motivé à franchir le pas :
time curl : 690-700 ms en moyenne sur la page d'accueil ; 630 ms pour afficher un court article. Outils de développement web de Firefox : 580 ms en moyenne. Même mon Wordpress, avec son SGBD, était plus rapide (avant que je le démantèle) ! Je ne constate pas cette lenteur sur d'autres shaarlis pourvus d'un nombre d'articles similaire au mien, et que dire de celui de SebSauvage, quasiment 6 fois plus d'articles ! J'avais profilé le code et j'avais compris que la lenteur venait de la lecture et du traitement (échappement HTML) de l'ensemble des articles de la base de données, même pour afficher un article. Les notes de versions ultérieures de shaarli annoncent du changement. Pourquoi refuser de tester ? ;Je suis donc passé, étape par étape, de version majeure en version majeure, de la version 0.7.0 (de mai 2016 😮️, ce que le temps passe vite !) à la version 0.16.5 (la dernière, d'il y a un mois).
J'ai galéré sur plusieurs points :
tpl\/ à raintpl_tpl et default à theme ;PHP Fatal error: Uncaught Error: Shaarli\\Security\\LoginManager::__construct(): Argument [#1](http://shaarli.guiguishow.info/./add-tag/1) ($globals) could not be passed by reference in <CENSURE>/index.php:126. Je suis passé à la version 0.11 sans chercher à comprendre ;php.ini, mais dans le fichier init.php de shaarli 😑️. (Je déteste les applis qui touchent les paramètres serveurs.) Cette migration aura pour conséquence que tous les articles seront présentés comme ayant été modifiés le jour de la migration ;.htaccess. Je l'ai activé. Marche pas. J'ai mis un temps démesuré à comprendre que ma méthode de déploiement de shaarli dans le DocumentRoot n'englobait pas le .htaccess livré par shaarli 🙄️. Entre-temps, J'ai suivi la doc pour se passer de réécriture : ça ne fonctionne pas. Enfin, si, root_url répare les liens vers les flux RSS et Atom, mais pas celui pour s'identifier, ni celui, direct, vers chacun des articles, ni l'ancien format des liens (« /?6PDbnA », par ex.) ;/tpl/vintage/linklist.paging.html, l'élément div[@class=paging_current] n'est affiché que s'il y a plus d'une page d'articles. Donc, sur l'affichage individuel d'un article, il y a un décalage, une ligne blanche, entre l'entête de page et l'article. Pour réparer sans prise de tête, j'ai ajouté une espace insécable avant la condition ;Pour rétablir l'utilisation des balises HTML dans le cœur des articles, pas besoin de crapahuter dans le code, il suffit d'ajouter "markdown_escape": false dans le bloc security du fichier de conf'. Dommage que cette option n'est pas documentée. J'en ai eu connaissance uniquement car j'ai consulté le fichier de configuration après chaque montée de version et que l'outil de migration apparue avec la version 0.12 positionne cette directive.
Après, il a fallu modifier le thème :
Il reste des bugs dans la version 0.16.5 :
Au final les deux objectifs recherchés sont satisfaits à moitié :
xdebug montre que le gros du temps est consommé dans BookmarkFilter (notamment la fonction noFilter()) et BookmarkArray (notamment la fonction current()), donc toujours la lecture de la base de données, mais, au fond, rien à signaler. Surtout, il n'y a plus 4-5 assainissements par article dès leur lecture dans la base de données. time curl tourne autour de 480 ms pour la page d'accueil, et 400 ms pour un article. Les outils de développement de Firefox tournent autour de 350 ms, parfois 280 ms, parfois 480 ms. Sur mon ordinateur personnel, je suis à 230 ms voire moins, constamment. J'en déduis que la fluctuation est causée par la charge de mon serveur (je n'ai qu'un vCPU) et par celle de mes colocataires (je loue une machine virtuelle). Cependant, le gain est déjà notable. Je ne peux pas aller plus loin : les dossiers « cache », « pagecache », et « tmp » sont déjà des tmpfs (du stockage en mémoire vive) ; la base de données est déjà mise en cache par Linux (j'observe cela avec vmtouch, lire ici).