cache
nos problemas do GitHub, encontrei alguns problemas no cache, mas não é o que estou pedindo.Estou analisando uma parte bastante pesada (500 KB) de texto fornecido pelo usuário usando uma gramática de aproximadamente 1000 linhas.
{cache: true}
...--max-old-space-size=3000
), o heap cresce para 2,5 GB e a análise é bem-sucedida em 12s.{cache: false}
, como esperado, a análise de relógios é um pouco mais rápida em 10s (caso não patológico) e não aumenta o uso de memória.Esses são os dados do usuário e os recursos do meu servidor são limitados, portanto, fazer com que o Node use X GB de heap não é uma opção, pois amanhã posso obter 1 MB de dados do usuário que exigiriam X + 1 GB de heap. E, claro, gostaria de continuar usando {cache: true}
quando possível, para "evitar o tempo de análise exponencial em casos patológicos" , que conheci.
Que abordagem você recomenda?
{cache: true}
base no tamanho da entrada. Isso vai me custar mais uso da CPU, mas pelo menos não vou OOM.Obrigado pelo PEG.js! 🙂
Tempos de análise exponencial é algo que acontece em casos muito patológicos, e eu recomendo reescrever a gramática lá.
Considere https://github.com/sirthias/pegdown/issues/43#issuecomment -18469752
(Não sou um contribuidor)
Como @ polkovnikov-ph apontou, é melhor reescrever partes de sua gramática que lidam com casos patológicos, mas se você continuar acertando casos OOM, pode ser melhor fazer o que você (@ronjouch) sugeriu; alterne a opção _cache_ com base no tamanho da entrada: cache: input.length >= 250000
Depois disso (e apenas se você tiver acesso ao texto fornecido pelo usuário), sugiro examinar qualquer entrada que acesse os casos OOM para localizar quaisquer casos patológicos comuns e atualizar sua gramática para lidar explicitamente com eles para que você possa reduzir o número de casos OOM acessando seu aplicativo.
Se você ainda está acertando casos OOM com frequência e está disposto a não apenas reescrever sua gramática, mas também adicionar uma passagem extra (ou poucas) à sua cadeia de ferramentas, sugiro tentar qualquer um destes métodos:
@ polkovnikov-ph @futagoza obrigado a vocês dois por terem voltado com conselhos 👍! Isso faz sentido. Implantei a solução alternativa de tamanho e considerarei reescrever a gramática da próxima vez que o problema aparecer. Dia bom; encerrando a questão.