Flask 返回 JSON 慢在哪?换 orjson 能快多少?datetime 与 Decimal 为什么会拖慢?sort_keys 与 asdict 的代价是什么?这篇把每一环量出来。
json.dumps 默认 7.07 ms json.dumps sort_keys=True 9.32 ms json.dumps ensure_ascii=False 7.37 ms json.dumps 紧凑 separators 7.06 ms orjson.dumps 0.92 ms orjson.dumps + OPT_SORT_KEYS 1.27 ms
上一篇:模板渲染耗时;下一篇:Gunicorn Worker 数量。
第 117 篇从大响应的角度看过一次 orjson,这里把序列化各环节拆开比较。
json.dumps + default 钩子 16.66 ms orjson.dumps(datetime 原生,Decimal 用 default) 2.20 ms default 钩子被调用的次数(每行 2 个对象): 20000
Flask 默认 provider /plain 9.6 ms | /rich 30.0 ms | /plain 响应 1.11 MB orjson provider /plain 1.0 ms | /rich 2.3 ms | /plain 响应 1.11 MB
dataclasses.asdict 14.5 ms | 手写字典推导 1.4 ms | json.dumps(dict 列表) 7.4 ms | orjson 直接序列化 dataclass 对象 1.2 ms