Durante la modifica e il salvataggio di post estremamente lunghi (circa 100.000 caratteri), abbiamo riscontrato un problema di timeout del backend. Il server diventa non rispondente durante l’operazione di salvataggio, generando errori 502/504. La console del frontend mostra il seguente stack di errori:
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
Ho eseguito alcuni test comparativi che suggeriscono che il collo di bottiglia si trova nel calcolo della differenza tra le versioni vecchia e nuova:
- Modificare direttamente un lungo post A in un lungo post B e salvarlo innesca costantemente un timeout 502/504.
- Cancellare innanzitutto il post lungo, salvare un segnaposto breve (ad esempio 5 caratteri), quindi incollare il contenuto nuovo completo B e salvarlo si completa rapidamente.
Sembra che il motore Diff attuale faticasse nei casi estremi che coinvolgono testo molto lungo combinato con un’elevata percentuale di modifiche. Sarebbe possibile aggiungere un meccanismo di fallback per le prestazioni? Ad esempio, quando il testo è estremamente lungo e il rapporto di modifica è elevato, il sistema potrebbe trattarlo come una “Riscrittura Completa” invece di eseguire un diff dettagliato riga per riga.
Il team ha in programma di ottimizzare la gestione del Diff per i post di grandi dimensioni, o di introdurre una sorta di degradazione graduale / protezione per tali scenari? Un’altra idea è consentire il salvataggio con successo prima, e calcolare il diff in modo asincrono in seguito.