При редактировании и сохранении очень длинных сообщений (около 100 000 символов) мы столкнулись с проблемой тайм-аута на стороне сервера. Во время операции сохранения сервер становится недоступным, что приводит к ошибкам 502/504. В консоли фронтенда отображается следующий стек ошибок:
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
Мы провели ряд сравнительных тестов, которые указывают на то, что узким местом является вычисление разницы (diff) между старой и новой версиями:
- Прямое редактирование длинного сообщения A в длинное сообщение B и последующее сохранение стабильно вызывает тайм-аут с ошибкой 502/504.
- Очистка длинного сообщения, сохранение короткого временного текста (например, 5 символов), затем вставка полного нового содержимого B и сохранение выполняются быстро.
Похоже, что текущий механизм вычисления разницы (Diff engine) не справляется с экстремальными случаями, когда очень длинный текст сопровождается высоким процентом изменений. Не могли бы вы добавить механизм снижения производительности (fallback)? Например, если текст очень длинный и доля изменений высока, система могла бы рассматривать это как «Полное переписывание» вместо детального поблочного сравнения.
Есть ли у команды планы по оптимизации обработки Diff для больших сообщений или внедрению механизма плавного снижения функциональности (graceful degradation) / защиты для таких сценариев? Еще одна идея: разрешать сначала успешное сохранение, а вычисление разницы выполнять асинхронно после этого.