Ao editar e salvar posts extremamente longos (cerca de 100.000 caracteres), encontramos um problema de tempo limite no backend. O servidor torna-se inresponsivo durante a operação de salvamento, resultando em erros 502/504. O console do front-end exibe a seguinte pilha de erros:
ajax-error.js:36:15
l ajax-error.js:36
u ajax-error.js:75
d ajax-error.js:84
Ember 41
update rest.js:72
update rest.js:72
save rest.js:115
editPost composer.js:1147
Ember 6
Realizei alguns testes comparativos que sugerem que o gargalo está no cálculo da diferença entre as versões antiga e nova:
- Editar diretamente o post longo A para o post longo B e salvar aciona consistentemente um tempo limite 502/504.
- Limpar o post longo primeiro, salvar um espaço reservado curto (por exemplo, 5 caracteres), colar todo o novo conteúdo B e salvar conclui-se rapidamente.
Parece que o mecanismo de Diff atual tem dificuldades com casos extremos que envolvem texto muito longo combinado com uma alta porcentagem de alterações. Seria possível adicionar um mecanismo de fallback de desempenho? Por exemplo, quando o texto é extremamente longo e a taxa de modificação é alta, o sistema poderia tratá-lo como uma “Reescrita Completa” em vez de realizar um diff detalhado linha por linha.
A equipe tem algum plano para otimizar o manuseio de Diff para posts grandes ou introduzir algum tipo de degradação graciosa / proteção para esses cenários? Outra ideia é permitir que o salvamento seja bem-sucedido primeiro e calcular o diff assincronamente depois.