【问题标题】:Django-Autocomplete-Light Widget causing long loading times in Django-Rest-FrameworkDjango-Autocomplete-Light Widget 在 Django-Rest-Framework 中导致加载时间过长
【发布时间】:2025-12-04 06:50:02
【问题描述】:

我目前正在使用 Django-Rest-Framework 开发 API。 API 本身运行良好,我现在正在尝试实现资源过滤。这也很有魅力,但问题是,当我尝试使用 Django-Autocomplete-Light 中的 ModelSelect2-Widget 来处理 Browsable API 中的关系过滤时,(因为可能有很多可能的选项可供选择,如果需要,我正在使用自动完成小部件动态加载更多选项)由于脚本,浏览器突然需要太长时间来加载页面。 (Firefox实际上是在询问是否应该关闭jQuery)

我设法将问题缩小到 DRF 使用的脚本和 DAL 需要的脚本之间的某种问题。

这些是 Django Rest Framework (Source) 与页面一起加载的脚本:

  <script>
    window.drf = {
      csrfCookieName: "{{ csrf_cookie_name|default:'csrftoken' }}"
    };
  </script>
  <script src="{% static "rest_framework/js/jquery-1.12.4.min.js" %}"></script>
  <script src="{% static "rest_framework/js/ajax-form.js" %}"></script>
  <script src="{% static "rest_framework/js/csrf.js" %}"></script>
  <script src="{% static "rest_framework/js/bootstrap.min.js" %}"></script>
  <script src="{% static "rest_framework/js/prettify-min.js" %}"></script>
  <script src="{% static "rest_framework/js/default.js" %}"></script>
  <script>
    $(document).ready(function() {
      $('form').ajaxForm();
    });
  </script>

通过 Django-Autocomplete-Light(Source for autocomplet.init.js and jquery.init.jsSource for select2.js and select2.full.js):

<script src="{% static 'autocomplete_light/jquery.init.js' %}"></script>
<script src="{% static 'autocomplete_light/autocomplete.init.js' %}"></script>
<script src="{% static 'autocomplete_light/vendor/select2/dist/js/select2.full.js' %}"></script>
<script src="{% static 'autocomplete_light/select2.js' %}"></script>

问题似乎与prettify-min.js 和 DAL 中的脚本有关,因为我可以注释掉其中一个,页面再次正常工作。

Firefox 运行时分析的屏幕截图: 脚本需要“美化”的数据越多,情况就越糟糕。

有人知道如何解决这个问题吗?

【问题讨论】:

    标签: javascript jquery performance django-rest-framework django-autocomplete-light


    【解决方案1】:

    所以我自己解决了这个问题...... 我只是将autocomplete.init.jsselect2.js的内容放在$(document).ready(function(){...})中。为什么?我不知道,但它似乎工作得很好。 ¯\_(ツ)_/¯

    如果有人知道这方面的解释,请随时分享。

    【讨论】:

      最近更新 更多