cache
dans les problèmes GitHub, trouvé quelques problèmes sur le cache mais pas ce que je demande.J'analyse un texte assez lourd (500 Ko) fourni par l'utilisateur en utilisant une grammaire d'environ 1 000 lignes.
{cache: true}
...--max-old-space-size=3000
), le tas passe à 2,5 Go et l'analyse réussit en 12 secondes.{cache: false}
, comme prévu, l'analyse des horloges est légèrement plus rapide à 10 s (cas non pathologique) et n'augmente pas l'utilisation de la mémoire.Il s'agit de données utilisateur et les ressources de mon serveur sont limitées, donc remplacer Node pour utiliser X Go de tas n'est pas une option, car demain je pourrais obtenir 1 Mo de données utilisateur qui nécessiteraient X + 1 Go de tas. Et bien sûr, j'aimerais continuer à utiliser {cache: true}
lorsque cela est possible, pour "éviter le temps d'analyse exponentiel dans les cas pathologiques" , que j'ai rencontrés.
Quelle approche recommandez-vous?
{cache: true}
fonction de la taille de l'entrée. Cela me coûtera plus d'utilisation du processeur, mais au moins je ne ferai pas de MOO.Merci pour PEG.js ! ??
Les temps d'analyse exponentielle sont quelque chose qui se produit dans des cas très pathologiques, et je recommanderais d'y réécrire la grammaire.
Considérez https://github.com/sirthias/pegdown/issues/43#issuecomment -18469752
(je ne suis pas contributeur)
Comme @polkovnikov-ph l'a souligné, il est préférable de réécrire les parties de votre grammaire qui traitent des cas pathologiques, mais si vous continuez à frapper des cas OOM, il serait peut-être préférable de faire ce que vous avez suggéré (@ronjouch) ; basculer l'option _cache_ en fonction de la taille de l'entrée : cache: input.length >= 250000
Après cela (et seulement si vous avez accès au texte fourni par l'utilisateur), je suggérerais d'examiner toute entrée qui atteint les cas OOM pour localiser les cas pathologiques courants et mettre à jour votre grammaire pour les gérer explicitement afin que vous puissiez réduire le nombre de cas OOM frapper votre application.
Si vous rencontrez encore souvent des cas de MOO et que vous souhaitez non seulement réécrire votre grammaire, mais également ajouter une passe supplémentaire (ou quelques-unes) à votre chaîne d'outils, je vous suggère d'essayer l'une de ces méthodes :
@polkovnikov-ph @futagoza merci à vous deux d'avoir pris le temps de revenir avec des conseils 👍 ! Ça a du sens. J'ai déployé la solution de contournement de taille et envisagerai de réécrire la grammaire la prochaine fois que des problèmes frapperont à la porte. Bonne journée; clôture de la question.