Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django REST框架速度很慢_Django_Rest_Django Rest Framework - Fatal编程技术网

Django REST框架速度很慢

Django REST框架速度很慢,django,rest,django-rest-framework,Django,Rest,Django Rest Framework,我开始使用Django REST框架为生产做准备,但不幸的是,它的运行非常缓慢 我正在调用500个字典的数组,每个字典都有5个键值对。在shell中,调用时间一点也不明显-按enter键,调用就完成了。以前,当我在没有REST框架的情况下直接提供相同的内容时,也没有明显的延迟。然而,对于REST框架,在页面呈现之后,显示内容大约需要1-2秒 我不认为这是因为javascript通过可浏览API访问相同的细节会导致类似的延迟 另外,我现在没有缓存。其他任何人都无法根据问题中给出的细节为您调试 您

我开始使用Django REST框架为生产做准备,但不幸的是,它的运行非常缓慢

我正在调用500个字典的数组,每个字典都有5个键值对。在shell中,调用时间一点也不明显-按enter键,调用就完成了。以前,当我在没有REST框架的情况下直接提供相同的内容时,也没有明显的延迟。然而,对于REST框架,在页面呈现之后,显示内容大约需要1-2秒

我不认为这是因为javascript通过可浏览API访问相同的细节会导致类似的延迟


另外,我现在没有缓存。

其他任何人都无法根据问题中给出的细节为您调试

  • 您是重用现有的通用视图还是编写自己的视图
  • 您正在序列化数据吗?如果是,序列化程序定义是什么样子的
  • 该问题是在呈现到JSON时出现的,还是仅在呈现到可浏览的API时出现的
  • 您提到在没有REST框架的情况下提供内容-视图以前是什么样子,之后是什么样子
REST框架视图很简单,所以请使用分析工具,或者简单地覆盖它们并添加一些计时。同样,渲染器也很简单-将当前使用的渲染器子类化,覆盖
.render()
,并在调用父级的
.render()方法的任一侧添加两个计时调用

如果你认为你已经把一个问题缩小到了一个特定的领域,那么把一个最小的测试用例放在一起,作为一个问题提交

序列化本身不太可能是一个问题,我使用了相同的序列化引擎来复制Django的fixture dumping,没有明显的降级

如果要跨模型关系进行查找,则可能需要添加
。在构造queryset时,选择\u related()
。预取\u related()
调用,这与使用任何其他Django视图时完全一样



编辑:请注意,在这篇文章之后,序列化程序的速度有了显著的提高。

您是否尝试分析视图以查看占用时间的内容?我以前使用过纵断面图。您是否尝试回滚到以前的解决方案并执行相同的API调用?这可能与库无关。@Torsten-刚刚确认直接调用postgresql要快得多。我会确认它是否是JS,但是,由于命中内置可浏览API的速度同样慢,我觉得可能是DRF。您是否尝试过在响应上运行simplejson.dumps(在shell中)以查看它实际序列化为json的速度?如果仍然很慢,您可能需要使用,如果不是,请在从直接http请求(例如,使用或)调用时测试DRF的响应。谢谢!我会尝试一下,如果仍然有问题,我会提交一个关于GH的问题。我使用的通用视图在前后都是一样的。我在查询集中添加了一个prefetch_related(),并且得到了与DRF相同的延迟。将配置和更新。只是另一个更新:我用tastypie测试了相同的设置,加载速度非常快。但是,我仍然会尝试调试这个,因为我希望将来无论如何都能使用DRF。如果你能发布一些示例代码来演示你看到的问题,我会尝试研究它。