Один з ендпоінтів, що завантажував історію транзакцій (15 000+ записів), працював дуже повільно – 847 мс. Оптимізація бази даних та індексація майже не допомогли, оскільки запит до БД займав лише 94 мс.
Профайлінг показав, що 722 мс йшло на серіалізацію даних у JSON та передачу мережею. JSON перетворює все на текст, що робить корисне навантаження (payload) величезним і повільним для парсингу.
Автор замінив JSON на MessagePack. Це бінарний формат серіалізації: такі ж структури даних, як у JSON, але у бінарному вигляді (компактніші та швидші).
Всього ~47 рядків коду (зміни на бекенді Python та фронтенді JS).
Не менш цікавішими були коментарі. Автор пише, що вони не використовували пагінацію – продакт заборонив. На що в коментарях зазначили, що JSON – де-факто є стандартом для API і проблема була не в JSON, а в неправильному використанні API-підходу для задачі, яка фактично є bulk-експортом даних. Зменшення payload-у просто приховало архітектурну проблему.
Коментатор наголошує: система могла залишитись на JSON, якщо б дизайн був правильним:
🌏 Оригінал: medium.com