使用AJAX的多个表单导致页面运行得太慢

时间:2017-08-10 03:01:20

标签: jquery ajax django

我正在Django / python中构建一个网站,在这个特定的页面上,视图返回一组对象。然后,模板为每个对象生成一个表单,并使用AJAX提交表单。

一切正常,因为我想要它没有错误,但问题是视图中的对象越多,AJAX的工作速度就越慢。对于大约100个对象,每个对象需要2到3秒,其中大约有10个对象,只需不到一秒钟。

最初我试着评论提交时发生的很多事情,但它根本没有提高速度!

我不确定如何在不改变代码组织方式的情况下加快速度,我希望远离它,这是我真正喜欢的功能!

我一直在搜索,但所有答案都说这是表单的提交需要很长时间,而这对我的代码速度没有任何影响。

interact.html

{% for adopt in adopts %}
    <form class="interact-form">
        <!-- some fields -->
    </form>
{% endfor %}

<script type="text/javascript">
$(document).ready(function(){
    $(".interact-form").submit(function(){
        event.preventDefault();

        $.ajax({
            url: '{% url 'interact' %}',
            type: 'POST',
            data: $(this).serialize(),
            context: this,
            success: function(data) {
                $(this).css("opacity", "0.3");
                $(this).css("cursor", "not-allowed");
            }
        });
    });
});

我是Django的新手,对AJAX很新,非常感谢一些帮助。代码非常简单,但如果有帮助的话,这里(简化)。

1 个答案:

答案 0 :(得分:0)

我认为这是因为您将this变量传递给已经有很大内容的ajax context。所以我认为这会减慢你的ajax,而且,收到的数据类型在速度的情况下也起着重要作用(特别是html数据)。如果我是你,我只想通过使用JSON来接受来自ajax网址的dataType: 'json' - 这是您可以使用ajax播放的最快的数据类型。

$(".interact-form").submit(function(){
    event.preventDefault();
    var $this = $(this);
    $.ajax({
        url: '{% url 'interact' %}',
        type: 'POST',
        data: $(this).serialize(),
        dataType: 'json',
        success: function(data) {
            // we are now expecting that `data` is a valid JSON object
            $this.css("opacity", "0.3");
            $this.css("cursor", "not-allowed");
        }
    });
});