对Django服务器的简单Ajax调用导致响应时间慢 - TTFB变慢

时间:2017-03-01 15:30:48

标签: javascript jquery python ajax django

首先,我没有很多django,js和ajax的经验,但这是一个非常简单的例子,我找不到我的ajax调用需要花费大量时间的原因。 我当前的dev配置是:windows 7,python 3.6,django 1.10.5,运行在localhost上的服务器 - 127.0.0.1:8000

基本上,我点击一个按钮(在特定按钮组中),这会激活ajax,并根据回复,更新按钮的颜色。

信息:实际上,我使用的东西有点复杂,但由于它也很慢,我试图简化它,看看它出错了,但我仍然找不到原因。

代码ajax:

$('body').on('click', '.some_module', function(){
        var $something= $(this);

        $.ajax({
            url: 'some_function/',
            type: 'GET',
            data: {'some_name' : "just_example"},
            dataType: 'json',
            success: function(data){
                ...some_action_where_i_change_color_of_button...
                ...not important because even if it's empty, it's slow...
            }
        });
    });

代码django,views.py:

def change_module(request):
    # ...for example using hardcoded return...
    data = {
        'success': True,
        'curr': 'something',
        'selected': [],
        'previous': []
    }
        return HttpResponse(json.dumps(data), content_type='application/json')
    # tried also JSONResponse, the same feedback

因此,通过使用此示例,我等待超过1秒的更新, TTFB总是大约1秒。 TTFB与服务器端有关,但我真的不明白它是如何如此缓慢,因为我发送硬编码的json里面只有很少的字符串元素。

Chrome developer tools TTFB image

如果遇到类似问题的人与我分享他的解决方案,我将不胜感激。

1 个答案:

答案 0 :(得分:0)

如果我是你,我想使用Django Generic View类。 查看当前文档:https://docs.djangoproject.com/en/1.10/topics/class-based-views/

看看这个例子:

from django.http import JsonResponse
from django.views.generic import View
class MyViewClass(View):
   def get(self, request):
      data = {
          'success': True,
          'curr': 'something',
          'selected': [],
          'previous': []
      }
      return JSONResponse(data)

在你的js中:         关于类型的东西:

  

"如果您之前使用的是jQuery版本,则应该使用type   1.9.0"

           $.ajax({
                method: "GET", #HERE TRY TO USE METHOD INSTEAD OF TYPE
                url: "/some_function",
                data: {'some_name' : "just_example"},
                datatype: "json",
                success: function (data) {
                    ... Do Something here...
                }
            }),