跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • django 如何优化?
未分類
4 2 月 2021

django 如何优化?

django 如何优化?

資深大佬 : lixuda 7

先说说使用感觉: 小白用户,之前用 flask,后面发现需要太多自己实现功能,改成 django,开发功能速度马上提升。 没有数据对比,只能使用的感觉 flask 比 django 响应快点,只能是一种感觉。 另外偶然性出现读取数据库时间过长,反复测试,就是偶发性。

所以问问高手们,具体使用过程中 django 该如何优化?

  1. value value_list 方式能否加快数据读取? 如:Model.objects.values_list(‘key’,’key1′).filter(id=id).all()[:10]
  2. 关闭 USE_I18N 能有多少提升?
  3. ORM 使用上有什么好的技巧?
  4. 哪些配置可以关闭如 MIDDLEWARE
  5. 有没有好的目录结构推荐
  6. 有没有更多优化?
大佬有話說 (13)

  • 資深大佬 : wuwukai007

    把 csrf 关了,速度立马提升

  • 資深大佬 : XiaoxiaoPu

    ORM 查询优化可以看看 www.jianshu.com/p/aded5b2029f6
    不过第一步是先精确定位到慢在哪

  • 資深大佬 : charexcalibur

    空了可以看看官方的优化建议 https://docs.djangoproject.com/en/3.1/topics/performance/

  • 資深大佬 : reorx

    1. 可以,values / values_list 相当于只 select 了指定的 fields ;如果需要得到 model instance 可以用 only / defer
    2. 初次启动代码加载的提升,不影响 view 的处理时间
    4. 了解每个具体的作用,视情况关闭,极端情况下都可以关闭
    5. 可以看下我自己常用的脚手架项目,暂时还没有文档说明,与 django 官方教程的不同在于,只有一个 app,但会有多个 modules 中存在 models,通过自定义 AppConfig 完成加载 https://github.com/reorx/django_starter_pack/tree/master/starter_app

  • 主 資深大佬 : lixuda

    @reorx 感谢,https://github.com/reorx/django_starter_pack/tree/master/starter_app 404?

  • 資深大佬 : zachlhb

    use_i18n 不建议关闭,队列框架用的是 utc 时间的,关了队列的时间就会有大坑

  • 資深大佬 : reorx

    @lixuda 不好意思,忘了改项目的可见性,现在好了

  • 資深大佬 : allisone

    django 就是上手快

  • 主 資深大佬 : lixuda

    @reorx 可以了,非常感谢。另外看见可以外部程序引用 django model 的 orm ?之前定时程序,用 peewee 来做,如果能直接用 app 里面 model 就方便多了

  • 資深大佬 : reorx

    @lixuda 可以在外部程序中引用 django orm,需要在 import models 之前完成 `django.setup()`, 我封装了一个简单的函数 `setup_django` 专门用来执行这个操作,见文件 `utils/django_setup.py`.

    示例见 `cli.py`: https://github.com/reorx/django_starter_pack/blob/master/cli.py

  • 資深大佬 : erakayin

    可以试下 https://github.com/jazzband/django-silk

  • 資深大佬 : nonduality

    官网的教程很详细了,按照那个去做速度就能提升很多,基本上是:
    0 、首先用 django debug tools 检查到底慢在哪,这个工具还是挺好用的;其次打开 context_processors 里头的 debug,再打开日志 django 里头的 log_level 为 debug,这样数据库每次访问的 sql 语句和次数都会打印出来,方便进行优化;
    1 、对数据库使用 prefetch,用 only 或 defer 获取只需要的字段,数据库写入可以使用 update_fields 只更新特定字段; values_list 是能提升读取速度,但用起来不算太方便;
    2 、对网页片段或生成的 json 缓存(配合 Redis 或 DiskCache 做后端都行);
    3 、取消不必要的 middleware,比如不需要在模板用 Message,可以把它取消;还有 context_processors 里头 request 跟 auth 是重复的,仅方便你用 request 对象,你不需要可以取消 request,需要时再传入模板;
    4 、生成 csrf key 确实很慢,如果不需要可以关掉;
    5 、针对特定 view,对其算法进行优化,比方我有需要频繁合成一个特定时间,后来优化成用时间戳去算,就快了很多。

  • 資深大佬 : tmackan

    先优化你的业务逻辑 /业务流程
    profile 找到耗时的 func,然后想办法优化掉
    另外 ORM 必须打印出 SQL 语句还要自己分析,是否合理
    py 的 orm 中默认大量是用 select * 的查询,无法走索引覆盖,需要回表。。。

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具