Как ускорить работу с большими данными (5 000 000) в Django с помощью Datatables No django-datatables-view No Rest Framework - PullRequest
0 голосов
/ 30 мая 2019

Я хочу получить большие данные (например, 5 000 000) с таблицами данных в Django. Но обработка идет медленно (загрузка страницы составляет 12 секунд). Пользователи заходят на веб-страницу. Затем нажмите, чтобы проверить .html. Внутренний процесс запускается до test_json в представлениях. Представления вызывают вызов данных из БД с помощью to_dict_json. На Models.py. Этот метод в Views возвращает объекты ответа Json. Как ускорить работу с большими данными в Django с помощью таблиц данных

Models.py

class SysTest(models.Model):

class Meta:
    db_table = 'sysTest'

id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
Tip = models.ForeignKey(SysRefTip, on_delete=models.CASCADE)
Kod = models.CharField(_("Kod"), max_length=20, blank=False, null=False)
Aciklama1 = models.CharField(_("Açıklama 1"), max_length=100,blank=True, null=True)
Aciklama2 = models.CharField(_("Açıklama 2"), max_length=100,blank=True, null=True)
GrupKod = models.CharField(_("Grup Kodu"), max_length=20,blank=True, null=True)
SayKod = models.FloatField(_("Sayısal Değer"),blank=True, null=True)

def to_dict_json(self):

    return{
        'Id':self.id,
        'Kod':self.Kod,
        'Aciklama1':self.Aciklama1,
        'Aciklama2':self.Aciklama2,
        'GrupKod':self.GrupKod,
        'SayKod':self.SayKod,
    }

View.py

def test_json(request):
    persons  = SysTest.objects.all()
    data = [person.to_dict_json() for person in persons ]
    response = {'data': data}
   return JsonResponse(response,safe=False,content_type="application/json")

Urls.py

from django.urls import path, include
from Referans.Views import testView
from django.conf.urls.i18n import i18n_patterns
app_name ="Test"

urlpatterns = [
    path('', testView.test_listele , name="test"),
    path('test/json/', testView.test_json, name='test_json'),

]

test.html

            <div class="card-body">

                <table id="myTable2" class="table datatable-responsive-control-right">
                <thead>
                    <tr>
                        <th>Id</th>
                        <th>Kod</th>
                        <th>Açıklama1</th>
                        <th>Açıklama2</th>
                        <th>SayKod</th>
                        <th>GrupKod</th>
                    </tr>
                    </thead>
                </table>





                </div>

            {% block js%}
            <script>

            $(document).ready( function () {
            var t0 = performance.now();
            degerleriGetir('test/json')
            var t1 = performance.now();

            });

            function degerleriGetir(data){

                table =$('#myTable2').DataTable({
                        Serverside:true,
                        Processing: true,
                        orderClasses: false,
                        bSortClasses:false,
                        bDeferRender: true,
                        scrollCollapse: true,
                        scrollY: 500,
                        stateSave: true,
                        scroller: {
                            loadingIndicator: true
                        },            
                        ajax:{
                        url:('test/json'),
                        processing:true,
                        },
                        destroy:true,
                        columns: [
                        {'data': 'Id'},
                        {'data': 'Kod'},
                        {'data': 'Aciklama1'},
                        {'data': 'Aciklama2'},
                        {'data': 'GrupKod'},
                        {'data': 'SayKod'}  
                        ]
                    });
            };

            </script>

            {% endblock js  %}

1 Ответ

0 голосов
/ 30 мая 2019

Асинхронная загрузка выполняется, например, по запросу ajax. Javascript контролирует, какие страницы пользователь хочет видеть, делая запрос к django "view_url +? Page = X". Затем получите информацию (обычно в формате json) и загрузите содержимое в html. Я никогда не использовал DataTable, поэтому не могу точно сказать, что вам нужно делать. Я говорю вам, что вы можете сделать для достижения этой асинхронной загрузки. Другой вариант - это обычное разбиение на страницы, каждый раз загружая страницу для каждой страницы (намного проще реализовать вручную). Взгляните на модель ListView django, чтобы сделать вашу реализацию проще и быстрее!

Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...