2017-02-10 5 views
0

Je travaille actuellement sur une extension Mediawiki qui doit analyser le wikitext sur une page. Actuellement, j'utilise Parser :: preprocess. Cela ajoute quelques secondes au temps de chargement de la page.Analyse wikitext optimisée/plus rapide dans l'extension Mediawiki?

Y at-il un moyen plus rapide de faire cela? En particulier, il doit analyser wikitext, développer tous les modèles et les fonctions de l'analyseur, et vérifier les chaînes spécifiques dans le résultat.

+1

Faites-le lorsque la page est enregistrée, enregistrez le résultat. – Tgr

+0

J'ai besoin du résultat analysé dans le hook userCan. Y at-il une variable où je peux mettre en cache le résultat analysé? – user1258361

Répondre

2

L'analyse n'est pas une opération que vous pouvez raisonnablement espérer rapide; vous devez concevoir votre extension de telle sorte que l'analyse ne soit nécessaire que lorsque le wikitext d'une page (ou de certaines de ses dépendances) change - ie. intégrer n'importe quelle logique dans l'un des crochets de l'analyseur, tels que InternalParseBeforeSanitize et stocker les résultats.

Normalement, vous utiliserez la table page_props pour cela (voir ParserOutput::setProperty) mais si c'est quelque chose de sécurité, vous devriez examiner attentivement si cela fonctionne pour vous (c'est par page, pas par révision, et il y a une petite fenêtre entre la page et la table des accessoires mise à jour). Dans une version future de MediaWiki, vous pourrez stocker des métadonnées arbitraires par révision dans des emplacements virtuels MCR; pour l'instant vous devez l'implémenter à partir de zéro, dans votre propre table, dans l'extension. Vous pouvez toujours effectuer une mise en cache légère si vous estimez que le délai est acceptable sur les pages peu consultées (utilisez ObjectCache::getMainWANInstance() pour obtenir une instance WANObjectCache et utilisez la méthode getWithSetCallback).

+0

J'ai juste besoin d'un moyen de stocker le wikitext analysé entre les charges de la page. De préférence sans changement de base de données. – user1258361

+1

J'ai développé un peu sur la mise en cache non-DB. – Tgr

+0

J'ai lu votre réponse mise à jour (et merci pour l'aide). Quelle est la persistance de ces caches WAN? Juste besoin d'un endroit pour tenir le wikitext analysé après chaque sauvegarde de la page. Comme bonus supplémentaire, je n'aurais même pas besoin de refaire le wikitext - ajouter un crochet juste avant que la page ne soit affichée et récupérer le résultat. – user1258361