【DRF性能优化】

news2024/9/20 20:36:27

一、背景

项目中有一个查询脚本的接口,查询20条数据需要5min,性能很差,需要优化
在这里插入图片描述

二、问题排查

查看代码发现,serializers中,发现了一个奇怪的查询
查询脚本时,关联的脚本版本的一些字段也需要查询出来,代码中用了一种奇怪的查询方式,每个字段都重新查询一遍版本表,导致性能损耗。

    def get_bk_os_type(self, instance):
        return self.return_job_version_data(instance=instance, column_data="bk_os_type")

    def get_bk_os_type_cn(self, instance):
        return self.return_job_version_data(instance=instance, column_data="bk_os_type_cn")

    def get_language_cn(self, instance):
        return self.return_job_version_data(instance=instance, column_data="language_cn")

    def get_language(self, instance):
        return self.return_job_version_data(instance=instance, column_data="language")

    def get_content(self, instance):
        return self.return_job_version_data(instance=instance, column_data="content")
  
    def return_job_version_data(self, instance, column_data):
        try:
            if instance.live_version:
                script_version_object = JobScriptVersion.objects.filter(
                    job_script=instance.id, version=instance.live_version
                ).last()
                return JobScriptVersionModelSerializers(instance=script_version_object).data[column_data]
            else:
                if column_data in ["language", "content"]:
                    script_version_object = (
                        JobScriptVersion.objects.filter(job_script=instance.id, is_deleted=False)
                        .order_by("updated_time")
                        .last()
                    )
                    return JobScriptVersionModelSerializers(instance=script_version_object).data[column_data]
            return "--"
        except Exception:
            return "--"

除此之外,还存在很多应该查缓存,却实时查询接口的数据,导致接口很慢

三、措施

  1. 统一写一个函数,查询版本信息,然后通过to_representation更新返回数据
  2. 使用redis缓存数据,提升性能

最终,这个请求优化到2s

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1967581.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

安卓单机游戏:世界盒子手机游戏,最新版,春秋MOD整合 下载

《世界盒子》(WorldBox)是一款由Maxim Karpenko制作的沙盒模拟类游戏。这款游戏允许玩家在游戏中扮演上帝的角色,使用神力来创造和改变像素世界。玩家可以利用水、沙子、土壤、森林、人类、种子、动物等元素,以及温度、降雨等环境…

【数据结构】了解哈希表,解决哈希冲突,用Java模拟实现哈希桶

哈希表的概念 哈希表(Hash Table)是一种高效的数据结构,用于实现快速的数据存储和检索。它通过将数据映射到一个数组的索引位置,从而能够在平均情况下实现O(1)的时间复杂度进行查找、插入和删除操作。 哈希表的基本概念包括以下…

LLM应用-prompt提示:让大模型总结生成PPT

参考: https://mp.weixin.qq.com/s/frKOjf4hb6yec8LzSmvQ7A 思路:通过大模型生成markdown内容,通过markdown去生成PPT 技术:Marp(https://marp.app/)这里用的这个工具进行markdown转PPT 1、让大模型生成Ma…

川土微电子|高性能模拟芯片供应商

上海川土微电子有限公司,成立于2016年,总部位在上海,并于深圳、北京、杭州设有分支机构,产品涵盖隔离与接口、驱动与电源、高性能模拟三大产品线以及μMiC战略产品( micro-Module in Chip)。目前产品已广泛…

玩转大模型之五(测试FastGPT高级编排)

一、高级编排 FastGPT 从 V4 版本开始采用新的交互方式来构建 AI 应用。使用了 Flow 节点编排(工作流)的方式来实现复杂工作流,提高可玩性和扩展性。但同时也提高了上手的门槛,有一定开发背景的用户使用起来会比较容易。 编排方…

局域网内远程控制桌面软件推荐

在现代办公环境中,局域网(LAN)内的远程桌面连接已成为提升工作效率和促进团队协作的关键技术之一。无论是需要访问办公室内部服务器,还是在家工作时远程操作公司电脑,局域网内的远程桌面都能满足这一需求。本文将探讨在…

互联网家政小程序,为大众带来高效、便捷的服务

随着人口老龄化的严重和社会生活节奏的加快,大众对家政服务的需求日益增加,家政行业的市场规模逐渐扩大! 在科技的推动下,家政行业开始向数字化发展,“互联网家政”的模式推动了市场的快速发展。互联网家政小程序借助…

安卓Intent

文章目录 Intent新建一个活动显示Intent隐式Intent同多隐式Intent用法向下一个活动传递数据向上一个活动返回数据 Intent Intent是Android程序中各组件之间进行交互的一种重要方式,它不仅可以指明当前组件想要执行的动作,还可以在不同组件之间传递数据。…

EPM 和 EPM-P 系列功率计

EPM 和 EPM-P 系列功率计 是德(KEYSIGHT)简述 EPM 功率计提供了 CW 和平均功率测量功能。EPM-P 功率计提供了峰值、均值、峰值均值比和时间选通功率测量功能。 EPM系列 功率计表 功能特点 EPM 和 EPM-P 系列提供高性能、可编程的功率计,以执行连续波、平均功率和…

Wasm(WebAssembly) 编译环境搭建、浏览器调用

参考:https://www.deanhan.cn/wasm.html 以下以Windows系统 c 语音编译为wasm为例说明: 安装npm访问Node.js官方网站:https://nodejs.org/ 点击“Download”按钮,选择Windows版本(32位或64位)。 下载完成后,运行安装程序。 安装过程中,确保选中了“Add Node.js to …

42 字典创建与删除

字典(dict)是包含 “键:值” 元素的无序可变序列,字典中的每个元素包含用冒号分隔开的 “键” 和 “值” 两部分,表示一种映射或对应关系,也称为关联数组。定义字典时,每个元素的 “键” 和 “值” 之间用冒…

嵌入式C++、ROS 、OpenCV、SLAM 算法和路径规划算法:自主导航的移动机器人流程设计(代码示例)

在当今科技迅速发展的背景下,嵌入式自主移动机器人以其广泛的应用前景和技术挑战吸引了越来越多的研究者和开发者。本文将详细介绍一个嵌入式自主移动机器人项目,涵盖其硬件与软件系统设计、代码实现及项目总结,并提供相关参考文献。 项目概…

云原生系列 - Docker(高级篇)

前言 学习视频:尚硅谷Docker实战教程(docker教程天花板)本内容仅用于个人学习笔记,如有侵扰,联系删学习文档: 云原生系列 - Docker(基础篇)云原生系列 - Docker(高级篇)云原生系列 - Docker搭建私有仓库 云…

PieCloudVector:大模型时代下向量数据库的设计与应用

近几年大语言模型的突破带来自然语言相关的向量数据爆炸式增长,同时为管理这些向量数据而设计的向量数据库的关注度也在不断提高。大语言模型和向量数据库的组合在多个领域都具有广泛的应用,如语义检索、推荐系统、问答机器人等。本文将探讨向量数据库在…

超市是怎样高效完成客流统计与客流分析

随着科技的进步,越来越多的超市开始采用现代化的客流统计系统来优化日常运营和提升顾客体验。本文将探讨超市客流统计面临的难题、客流统计系统的构成及其应用场景,以及系统如何通过高识别率和热力图分析等功能为超市带来实际效益。 一、景区客流统计难题…

应用技术案例:复合机器人在精密制造领域的精准赋能

在精密制造这一对设备精度、稳定性及效率要求近乎苛刻的行业中,复合机器人以其无与伦比的多功能性、极致的灵活性以及精准的操控能力,正在为该领域实现降本增效。以下,我们分享一个富唯智能的复合机器人在精密制造领域的应用案例。 案例背景&…

记一次使用visual studio编译C++项目时无法找到 enum中的某些项

vs 2017 编译一个cocos2dx 的老项目时,报错: 在项目中搜索关键字 ARMATURE_LOOP_COMPLETE,发现在文件EventType.h中是有定义的,是 enum Event 的一项,而且确认了报错的文件已经引入了这个头文件: 于是想检查…

C++ 与其他编程语言区别_C++11/14/17新特性总结

C11 decltype类型推导 decltype不依赖于初始化,根据表达式类推导类型 auto b :根据右边a的初始值来推导出变量的类型,然后将该初始值赋给bdecltype 则是根据a表达式来推导类型,变量的初始值与表达式的值无关表达式类型注意点&…

React组件生命周期

一张图解释 React 类组件生命周期方法 React 类组件的生命周期可以分为三个主要阶段: 挂载(Mounting) 更新(Updating) 卸载(Unmounting) 挂载阶段 在组件实例被创建并插入到 DOM 中时调用…

目标检测 | yolov1 原理和介绍

简介 论文链接:https://arxiv.org/abs/1506.02640 时间:2015年 作者:Joseph Redmon 代码参考:https://github.com/abeardear/pytorch-YOLO-v1 yolo属于one-stage算法,仅仅使用一个CNN网络直接预测不同目标的类别与位置…