Содржина на објавата
JSON API сейчас весьма актуален в сфере веб-приложений. Но у стандартной библиотеки json есть проблема - она относительно медленная. Если ваше веб приложение должно тянуть держать нагрузку, то такие популярные операции как сериализация и десериализация JSON хорошо бы максимально оптимизировать. Каждый запрос это преобразование JSON-строки в объект, обработка запроса, и обратное кодирование объекта в JSON-строку. Буквально - каждый! Исходные данные для теста: file = 'data.json' # 156kb with open(file, 'r') as f: file_data = f.read() data = json.loads(file_data) count = 50000 Сделаем эталонный замер стандартной библиотеки start = time.perf_counter() for i in range(count): json.loads(file_data) end = time.perf_counter() json_time_decode = end - start start = time.perf_counter() for i in range(count): json.dumps(data) end = time.perf_counter() json_time_encode = end - start print(f'Json time: {round(json_time_decode, 2)}s/{round(json_time_encode)}s') # Json time: 50.04s/40s Итак, какие есть альтернативы? Сравнивать будем с библиотеками orjson и ujson. Код находится на github, а здесь приведу только результаты. Json time: 50.04s/40s Orjson time: 20.27s [2.47x speed] / 5.46s [7.35x speed] Ujson time: 47.29s [1.06x speed] / 35.04s [1.15x speed] Неплохой прирост с orjson я считаю! А вот ujson не особо опередил. Тест проводился на Windows 10. Интересно, что на Linux ujson даже медленней чем стандартный. Но, думаю, это у меня какие-то проблемки. В тесты я не добавил simplejson. Он не сильно быстрей стандартного модуля. Если вы пишете приложения на FastAPI, то в 3 строки можете ускорить обработку JSON-ответа! Есть встроенный класс для этого. 1. Установка poetry add orjson # or pip install orjson 2. Имопрт from fastapi.responses import ORJSONResponse # Там же лежит и UJSONResponse 3. Подключение app = FastAPI( ... default_response_class=ORJSONResponse ) Для Django тоже есть решение: drf-orjson-renderer #libs