You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django项目中json.dumps处理序列化后数据耗时过长如何优化

性能优化方案

核心原因:当处理的Allotment数据量较大、且嵌套关联的flows数据较多时,Python内置json.dumps处理多层级的大体积Python容器(列表+嵌套字典)本身性能较低,是耗时高的核心诱因。可通过以下方式优化:

  • 替换为高性能JSON序列化库
    直接替换内置json库为性能更高的orjson或ujson,对于嵌套大体积数据场景可获得数倍至数十倍的性能提升。
    示例代码(以orjson为例):
    import orjson
    # 注意orjson.dumps返回bytes类型,需要字符串的话可调用.decode('utf-8')
    items_json = orjson.dumps(serializer.data).decode('utf-8')
    
    若使用ujson,仅需将导入改为import ujson,调用方式和内置json完全一致。
  • 直接使用DRF的JSONRenderer输出
    无需手动调用dumps,直接用DRF自带的渲染器处理序列化结果,可在项目配置中统一指定渲染器使用高性能json库,无需逐个修改业务代码。
    示例代码:
    from rest_framework.renderers import JSONRenderer
    items_json = JSONRenderer().render(serializer.data)
    
    全局配置示例(settings.py):
    REST_FRAMEWORK = {
        'JSON_RENDERER_CLASS': 'rest_framework_orjson.renderers.ORJSONRenderer',
    }
    
  • 扁平化序列化结构减少嵌套层级
    当前的序列化器存在两层嵌套(Allotment -> flows -> kit),嵌套层级越多json序列化耗时越高。可将嵌套字段扁平化,去掉不必要的对象层级:
    class AllotmentFlowsSerializer(serializers.ModelSerializer):
        flow = serializers.SlugRelatedField(read_only=True, slug_field='flow_name')
        # 直接提取kit的字段,取消嵌套的kit对象
        kit_name = serializers.CharField(source='kit.kit_name', read_only=True)
        kit_type = serializers.CharField(source='kit.kit_type', read_only=True)
        class Meta:
            model = AllotmentFlow
            fields =('flow', 'kit_name', 'kit_type', 'alloted_quantity')
    
  • 超大数据场景使用流式响应
    如果是生成报表用于下载,不要将全量数据加载到内存后再序列化,使用Django的StreamingHttpResponse配合生成器逐块输出JSON内容,既降低内存占用,也能减少整体耗时。

内容的提问来源于stack exchange,提问作者Rahul Sharma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 08:06:02